• Advertisement
Sign in to follow this  

[Answered] Matrix create from XYZ rotation: scale problem

This topic is 1930 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts


I've been coding my own math library and I got a bug when I create a Matrix from a rotation across the X, Y and Z axises. The bug is that it also scales my vectors. I know it might be hard to understand my code, but you are my only hope left (I checked and checked again my code a lot of times) so here's my code:

static Matrix4x4<T> CreateFromRotationXYZ_S(const T &radiansX, const T &radiansY, const T &radiansZ)
Matrix4x4<T> result;
result.m11 = cos(radiansY) * cos(radiansZ);
result.m12 = cos(radiansY) * sin(radiansZ);
result.m13 = sin(radiansY);
result.m14 = 0;
result.m21 = sin(radiansX) * -sin(radiansY) * cos(radiansZ) + cos(radiansX) * -sin(radiansZ) + sin(radiansX) * cos(radiansY);
result.m22 = sin(radiansX) * -sin(radiansY) * sin(radiansZ) + cos(radiansX) * cos(radiansZ) + sin(radiansX) * cos(radiansX);
result.m23 = sin(radiansX) * cos(radiansY);
result.m24 = 0;
result.m31 = cos(radiansX) * -sin(radiansY) * cos(radiansZ) + sin(radiansX) * sin(radiansZ);
result.m32 = cos(radiansX) * -sin(radiansY) * sin(radiansZ) + -sin(radiansX) * cos(radiansZ);
result.m33 = cos(radiansX) * cos(radiansY);
result.m34 = 0;
result.m41 = 0;
result.m42 = 0;
result.m43 = 0;
result.m44 = 1;
return result;

Thank you [img]http://public.gamedev.net//public/style_emoticons/default/smile.png[/img]

Share this post

Link to post
Share on other sites
Ouch. You better create a simple rotation matrix for each axis and multiply(compose) all three to obtain the final rotation matrix.

Share this post

Link to post
Share on other sites
Mistakes are at least in the formulas of m21 and m22 (both showing 3 summands), because their format has to be the same as those of m31 and m32 (both showing 2 summands).

As a hint: The length of each column vector and each row vector in a pure rotation matrix is 1. If the length differs from 1 then scaling will occur. Edited by haegarr

Share this post

Link to post
Share on other sites
Sign in to follow this  

  • Advertisement