**0**

# need and implementation of matrix.createFromAxisAngle

###
#2
Crossbones+ - Reputation: **5749**

Posted 13 August 2013 - 08:08 AM

Did you google "axis angle matrix" and look at the first hit (wikipedia)?

**Rotation matrix from axis and angle**

For some applications, it is helpful to be able to make a rotation with a given axis. Given a unit vector **u** = (*u*_{x}, *u*_{y}, *u*_{z}), where *u*_{x}^{2} + *u*_{y}^{2} + *u*_{z}^{2} = 1, the matrix for a rotation by an angle of *θ* about an axis in the direction of **u** is

^{[2]}

EDIT: For a 4x4 matrix the bottom right corner will be 1 and the other entries on the 4th row and column will be 0.

**Edited by Paradigm Shifter, 13 August 2013 - 08:10 AM.**

###
#3
Members - Reputation: **291**

Posted 13 August 2013 - 08:29 AM

Get a hold of reflector so you can see how the Xna framework does it...

public static Matrix CreateFromAxisAngle(Vector3 axis, float angle) { Matrix matrix; float x = axis.X; float y = axis.Y; float z = axis.Z; float num2 = (float) Math.Sin((double) angle); float num = (float) Math.Cos((double) angle); float num11 = x * x; float num10 = y * y; float num9 = z * z; float num8 = x * y; float num7 = x * z; float num6 = y * z; matrix.M11 = num11 + (num * (1f - num11)); matrix.M12 = (num8 - (num * num8)) + (num2 * z); matrix.M13 = (num7 - (num * num7)) - (num2 * y); matrix.M14 = 0f; matrix.M21 = (num8 - (num * num8)) - (num2 * z); matrix.M22 = num10 + (num * (1f - num10)); matrix.M23 = (num6 - (num * num6)) + (num2 * x); matrix.M24 = 0f; matrix.M31 = (num7 - (num * num7)) + (num2 * y); matrix.M32 = (num6 - (num * num6)) - (num2 * x); matrix.M33 = num9 + (num * (1f - num9)); matrix.M34 = 0f; matrix.M41 = 0f; matrix.M42 = 0f; matrix.M43 = 0f; matrix.M44 = 1f; return matrix; }

Don't forget this depends on the axis parameter being unit length.

**Edited by shazen, 13 August 2013 - 08:30 AM.**