I am reading "3d math primer for graphics and game development" book, and i have made simple project to practice on as i read.
I have made a arrow model with tail at origin and tip pointing 0 0 1 (forward).
So i can assume that basis vectors is this?:
right 1 0 0
up 0 1 0
forward 0 0 1
and then i take some arbitrary point to be my new target at witch arrow will point.
newForwardDir = targetPos - myPosition;
and now i want to buid new matrix so i need all other vectors transformed.
So i am thinking that new UP vector is:
newUPDir = newForwardDir cross oldForwardDir
And if so then:
newRightDIr = newUpDir cross newForwardDir
Then i tried:
mat._11 = rightDir.x;
mat._12 = rightDir.y;
mat._13 = rightDir.z;
mat._21 = upDir.x;
mat._22 = upDir.y;
mat._23 = upDir.z;
mat._31 = forwDir.x;
mat._32 = forwDir.y;
mat._33 = forwDir.z;
and it looks ok but i don't know am i right?
And my questions is :
1. As book says about cross product that it depends on order of vectors as a cross b
is not same as b cross a
as it will point in opposite directions, how should i know in witch order to set vectors as parameters?
2. How can i build a rot. matrix with D3DXMatrixRotationAxis as i don't know what to specify for rotation axis, what is it?
What about angle parameter for that function, is that a :
angle = acos( newForward dot oldForward )
Thanks for your patience.