Skip to main content
GameDev.net gamedev.net
🔒 Locked

need and implementation of matrix.createFromAxisAngle

Started by Gl_Terminator Aug 13, 2013 at 2:00 PM 1 replies 3.1k views
Original Post
Gl_Terminator
Gl_Terminator
This is the last piece of my 3DS model loader. please I need it in c#.
Paradigm Shifter
Paradigm Shifter

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 = (ux, uy, uz), where ux2 + uy2 + uz2 = 1, the matrix for a rotation by an angle of ? about an axis in the direction of u is

fbaee547c3c65ad3d48112502363378a.png[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.

"Most people think, great God will come from the sky, take away everything, and make everybody feel high" - Bob Marley
shazen
shazen

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.

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.