glMatrixMode 不会“激活”矩阵。 OpenGL 固定管线使用 3 个矩阵(有时是 4 个):两个负责转换几何,一个负责转换纹理空间(有些实现一个负责颜色调整)。这些矩阵一直在使用。
modelview 矩阵用于移动 geoemtry。由于 OpenGL 没有“摄像头”,因此查看器的定位是通过与“摄像头”的移动相反(=反向)移动所有几何体来定位的。
投影矩阵用于将几何体从模型视图空间转换到剪辑空间,即将转换后的几何体投影到视口中。
纹理矩阵转换纹理坐标。如果 (s,t,r,q) 直接给出这个矩阵的好处,起初并不清楚。但是 OpenGL 也允许从顶点位置生成纹理坐标。这与纹理矩阵一起允许实现投影纹理。
color 矩阵很少使用,甚至不是在所有实现中都可用(它是扩展的一部分)。如果可用,它会转换传入的顶点颜色。既然没有隐式颜色生成器,那有什么用呢?好吧,它可以用来在线性色彩空间之间进行转换,例如RGB->XYZ 或任何其他可以表示为标量矩阵的颜色空间转换。这些天没有人使用颜色矩阵,着色器做得更好。
glMatrixMode 在那里,所以没有功能膨胀。否则你需要:
glModelviewLoadIdentity
glModelviewLoadMatrix
glModelviewMultMatrix
glModelviewRotate
glModelviewTranslate
glModelviewScale
glModelviewPushMatrix
glModelviewPopMatrix
glProjectionLoadIdentity
glProjectionLoadMatrix
glProjectonMultMatrix
glProjectionRotate
glProjectionTranslate
glProjectionScale
glProjectionPushMatrix
glProjectionPopMatrix
等等。你也不能在投影和纹理矩阵中使用像 glFrutum 这样的函数。你也需要其中两个。
最后但并非最不重要的一个重要提示。设置视口和投影矩阵属于渲染功能。您将在那里看到的大多数教程都将它们放在窗口大小调整处理程序中,这是完全错误的地方。不要模仿这种坏习惯。