View Full Version : inverse matrix
DarkFX
01-04-2004, 09:55 AM
I have 4x4 matrix (GL_MODELVIEW of the current object) ...
How to find inverse matrix?
(i want to get object space position of light)
AlexH
01-04-2004, 01:21 PM
This worked well for me, and is reasonably simple :
fmatrix4 &fmatrix4::invert(void)
{
fmatrix4 D;
int i, j, k;
D.identity();
for( i = 0; i < 4; i++ ) {
float tmp = 1.0f / data[i*4+i];
for( j = 3; j >= 0; j-- ) {
D.data[i*4+j] *= tmp;
data[i*4+j] *= tmp;
}
for( j = 0; j < 4; j++ ) if( j != i ) {
tmp = data[j*4+i];
for( k = 3; k >= 0; k-- ) {
D.data[j*4+k] -= D.data[i*4+k] * tmp;
data[j*4+k] -= data[i*4+k] * tmp;
}
}
}
*this = D;
return( *this );
}
Oh yes: and if your matrix is guaranteed to only encode a rotation in the upper 3x3 part, you could of course use a simple transpose. Optional translation can also be taken into account, without needing a full inversion. If you have scaling, shearing or even a projection (rather unlikely for the modelview matrix), then you need a full invert.
[This message has been edited by AlexH (edited 01-04-2004).]
DarkFX
01-08-2004, 02:04 AM
Thanks! It work very well ...
Powered by vBulletin® Version 4.2.0 Copyright © 2013 vBulletin Solutions, Inc. All rights reserved.