Jump to content
  • Advertisement
Sign in to follow this  
MatthewDiaz

Rotating a Sprite Around Its Center Directx11

This topic is 2266 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

Here is my current WorldMatrix function


XMMATRIX GameSprite::GetWorldMatrix( )
{
//position is the pixel position of the sprite on screen
XMMATRIX translation = XMMatrixTranslation( position_.x, position_.y, 0.0f );
XMMATRIX rotationZ = XMMatrixRotationZ(rotation_ );
XMMATRIX scale = XMMatrixScaling( scale_.x, scale_.y, 1.0f );
return translation * rotationZ * scale;
}


When changing the radians for the rotation_ my sprite does rotate but around the bottom left of the screen.

I was guessing that I would need to use XMMatrixRotationNormal() to get the results I want but through experimentation I still come up with the same results.

For example I tried


XMMATRIX rotationZ = XMMatrixRotationNormal(tempvector, rotation_ );
//with defiintions like these
XMVECTOR tempvector = {0.0f, 0.0f, 1.0f};//Same as RotationZ()
XMVECTOR tempvector = {position_.y, position_.x, 1.0f};//Wierd results



Could anyone tell me how to move the origin for the z-axis to the center of my sprite?

Share this post


Link to post
Share on other sites
Advertisement
It's been a while since I've done work with matrices but...

Try changing:

return translation * rotationZ * scale;


To:

return rotationZ * translation * scale;



It seems like you're rotating then translating in the direction of the rotation.
You want to translate it to its intended position first, then rotate it to the desired orientation.

Could be wrong, but it's pretty quick to test... I'm also not sure about the ordering on the scalar matrix. It might be fine where it is, I'd have to dig up some old code to verify. Edited by SeiryuEnder

Share this post


Link to post
Share on other sites

It's been a while since I've done work with matrices but...

Try changing:

return translation * rotationZ * scale;


To:

return rotationZ * translation * scale;



It seems like you're rotating then translating in the direction of the rotation.
You want to translate it to its intended position first, then rotate it to the desired orientation.

Could be wrong, but it's pretty quick to test... I'm also not sure about the ordering on the scalar matrix. It might be fine where it is, I'd have to dig up some old code to verify.



Problem solved, thank you. That worked.

Share this post


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

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!