OpenGl学习笔记4之通用的视图变换函数(glLoadIdentity,glMatrixMode)
通用的变换函数
在介绍四种变换的具体使用方法时,先简单介绍下场景变换中用到的通用函数。
函数原型:
Void glLoadIdentity (void)
作用:把当前矩阵设置为单位矩阵,这个函数在每次场景变换之前都很重要,因为绝大多数变换都是把当前矩阵与我们指定的矩阵相乘,然后把结果再设置为当前矩阵(前面已经介绍过:我们的变换实质就是一个4*4的矩阵,不同的变换有不同的参数,我们只需要调用opengl的函数即可,不用直接操纵矩阵)。所以我们在变换之前,把当前矩阵清空成单位矩阵,否则当前矩阵中的参数是上一次变换留下来的(当前矩阵会一致保存上一次变换时的状态,这是由于opengl特有的状态机制导致的),说了这么多,大家就记住每次变换之前先调用这个函数,这是一个良好的习惯。
函数原型:
void glMatrixMode(GLenum mode)
作用:mode 指定哪一个矩阵堆栈是下一个矩阵操作的目标,可选值: GL_MODELVIEW、GL_PROJECTION、GL_TEXTURE.
glMatrixMode设置当前矩阵模式:
GL_MODELVIEW,对模型视景矩阵堆栈应用随后的矩阵操作.
GL_PROJECTION,对投影矩阵应用随后的矩阵操作.
GL_TEXTURE,对纹理矩阵堆栈应用随后的矩阵操作.
说白了,就是我们在进行变换之前,要显式的告诉opengl,我们接下来要进行哪种变换(修改哪种矩阵)。不同的参数对应我们不同的变换。在默认情况下,该函数修改的矩阵式模型视图矩阵,并且默认情况下,这三个矩阵均为单位矩阵。
此函数与glLoadIdentity()一同使用,这两个函数一般情况下就是捆绑使用:进行变换时,先说明要对哪种矩阵操作。再清空矩阵。
void init (void) //绘制之前进行初始化一系列动作 { glClearColor (0.0, 0.0, 0.0, 0.0); //将屏幕颜色清除为白色 glMatrixMode(GL_PROJECTION); //设置操作矩阵为投影矩阵,投影矩阵以后会详细介绍 glLoadIdentity();//将矩阵清空为单位矩阵 glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0); //定义正交平行的视景体。 一般用于物体不会因为离屏幕的远近而产生大小的变换的情况。此函数以为会详细的讲。 }