Archived

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

Pactuul

D3DMATRIX to D3DVECTOR

Recommended Posts

I have the "players" position, rotation, scaling, etc all stored in a D3DMatrix. I know that the _41, _42, _43 of the matrix store the player''s position. The question I have is how do I extract a vector for which direction it''s pointing. This would seem easy but with all programming projects shit happens =) I have looked over all the sdk and web sites and haven''t been able to find the answer Thanks in advance for the help, Pactuul "The thing I like about friends in my classes is that they can''t access my private members directly."

Share this post


Link to post
Share on other sites
While a relatively cheap trick, I''d just keep a D3DVECTOR copy of my player and read from that. I realize this is a hassle but its how I know how to do it. Because of the way I transform my players I find it works more reliably than matrices because of gimbal lock.

Just my 2 cents.

Share this post


Link to post
Share on other sites
I''ve thought about doing that but like you said it seems like a hassle, keeping up with both , when I should only have to keep up with one.

There has to be a way to get the vector in which the final matrix is facing.

Pactuul

"The thing I like about friends in my classes is that they can''t access my private members directly."



Share this post


Link to post
Share on other sites
What if I took that matrix and a "unit matrix" that faced in the direction that I want and then multiply them some how or do a calculation to find the angle of two matrixs?


Pactuul

"The thing I like about friends in my classes is that they can''t access my private members directly."



Share this post


Link to post
Share on other sites
Few ideas.

D3DXVec3TransformNormal(&side,&D3DXVECTOR3(1,0,0),&matrix);
D3DXVec3TransformNormal(&up, &D3DXVECTOR3(0,1,0),&matrix);
D3DXVec3TransformNormal(&dir, &D3DXVECTOR3(0,0,1),&matrix);
D3DXVec3TransformCoord( &pos, &D3DXVECTOR3(0,0,0),&matrix);

This will get you the vectors. Should I inverse matrix first? Maybe, try out!

Or:

base = vec(m._11,m._12,m._13);
up = vec(m._21,m._22,m._23);
dir = vec(m._31,m._32,m._33);
pos = vec(m._41,m._42,m._43);

Does it work this way? Try out.

Share this post


Link to post
Share on other sites
THANK YOU....that''s exactly what I need.
I used the transformcoords and normals to get those vectors.. I did have to inverse the matrix to produce the right numbers.

Now I can use the dot product to figure out the angle between those vectors and the respect normals to extract how many degrees off the normals they are.. That was a lot help stefu..


Pactuul

"The thing I like about friends in my classes is that they can''t access my private members directly."



Share this post


Link to post
Share on other sites