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); //定义正交平行的视景体。 一般用于物体不会因为离屏幕的远近而产生大小的变换的情况。此函数以为会详细的讲。
}


原文地址:https://www.cnblogs.com/zhangruilin/p/5769809.html