Gurus, Hi:

I have a snippet of codes below. My intentions is to use projection matrix to implement transform(-8,-6,-84) and then use viewing volume for final display. However, it just does not work(looks like it is opengl bug:) read my reasoning below.

glMatrixMode(GL_MODELVIEW); glLoadIdentity();

glMatrixMode(GL_PROJECTION); glLoadIdentity();

gluLookAt(8,6,84, 8,6,0, 0,1,0);

glFrustum(-11,11,-11,11,30,200);

glPolygonMode( GL_FRONT_AND_BACK , GL_LINE );

glBegin( GL_POLYGON );

glVertex3f(0,0,54);

glVertex3f(16,0,54);

glVertex3f(16,10,54);

glVertex3f(8,16,54);

glVertex3f(0,10,54);

glEnd();

If I switch the order of gluLookAt and glFrustum to be

glFrustum(-11,11,-11,11,30,200);

gluLookAt(8,6,84, 8,6,0, 0,1,0);

then everything is fine.

In my understanding, if I want to transform a sphere at origin to (x,y)=(1,1) position. We need to specify the matrix

glRotatef(45, 0,1,0);

glTranslatef(square_root(2), 0, 0);

if we specify

glTranslatef(square_root(2), 0, 0);

glRotatef(45, 0,1,0);

the sphere will be at (square_root(2), 0).

Furthermore, if I move the translation matrix to model view as below

glMatrixMode(GL_MODELVIEW);glLoadIdentity();

glTranslatef(-8,-6,-84);

glMatrixMode(GL_PROJECTION);glLoadIdentity();

glFrustum(-11,11,-11,11,30,200);

The result will be okay too.

Anybody know why? ( I can provide you tester program if needed)