View Full Version : A question about gluLookat and projection matrix

include

04-23-2006, 02:09 AM

I want to get the gluLookAt parameters from glGetFloatv(GL_PROJECTION_MATRIX ,tmp).

I can get this value,but how can I calculate these parameters to the position of camera,target and up vector?

code like this:

////////////////////////////

float tmp[16];

glGetFloatv(GL_PROJECTION_MATRIX ,tmp);

////////////////////////////

Thanks a lot.

Include

CrazyButcher

04-23-2006, 02:59 AM

normally the projection will not contain such camera information other than backplane/frontplane and fov/ortho size

transforms should be stored in modelview, as one typcially puts local transforms in the modelview as well, normally you cannot find out where the camera really is (unless the objects are not locally transformed).

however best is you familiarize yourself with matrices and what glulookat actually does to a matrix. (sample code is on the web, and probably on this forum as well, if you search)

gluLookAt defines a visualization matrix not a projection matrix.

include

04-23-2006, 03:58 AM

Thank you,CrazyButcher and jide.

if I use glGetFloatv(GL_MODELVIEW_MATRIX ,tmp),and the objects are not locally transformed before,may I find the camera position exactlly?

gl_CodER

04-23-2006, 09:21 AM

u would have to get the MODELVIEW matrix invert it and multiply the coordinate vector <0,0,0,1> to get the trnasformed position of the camera. For exaple , to place the camera at (0,0,5 ) u use the followinf

code

glLoadIdentity();

//this is why u need to invert it

glTranslatef(0,0,-5);Please correct me if i am wrong

V-man

04-23-2006, 10:59 AM

Yes, you can extract the camera position.

I needed such a function myself and put it my library. You can download from

http://www.geocities.com/vmelkon/glhlibrary.html

It's called glhExtractLookAtFromMatrixf2

may I find the camera position exactlly?No, center3D will not be exactly as the orginal you send to gluLookAt, or in my libs case, glhLookAtf2

gl_CodER

04-23-2006, 12:52 PM

Hi V-man

Will the method i suggested work ?

Do u use a similar method ?

Overmind

04-24-2006, 02:11 AM

The simplest way is to just use the last column of the modelview matrix and negate it (the last column always contains the vector from the camera to the origin).

This is the same as the method proposed by gl_CodER, but with a lot less computation. It's actually not neccesary to do a full matrix invert, because you only need the last column of the inverted matrix.

V-man

04-24-2006, 10:53 AM

Originally posted by gl_CodER:

Hi V-man

Will the method i suggested work ?

Do u use a similar method ? The OP wants to get all the parameters for gluLookAt "position of camera,target and up".

The code in glhExtractLookAtFromMatrixf2 is something like 200 lines. I've forgotten why but I think it's because I take different branches depending on what is found in the matrix.

It basically tries to do the reverse of gluLookAt.

It's not a full matrix invert.

include

04-24-2006, 12:24 PM

Thanks everyone;

When I try to get GL_MODELVIEW_MATRIX parameters,I find that the matrix alway be like this:

1,0,0,0

0,1,0,0

0,0,1,0

0,0,0,1

Code is like this:

////////////////////////////////////////////

gluLookAt(CameraX,CameraY,CameraZ,TargetX,TargetY, TargetZ,0.0f,0.0f,1.0f);

float tmp[16];

glGetFloatv(GL_MODELVIEW_MATRIX,tmp);

////////////////////////////////////////////

I am sorry for my poor English,and thank you very much for your help, :)

include

04-24-2006, 12:32 PM

Thank you V-man,I think your approach can help me to solve this problem.

knackered

04-24-2006, 12:47 PM

include, you should do this: glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

before you call gluLookAt.

BTW, once you've got your inverse modelview matrix:-

[0][1][2] is the X axis, so that's the vector going off to your right.

[4][5][6] is the Y axis, so that's the up vector.

[8][9][10] is the Z axis, so that's the 'view' vector, sometimes called the view direction.

[12][13][14] is the camera translation, sometimes called the position.

Powered by vBulletin® Version 4.2.5 Copyright © 2018 vBulletin Solutions Inc. All rights reserved.