修改OpenGL坐标系

4

我正在使用OpenGL和gluPerspective,如果要将坐标系原点从左下角改为左上角,需要进行哪些操作?

2个回答

2

我认为直接操作投影矩阵是这个操作的一种干净方法。但如果你需要另一种选择:

你可以使用glScalef(1.f, -1.f, 1.f)来翻转轴。

这也仅仅是对GL_MODELVIEW或GL_PROJECTION矩阵(当前活跃的矩阵)进行的操作。


1

您可以通过翻转投影矩阵的y轴来实现这一点。因此:

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

应该就可以了。

您还可以使用相同的矩阵进行glMultMatrix调用(而不是Push然后Load),但这种方式更容易被反转(稍后在GL_PROJECTION堆栈上调用glPopMatrix即可)。

您还可以使用相同的技术来翻转任何其他轴;只需在适当的位置放置减号即可。


glLoadMatrix会覆盖之前设置的投影矩阵吗?它完全替换了投影矩阵,这不是所要求的。 - ypnos
这就是 glPushMatrix 调用的作用,它将现有矩阵推入堆栈中,保留现有变换。新矩阵与先前的矩阵组合在一起,而不是替换它。 - tzaman
据我所学,以及我在互联网上找到的每一份手册都说,LoadMatrix总是替换堆栈上的矩阵,而不会进行组合。 PushMatrix仅有助于使用PopMatrix恢复原始矩阵(并放弃已加载的矩阵)。 - ypnos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接