Monday, April 9, 2018

Transform Matrix multiplication order


I am experiencing difficulties trying to figure out the correct multiplication order for a final transform matrix. I always get either strange movement or distorted geometry. My current model is explained below:


For a single node my multiplication order is:



L = S * R * T



where




L = local transformation matrix


S = local scale matrix


R = local rotation matrix


T = local translate matrix



For a node's world transformation:



W = P.W * L




where



W = world transformation matrix


P.W = parent world transformation matrix


L = the local transformation matrix calculated above



When rendering, for each node I calculate the matrix :



MV = Inv(C) * N.W




where



MV = the model view transformation matrix for a particular node


Inv(C) = the inverse camera transformation matrix


N.W = the node's world transformation matrix calculated above.



Finally, in the shader I have the fallowing transformation:



TVP = PRP * MV * VP




where



TVP = final transformed vertex position


PRP = perspective matrix


MV = the node's world transformation matrix calculated above


VP = untransformed vertex position.



With the current model, child nodes which have local rotation, rotate strangely when transforming the camera. Where did I go wrong with the multiplication order?



Answer



Any combination of the order S*R*T gives a valid transformation matrix. However, it is pretty common to first scale the object, then rotate it, then translate it:



L = T * R * S

If you do not do it in that order, then a non-uniform scaling will be affected by the previous rotation, making your object look skewed. And the rotation will be affected by the translation, making the final position of your object very different from what the value of the translation would make you expect.


No comments:

Post a Comment

Simple past, Present perfect Past perfect

Can you tell me which form of the following sentences is the correct one please? Imagine two friends discussing the gym... I was in a good s...