Part of the Khronos Group
OpenGL.org

The Industry's Foundation for High Performance Graphics

from games to virtual reality, mobile phones to supercomputers

Results 1 to 3 of 3

Thread: inverse matrix

  1. #1
    Junior Member Newbie
    Join Date
    Jan 2004
    Location
    Russia
    Posts
    2

    inverse matrix

    I have 4x4 matrix (GL_MODELVIEW of the current object) ...
    How to find inverse matrix?
    (i want to get object space position of light)

  2. #2
    Junior Member Newbie
    Join Date
    Jan 2002
    Posts
    22

    Re: inverse matrix

    This worked well for me, and is reasonably simple :

    Code :
    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).]

  3. #3
    Junior Member Newbie
    Join Date
    Jan 2004
    Location
    Russia
    Posts
    2

    Re: inverse matrix

    Thanks! It work very well ...

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •