OpenGL函数解析之glLoadIdentity()

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenGL函数解析之glLoadIdentity()相关的知识,希望对你有一定的参考价值。

函数原型:void glLoadIdentity(void)

函数说明:调用glLoadIdentity()函数可以恢复初始坐标系,用一个4x4的单位矩阵来代替当前矩阵,实际上就是对当前矩阵进行初始化。无论之前进行了多少次矩阵变换,在执行该函数后,当前矩阵均恢复成一个单位矩阵,即相当于没有进行任何矩阵变换。

调用glLoadIdentity()函数之后,实际上将当前点移到了屏幕中心,类似于一个复位操作,状态如下:

  1. x轴从左至右,y轴从下至上,z轴从里至外。
  2. OpenGL屏幕中心的坐标值是x轴和y轴的0.0f点。
  3. 中心左面的坐标值是负值,右面是正值。
  4. 移向屏幕顶端是正值,移向屏幕底端是负值。
  5. 移向屏幕深处是负值,移出屏幕则是正值。

glLoadIdentity()函数在语义上等同于单位矩阵调用glLoadMatrix()函数,但是在一些情况下,glLoadIdentity()更有效率。

为什么要使用glLoadIdentity()函数?

由于某些原因可能使得当前矩阵中的元素有一些不确定的值,这将导致程序对图形对象进行几何变形时得到一个非预期的结果。因此有必要将当前矩阵初始化成一个单位矩阵,即对图形对象不做任何变换。这就是为什么在调用过glMatrixMode()命令后,总是要调用该命令的原因。由于glMatrixMode()命令本身也是一种矩阵变换,它将当前矩阵变成命令参数所规定的形式,若不用单位矩阵来替换它,在此矩阵下绘制出的图形将是难以预计的。

PS:用单位矩阵替换当前矩阵并不改变当前矩阵模式。

用一个单位矩阵来替换当前矩阵的做法并非在任何场合下都可以使用。例如,已经进行了3次矩阵变换,而现在打算将当前矩阵恢复到第二次变换后的状态时,该方法将失效。此时可用glPushMatrix()命令将每次变换前的矩阵压入矩阵堆栈,在进行完新矩阵中的各种操作后,再利用glPopMatrix()命令将栈顶的矩阵弹出矩阵堆栈,成为当前矩阵。

以上是关于OpenGL函数解析之glLoadIdentity()的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL函数解析之gluPerspective()

OpenGL glMatrixMode 帮助

OpenGL:glRotatef 不工作?

C ++ OpenGL Cube未显示在屏幕上

OpenGL - 透视问题

无法加载和保存矩阵Opengl