After some research and the right google searches I found this information regarding vector rotation.
Now this is for the POV ray tracer program. But, I think I can convert it to Direct3D.Quote:
#local AngleX = degrees(atn((T.z-L.z)/vlength(<T.x,T.y,0>-<L.x,L.y,0>));
#if (T.y>L.y)
#local AngleZ = degrees(atn((L.x-T.x)/(T.y-L.y)));
#end
#if (T.y<L.y)
#local AngleZ = degrees(atn((L.x-T.x)/(T.y-L.y)))+180;
#end
#if (T.y=L.y)
#if (T.x>L.x)
#local AngleZ=-90;
#else
#local AngleZ=90;
#end
#end
object { Gun rotate <AngleX,0,AngleZ> translate L }
or you can do this instead:
#local NY=vnormalize(T-L);
#local NX=vnormalize(vcross(NY,z)); // z is down in this example
#local NZ=vcross(NX,NY);
object { Gun matrix < NX.x,NX.y,NX.z, NY.x,NY.y,NY.z, NZ.x,NZ.y,NZ.z, L.x,L.y,L.z > }
So to rotate a point that is at L to face T.
Code:
void MatrixRotateObjectOntoVector(D3DXVECTOR3 Target,D3DXVECTOR3 Location,D3DXMATRIX &RotMatrix)
{
D3DXVECTOR3 NX,NY,NZ,;
NY=Target-Location;
D3DXVec3Normalize(&NY,&NY);
D3DXVec3Cross(&NX,&NY,&(-Camera.UpVector));
D3DXVec3Normalize(&NX,&NX);
D3DXVec3Cross(&NZ,&NX,&NY);
//Setup rotation and translation
RotMatrix._11=NX.x;
RotMatrix._12=NX.y;
RotMatrix._13=NX.z;
RotMatrix._14=0.0f;
RotMatrix._21=NY.x;
RotMatrix._22=NY.y;
RotMatrix._23=NY.z;
RotMatrix._24=0.0f;
RotMatrix._31=NZ.x;
RotMatrix._32=NZ.y;
RotMatrix._33=NZ.z;
RotMatrix._34=0.0f;
RotMatrix._41=Location.x;
RotMatrix._42=Location.y;
RotMatrix._43=Location.z;
RotMatrix._44=1.0f;
}