Jump to content

View more

Image of the Day

Working on an auto spawn system. #gamedev #indiedev #screenshotsaturday https://t.co/Mm2kfekz7b
IOTD | Top Screenshots

The latest, straight to your Inbox.

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


Sign up now

Rotating a Sprite Around Its Center Directx11

4: Adsense

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
2 replies to this topic

#1 ILoveJesus   Members   

166
Like
0Likes
Like

Posted 02 May 2012 - 12:08 PM

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?

#2 SeiryuEnder   Members   

199
Like
1Likes
Like

Posted 02 May 2012 - 07:20 PM

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, 02 May 2012 - 07:24 PM.


#3 ILoveJesus   Members   

166
Like
0Likes
Like

Posted 02 May 2012 - 08:04 PM

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.




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.