天天看点

glMatrixMode(GLenum mode)

指定了需要修改的是模型视图矩阵、投影矩阵还是纹理矩阵。mode的值可以是GL_MODELVIEW、GL_PROJECTION或GL_TEXTURE。接下来调用的变换函数将影响它指定的矩阵。注意,一次只能修改一个矩阵,在默认情况下,变换函数修改的矩阵是模型视图矩阵。另外,在默认情况下这3个矩阵均为单位矩阵。

glMatrixMode(GLenum mode)

GL_MODELVIEW

GL_PROJECTION

GL_TEXTURE

可以使用glLoadIdentity()函数,把当前的可修改矩阵清除为单位矩阵,共未来的变换函数使用(这些函数将对当前矩阵进行修改)。一般而言,我们总是在指定投影或视图变换之前调用这个函数。但是,也可以在指定模型变换之前调用这个函数。

glLoadIdentity(void)

把当前的可修改矩阵设置为4*4的单位矩阵。

如果需要显式地指定一个特定的矩阵,并把它加载到当前矩阵,可以使用glLoadMatrix*()或glLoadTransposeMatrix*()函数。类似地,可以使用glMultMatrix*()或glMultTransposeMatrix*()函数把当前矩阵与参数所指定的矩阵相乘。

void glLoadMatrix{fd}(const TYPE *m)  把当前矩阵的16个值设置为m指定的值。

void glMultMatrix{fd}(const TYPE *m); 把m指定的16个值作为一个矩阵,与当前矩阵相乘,并把结果存储在当前矩阵中。

全局固定坐标系统

如果想根据一个全局固定的坐标系统老考虑问题(在这种坐标系统中,矩阵乘法将影响模型的位置、方向和缩放),就必须注意乘法的出现顺序与它们在代码中出现的顺序相反。

局部移动坐标系统

考虑矩阵乘法的另一种思路是抛弃在变换模型时所使用的全局固定坐标系统。

模型变换

在OpenGL中,有3个函数用于执行模型变换,它们是glTranslate*()、glRotate*()和glScale*()。正如我们预想的那样,这些函数通过移动、旋转、拉伸或反射,对物体(或坐标系统,取决于思考方式)。这三个函数都相当于产生一个适当的移动、旋转或缩放矩阵,然后以这个矩阵作为参数调用glMultMatrix*()。但是,使用这三个函数可以比使用glMultMatrix*()速度更快。OpenGL会自动计算矩阵。