就投影矩阵和模型视图矩阵而言,恒等矩阵实质上将矩阵重置为其默认状态。
如您所希望的那样,glTranslate
并且glRotate
总是相对于矩阵的当前状态。因此,例如,如果调用glTranslate
,则是从矩阵的当前“位置”开始翻译,而不是从原点开始翻译。但是,如果要从原点开始,那就是在调用时glLoadIdentity()
,然后可以glTranslate
从现在位于原点的矩阵中,也可以从glRotate
现在朝默认方向定向的矩阵中。
我认为Boon的答案(等于1)并不完全正确。矩阵实际上如下所示:
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
那就是身份矩阵。从数学上来说,Boon是正确的,任何与该矩阵相乘的矩阵(或看起来类似的矩阵;对角矩阵,其他均为0)都将产生原始矩阵,但是我不相信他解释了为什么这很重要。
之所以如此重要,是因为OpenGL将每个矩阵的所有位置和旋转都相乘。因此,例如当您绘制多边形(glBegin(GL_FACE)
,某些点glEnd()
)时,通过将其与MODELVIEW相乘将其转换为“世界空间”,然后通过将其与PROJECT矩阵相乘将其从3D转换为2D,这样就得出了屏幕上的2D点以及用于绘制像素的深度(从屏幕“相机”开始)。但是,当这些矩阵之一是恒等矩阵时,这些点会与恒等矩阵相乘,因此不会改变,因此该矩阵无效。它不会平移点,不会旋转点,而是保持原样。
我希望这可以澄清更多!