2024年4月1日发(作者:)
OpenGL图形变换
OpenGL图形软件包是为三维应用设计的,其中包含了大量的有关三维变换的操作,
二维变换则可以看作是三维变换的特例。OpenGL中常用的变换包括模型视图变换、投影
变换和视见区变换。
一、矩阵堆栈
在计算机图形学中,所有的变换都是通过矩阵乘法来实现的,即将三维形体顶点构成
的齐次坐标矩阵乘以三维变换矩阵就得到了变换后的形体顶点的齐次坐标矩阵,这样只要
求出形体的三维变换矩阵,就可以得到变换后的形体。在OpenGL中,对象的坐标变换也
是通过矩阵来实现的。OpenGL中包含了两个重要的矩阵:模型视图矩阵和投影矩阵,其
中模型视图矩阵用于物体的模型视图变换,投影矩阵用于投影变换。
一般来说,在进行矩阵操作之前,需要指定当前操作的矩阵对象,这可以使用函数:
glMatrixMode(GLenum mode);
定义。其中当mode取GL_MODELVIEW时,表示对模型视图矩阵进行操作;当mode
取GL_PROJECTION时表示对投影矩阵进行操作,并且一旦设置了当前操作矩阵,它就将
保持为当前的矩阵对象,直到再次调用函数glMatrixMode修改它为止。默认情况下,系
统处理的当前矩阵是模型视图矩阵。
OpenGL为模型视图矩阵和投影矩阵各维护着一个“矩阵堆栈”,其中堆栈的栈顶矩
阵就是当前的模型视图矩阵或投影矩阵。在调用变换函数的时候,系统自动计算变换函数
对应的变换矩阵与当前操作的矩阵堆栈栈顶矩阵的乘积,并置为栈顶矩阵,绘制图形时使
用栈顶矩阵作为图形的变换矩阵。矩阵堆栈主要用来保存和恢复矩阵的状态。OpenGL中
利用函数:
void glPushMatrix(void);
void glPopMatrix(void);
实现矩阵堆栈的操作。其中函数glPushMatrix将当前矩阵堆栈的栈顶矩阵复制一个,
并将其压入当前矩阵堆栈,以保存当前变换矩阵。函数glPopMatrix用于将当前矩阵堆栈
的栈顶矩阵弹出,这样,堆栈中的下一个矩阵变为栈顶矩阵(当前变换矩阵),用来恢复当
前变换矩阵原先的状态。
二、模型视图变换
模型视图矩阵是一个4×4的矩阵,用于指定场景的视图变换和几何变换。在进行模型
视图矩阵操作前,必须调用函数glMatrixMode(GL_MODELVIEW)指定变换只能影响
模型视图矩阵。模型变换主要确定模型在坐标系中的位置,主要通过平移、旋转和放缩等
几何变换改变模型的位置、尺寸和形状。模型变换的实现主要有以下两种方法。
1. 直接定义矩阵
OpenGL利用函数:
void glLoadMatrix{fd}(const TYPE *m);


发布评论