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

C 为什么每次调用glMatrixMode后都必须调用glLoadIdentity?,c,opengl,C,Opengl,我正在读一本关于OpenGL、SDL的书,并且已经阅读了一些OpenGL文档。我也读过这篇文章: 我掌握了glLoadIdentity()的功能,以及在一般意义上使用它的原因(将当前矩阵返回到其原始状态)。我不知道的是为什么我要把它恢复到原来的状态。例如: glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0.0f, 640, 480, 0.0f, -1.0f, 1.0f); glMatrixMode(GL_MODELVIEW);

我正在读一本关于OpenGL、SDL的书,并且已经阅读了一些OpenGL文档。我也读过这篇文章:

我掌握了glLoadIdentity()的功能,以及在一般意义上使用它的原因(将当前矩阵返回到其原始状态)。我不知道的是为什么我要把它恢复到原来的状态。例如:

glMatrixMode(GL_PROJECTION);
glLoadIdentity();

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

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
我不太清楚为什么每次调用glMatrixMode后都必须调用glLoadIdentity()

--第一个答案试图解释:

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

glLoadIdentity()使用标识矩阵清除(当前矩阵模式的)矩阵,因此glLoadIdentity()遵循gluPerspective()相当于对glLoadIdentity()的单个调用。换句话说,这个顺序是荒谬的


太好了,谢谢你指出答案。下次我会挖更多的。