为什么每次调用glMatrixMode后都必须调用glLoadIdentity?

时间:2011-08-04 23:49:50

标签: c opengl

我正在阅读一本关于OpenGL,SDL的书,并阅读了一些OpenGL文档。我也读过这篇文章:What does glLoadIdentity() do in OpenGL?

我正在抓住glLoadIdentity()的作用,以及为什么它在一般意义上被使用(将当前矩阵返回到其原始状态)。我不知道的是为什么我将它恢复到原始状态。例如:

glMatrixMode(GL_PROJECTION);
glLoadIdentity();

glOrtho(0.0f, 640, 480, 0.0f, -1.0f, 1.0f);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

我不确定为什么每次调用glMatrixMode后都必须调用glLoadIdentity()。

1 个答案:

答案 0 :(得分:14)

When to call glMatrixMode() - 第一个答案试图解释:

  

glLoadIdentity()通常在矩阵模式更改后立即调用,因此如果您愿意,您将开始“新鲜”。 Matrix变换,例如gluPerspective(),glOrtho(),glFrustum(),glRotate(),glMultMatrix(),glTranslate()是累积操作,因为它们聚合以允许您描述复杂的3D世界空间变换或描述您的OpenGL查看体积。示例:如果我想要一个沿+ X方向平移的立方体然后围绕Z轴旋转我发出一个glRotate()后跟一个glTranslate()。

     

glLoadIdentity()使用单位矩阵消除矩阵(当前矩阵模式的矩阵),因此glLoadIdentity()跟随gluPerspective()等同于对glLoadIdentity()的单个调用。换句话说,那个序列是荒谬的。