• FEATURED

View more

View more

View more

### Image of the Day Submit

IOTD | Top Screenshots

### The latest, straight to your Inbox.

Subscribe to GameDev.net Direct to receive the latest updates and exclusive content.

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

5 replies to this topic

### #1Husbjörn  Members

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 *= 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.

Husbjörn

Edited by Husbjörn, 29 January 2014 - 03:26 PM.

### #2phil_t  Members

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

### #3Husbjörn  Members

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.

### #4richardurich  Members

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.

### #5L. Spiro  Members

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

### #6Husbjörn  Members

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.