Jump to content
  • Advertisement

Archived

This topic is now archived and is closed to further replies.

Jerimiah

Camera vectors from vector+quaternion

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

Reposted in DX as no joy from the maths forum I have my world objects and my camera stored in the same base class. So they each share lots of properties. Notably a world position and a quaternion specifying their rotation. For normal objects this is great, the position vector + the rotation quaternion let me create a world Transform matrix. The bit I''m getting confused by is the camera part. It needs to construct a view matrix. What I have at the moment (for hack purposes) is: Matrix.LookAtLH(new Vector3(_xPos,_yPos,_zPos), _lookAt, new Vector3(0f,1f,0f)); Where _xPos etc specify the world position, but I need a way to generate the _lookAt and Up vectors from the position+rotation I have stored. Any suggestions?

Share this post


Link to post
Share on other sites
Advertisement
>>Why do you want to use LookAt instead of generating the matrix from the quaternion/position?

Good question..... this is confusing me now (I don''t get much time to look at this, and everytime I do I forget where I was up to

I have the world matrix for the entity, which all functions correctly. If I use it ''as is'' in SetTransform(...) then it is reversed in all axis (as though I''m looking out the back of the camera), if I use Matrix.Inverse() then it is reversed in 2 axis.

So... if I have a vector+quaternion how can I generate the correct view matrix from it? And while I''m on the subject, how can I point one vector+quat at another vector.

/sigh .... head hurts....

Share this post


Link to post
Share on other sites
Thanks all - for future reference... here''s the C# solution....

Maths and Physics Forum Trhead

Firstly, Meduzza''s code was damned near there, but the order of the camTransformYAxis/camTransformZAxis generation was different to the order in LookATLH - so my first mistake was getting these reversed (DOH!)... yes.. M21, M22, M23 and M31, M32, M33 are the correct elements.

Secondly, Meduzza''s solution provided a rear view camera - so I had to reverse them - prviously this wasn''t easy (which was where my problem was comming from), but now the vectors had been obtained it was simple. Thanks Aprosenf for the -(x) suggestion.


  
// Horribly unoptimised....

// _matrixRotation is a rotation matrix

// _quatRotation is a stored rotation quaternion

// _xPos, _yPos, zPos - the position of the camera

_matrixRotation.RotateQuaternion(_quatRotation);
Vector3 camPos = new Vector3(_xPos,_yPos,_zPos);
Vector3 camTY = new Vector3(_matrixRotation.M21,_matrixRotation.M22,_matrixRotation.M23);
Vector3 camTZ = new Vector3(-(_matrixRotation.M31),-(_matrixRotation.M32),-(_matrixRotation.M33));
return Matrix.LookAtLH(camPos, camPos + camTZ, camTY);

Share this post


Link to post
Share on other sites

  • 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!