I need Inverse of view matrix (right-handed look-at matrix) for screen pick,but irrlicht's matrix only have matrix4::buildCameraLookAtMatrixRH(),no it's inverse matrix. so I write a inverse matrix,is right??
(*this)(0,0) = xaxis.X;
(*this)(1,0) = xaxis.Y;
(*this)(2,0) = xaxis.Z;
(*this)(3,0) = 0;
(*this)(0,1) = yaxis.X;
(*this)(1,1) = yaxis.Y;
(*this)(2,1) = yaxis.Z;
(*this)(3,1) = 0;
(*this )(0,2) = zaxis.X;
(*this)(1,2) = zaxis.Y;
(*this)(2,2) = zaxis.Z;
(*this)(3,2) = 0;
(*this)(0,3) = position;
(*this)(1,3) = position;
(*this)(2,3) = position;
(*this)(3,3) = 1.0f;
CameraLookAtMatrixRH=M(xaxis,yaxis,zaxis)*M(-position)
so Inverse(CameraLookAtMatrixRH)=M(position)*T(M(xaxis,yaxis,zaxis))
over is right???
Inverse of view matrix(right-handed look-at matrix) for pick
-
needforhint
- Posts: 322
- Joined: Tue Aug 30, 2005 10:34 am
- Location: slovakia
-
Baal Cadar
- Posts: 377
- Joined: Fri Oct 28, 2005 10:28 am
- Contact:
M(xaxis,yaxis,zaxis) * Inverse(M(xaxis,yaxis,zaxis))=E
M(xaxis,yaxis,zaxis) * Transpose(M(xaxis,yaxis,zaxis) )=E
so:
Inverse(M(xaxis,yaxis,zaxis))=Transpose(M(xaxis,yaxis,zaxis) )
CameraLookAtMatrixRH=M(xaxis,yaxis,zaxis)*M(-position) (right multiply)
so:
Inverse(CameraLookAtMatrixRH)=M(position)*Transpose(M(xaxis,yaxis,zaxis))
I think I am right,I multiply the two matrix-----M(xaxis,yaxis,zaxis)*M(-position) and M(position)*Transpose(M(xaxis,yaxis,zaxis)) ,result is rihgt!
matrix4::makeInverse() is too slow,view matrix is often change
M(xaxis,yaxis,zaxis) * Transpose(M(xaxis,yaxis,zaxis) )=E
so:
Inverse(M(xaxis,yaxis,zaxis))=Transpose(M(xaxis,yaxis,zaxis) )
CameraLookAtMatrixRH=M(xaxis,yaxis,zaxis)*M(-position) (right multiply)
so:
Inverse(CameraLookAtMatrixRH)=M(position)*Transpose(M(xaxis,yaxis,zaxis))
I think I am right,I multiply the two matrix-----M(xaxis,yaxis,zaxis)*M(-position) and M(position)*Transpose(M(xaxis,yaxis,zaxis)) ,result is rihgt!
matrix4::makeInverse() is too slow,view matrix is often change