Jump to content
  • Advertisement
Sign in to follow this  
lukesmith123

Rotation Matrix from Vector in DirectX

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

Hi,

I have a direction vector and I want to create a rotation matrix from it. This is what I am trying:


//direction = 0, 0, 1
//up = 0, 1, 0
//right = 0, 0, 0

D3DXVec3Normalize(&direction, &direction);
//right
D3DXVec3Cross(&right, &up, &direction);
D3DXVec3Normalize(&right, &right);

rot(0,0) = right.x;
rot(1,0) = right.y;
rot(2,0) = right.z;
rot(3,0) = 0;
rot(0,1) = up.x;
rot(1,1) = up.y;
rot(2,1) = up.z;
rot(3,1) = 0;
rot(0,2) = direction.x;
rot(1,2) = direction.y;
rot(2,2) = direction.z;
rot(3,2) = 0;
rot(0,3) = 0.0f;
rot(1,3) = 0.0f;
rot(2,3) = 0.0f;
rot(3,3) = 1.0f;


I had thought that his would work however it gives me an error where the model that uses the matrix is stretched and appears as a giant line across the screen.

Am I doing something wrong?

Share this post


Link to post
Share on other sites
Advertisement
Your matrix always maps (0,1,0) to (0,1,0), but that's probably not what you want. What rotation exactly does the vector represent?

Share this post


Link to post
Share on other sites
I'm a little confused but the vector is the objects heading. So if the vector was 0,0,1 it would face on the positive z and if it were 0,0,-1 it would face -z.

Share this post


Link to post
Share on other sites
A direction in three dimensions is not enough to describe a rotation. Think of a pencil pointing somewhere: You can still rotate it around the axis and it still points to the same place.

Perhaps you are trying to build a lookAt matrix. That looks a lot like your code.

Share this post


Link to post
Share on other sites
Ah that would explain why I'm getting so confused. So what would be the next step after determining the objects heading vector to create the rotation matrix?

Share this post


Link to post
Share on other sites
Imagine I asked you that x is if I know that x+y=7. Obviously, you'd tell me that you can't tell me what x is, because there are many solutions. Well, your situation is very similar: Your problem is not completely specified.

Share this post


Link to post
Share on other sites
My problem is that I have the direction vector that the object should be facing and I want to create the world matrix with the object rotated in the direction defined by the vector.

I had thought that I could do this simply by finding the right vector from the direction vector and the up vector and filling the rows of the matrix with this information. But that appears to be incorrect so now I am wondering how this can be achieved?

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.

Participate in the game development conversation and more when you create an account on GameDev.net!

Sign me up!