Hello, I'm using OpenGL with gluPerspective, what would I need to do to make it use an axis-system which the origin is top left instead of bottom left?
A:
You can do this by flipping the y
-axis of the projection matrix. So:
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadMatrix( [1 0 0 0;
0 -1 0 0;
0 0 1 0;
0 0 0 1] );
// ^ pseudo-code, replace with actual matrix
That ought to do it.
You could also use a glMultMatrix
call with the same matrix (instead of Push
and then Load
), but this way is more easily reversed (just call glPopMatrix
on the GL_PROJECTION
stack later).
You can also use the same technique to flip any of the other axes; just put minus signs in the appropriate locations.
tzaman
2010-05-19 15:14:35
Wouldn't glLoadMastrix kill off the previously set projection? It completely replaces the projection matrix, which is not what is asked for.
ypnos
2010-05-19 15:28:28
That's what the `glPushMatrix` call is for, it pushes the existing matrix down on the stack, preserving the existing transform. The new matrix gets composed with the previous one, it doesn't replace it.
tzaman
2010-05-19 17:32:24
As I learned it, and as every manual on the internet I found says, LoadMatrix always replaces the matrix on the stack, and does never get composed. The PushMatrix is only helpful to restore the original matrix (and abandon the one loaded) with PopMatrix afterwards.
ypnos
2010-05-26 19:58:56
+1
A:
I would say direct operating on the projection matrix is a clean way for this operation. But if by any chance you need an alternative:
You can just use glScalef(1.f, -1.f, 1.f)
to flip the axis.
This is also just an operation on the GL_MODELVIEW or GL_PROJECTION matrix (whatever is currently active).
ypnos
2010-05-19 15:23:49