Jump to content

  • Log In with Google      Sign In   
  • Create Account


Rotation relative to mesh center?


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
5 replies to this topic

#1 Husbjörn   Members   -  Reputation: 232

Like
0Likes
Like

Posted 29 January 2014 - 03:09 PM

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, 29 January 2014 - 03:26 PM.


Sponsor:

#2 phil_t   Crossbones+   -  Reputation: 3256

Like
0Likes
Like

Posted 29 January 2014 - 04:06 PM

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).



#3 Husbjörn   Members   -  Reputation: 232

Like
0Likes
Like

Posted 29 January 2014 - 04:30 PM

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.



#4 richardurich   Members   -  Reputation: 1187

Like
0Likes
Like

Posted 29 January 2014 - 04:45 PM

It sounds like your mesh is not centered around the origin, but you're rotating around the origin.



#5 L. Spiro   Crossbones+   -  Reputation: 13218

Like
0Likes
Like

Posted 29 January 2014 - 04:49 PM

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


It is amazing how often people try to be unique, and yet they are always trying to make others be like them. - L. Spiro 2011
I spent most of my life learning the courage it takes to go out and get what I want. Now that I have it, I am not sure exactly what it is that I want. - L. Spiro 2013
I went to my local Subway once to find some guy yelling at the staff. When someone finally came to take my order and asked, “May I help you?”, I replied, “Yeah, I’ll have one asshole to go.”
L. Spiro Engine: http://lspiroengine.com
L. Spiro Engine Forums: http://lspiroengine.com/forums

#6 Husbjörn   Members   -  Reputation: 232

Like
0Likes
Like

Posted 29 January 2014 - 04:57 PM

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






Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS