PDA

View Full Version : What is the definition of gluLookAt?



wangyubuct
05-14-2013, 06:57 AM
The description of the gluLookAt is as follows:
Let
F=centerX-eyeXcenterY-eyeYcenterZ-eyeZ
Let UP be the vector upXupYupZ.
Then normalize as follows:
f=FF
UP″=UPUP
Finally, let s=fUP″, and u=sf.
M is then constructed as follows:
M=s⁡0s⁡1s⁡20u⁡0u⁡1u⁡20-f⁡0-f⁡1-f⁡200001 //??????
gluLookAt is equivalent to
glMultMatrixf(M);
glTranslated(-eyex, -eyey, -eyez);



Can you explain the description above?Especially the define of M,the line with ????.
Thank you very much.

tonyo_au
05-14-2013, 07:09 PM
Have a read of this
http://www.songho.ca/opengl/gl_transform.html

gluLookAt is just a shorthand to create the view model matrix

wangyubuct
05-15-2013, 05:37 AM
Thank you for your help,but I have to use gluLookAt in my program.Can you explain the function?

Alfonse Reinheart
05-15-2013, 07:03 AM
He just linked you to a very detailed explanation of how transforms work and what it does.

And no, you don't "have to use gluLookAt".

thokra
05-15-2013, 07:52 AM
It would be interesting to know what exactly the OP doesn't get about the function. Any specific questions or are you just not understanding anything at all?

Aleksandar
05-15-2013, 08:48 AM
I hope a concrete implementation (from MESA3D) would help

gluLookAt(GLdouble eyex, GLdouble eyey, GLdouble eyez, GLdouble centerx,
GLdouble centery, GLdouble centerz, GLdouble upx, GLdouble upy,
GLdouble upz)
{
float forward[3], side[3], up[3];
GLfloat m[4][4];

forward[0] = centerx - eyex;
forward[1] = centery - eyey;
forward[2] = centerz - eyez;

up[0] = upx;
up[1] = upy;
up[2] = upz;

normalize(forward);

/* Side = forward x up */
cross(forward, up, side);
normalize(side);

/* Recompute up as: up = side x forward */
cross(side, forward, up);

__gluMakeIdentityf(&m[0][0]);
m[0][0] = side[0];
m[1][0] = side[1];
m[2][0] = side[2];

m[0][1] = up[0];
m[1][1] = up[1];
m[2][1] = up[2];

m[0][2] = -forward[0];
m[1][2] = -forward[1];
m[2][2] = -forward[2];

glMultMatrixf(&m[0][0]);
glTranslated(-eyex, -eyey, -eyez);
}

thokra
05-15-2013, 08:52 AM
The thing is, Alfonse is right in saying you don't need to use gluLookAt, because if you get the math behind it, you can write up a function yourself. I suspect the OP doesn't have a sufficient mathematical basis.

wangyubuct
05-15-2013, 11:06 PM
This is exactly what I need!!!Thank you so much!
鄙视狗眼看人低。