gluLookAt + transformation don't work !

Started by
3 comments, last by rick_appleton 19 years, 4 months ago
So at the start of the frame I set the camera position with gluLookAt. I then draw my object like this: gluLookAt(); ...etc glPushMatrix(); //model matrix is at the camera which is not what we want DoTransformation(position); //to the object's position DrawObject(); glPopMatrix(); IT WORKS! The object is in the correct position -but it shouldn't be as I haven't done LoadIdentity(). So if I do it properly: gluLookAt(); ...etc glPushMatrix(); glLoadIdentity(); //THIS SHOULD BE REALLY CORRECT DoTransformation(position);//to the correct position DrawObject(); glPopMatrix(); Then none of the objects drawn like this can be seen - although this is the correct way. So what is wrong with the second way of doing things ?
Advertisement
Using OpenGL you have two matrix stack: GL_PROJECTION and GL_MODELVIEW. The idea is to load the projection into the first matrix and the model AND view matrix into the second one. Since the gluLookAt matrix modifies the current matrix, and it represents the view, the correct order would be similar to your first code:

glMatrixMode(GL_MODELVIEW);glLoadIdentity();gluLookAt(....);glPushMatrix();  DoTransform(...);  RenderObject();glPopMatrix();
You're doing it correctly the first time. When you push a matrix in OpenGL, the current top matrix takes the value of the one beneith. You'd then want to multiply that matrix with the transformation matrix of the object. In the second case, you're clearing the camera transform from the top matrix, then multiplying my your objects transformation matrix, which is like the camera transform never happened.

I don't see what the projection matrix has to do with any of this.

So, for clarity:

glMatrixMode( GL_MODELVIEW );glLoadIdentity(); // may do this internally in gluLookAt, I can't remembergluLookat(); // (1)glPushMatrix();    // the value of the model view matrix is the same here as at (1)    DoTransform();    // (1) * whatever DoTransform does    RenderObject();glPopMatrix();// again, the matrix takes the value of (1)
If at first you don't succeed, redefine success.
thanks I understand (sort of !),

cheers
Well, nothing much, just thought it might help to know that there is one, that's all.

This topic is closed to new replies.

Advertisement