• Advertisement
Sign in to follow this  

Rotation relative to mesh center?

This topic is 1453 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 just noticed an anomaly with rotation axii when rendering meshes. Or well, it probably isn't an anomaly but rather me making incorrect assumptions.

Anyway, I have been able to reproduce the issue with this simple transform matrix:

XMMATRIX matOverride = XMMatrixIdentity();
matOverride *= XMMatrixScaling(1.0f, 1.0f, 1.0f);
matOverride *= XMMatrixRotationRollPitchYaw(0.0f, (float)D3DXToRadian(testAngle), 0.0f);
matOverride *= XMMatrixTranslation(0.0f, 0.0f, 0.0f);

testAngle is a float that is set to the fmod of itself increased by 90 degrees each second and 360 (to keep it in valid degree range, because that's just simpler to read in numeric print-outs than radians).

The scaling and translation parts are set just to ensure those didn't cause the offset by the way.

 

A mesh rendered with the above as its world matrix will rotate around it's translation. It is hard to describe but the whole thing swirls around as if being attached to a pole by its side. The effect I expected to see is that it would rotate in-place without seemingly moving as it currently does.

 

So for the question, is it supposed to work like this so that I would have to first offset the mesh half its negative size before applying the rotation to get it to just rotate "in place"? Or am I missing something?

Edit: actually, offsetting doesn't seem to work either... odd.

 

 

Thanks in advance, 

Husbjörn

Edited by Husbjörn

Share this post


Link to post
Share on other sites
Advertisement

To rotate around the center of a mesh, the rotation matrix must come *before* the translation matrix. You don't tell us where you multiply in the translation matrix, however, so I can't for sure say that's your problem).

Share this post


Link to post
Share on other sites

I know that, the order is the one listed in the snippet above (scale -> rotation -> translation). As you can see the translation part is (0, 0, 0) so it should remain at the point of origin (it's just there to prove a point, I get the same result even if I omit the translation matrix alltogether).

 

Other than the matrix derived above I just multiply it with my view and projection matrices; these are created using XMMatrixLookAtLH and XMMatrixPerspectiveFovLH, and send it on to my shader.

Share this post


Link to post
Share on other sites

If you are translating the model in that order, you need to consider that the model itself is offset from its own origin.

 

 

L. Spiro

Share this post


Link to post
Share on other sites

Oh sh... hah, seems you're right about that. Didn't even think about that, thanks!

Share this post


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

  • Advertisement