IRIS GL 和 OpenGL 以类似的方式处理矩阵和转换。 但是从 IRIS GL 移植代码时,需要记住几个区别:
在 OpenGL 中,始终处于双矩阵模式;没有单矩阵模式。
角度以度为单位,而不是以十分之几度为单位。
OpenGL 函数 glRotate,与 旋转大不相同。 可以围绕任意轴旋转,而不是局限于 x 轴、y 轴和 z 轴。 例如,可以翻译:
rotate(200*(i+1), 'z');
自:
glRotate(.1*(200*(i+1), 0.0, 0.0, 1.0);
从 旋转 到 glRotate 切换到十分之几度的度,并将“z”替换为 z 轴的向量。
OpenGL 不等效于 极视图 函数。 可以使用翻译和三个旋转轻松替换它。 例如,可以翻译:
polarview(distance, azimuth, incidence, twist);
自:
glTranslatef( 0.0, 0.0, -distance); glRotatef( -twist * 10.0, 0.0, 0.0, 1.0); glRotatef( -incidence * 10.0, 1.0, 0.0, 0.0); glRotatef( -azimuth * 10.0, 0.0, 0.0, 1.0);
下表列出了 OpenGL 矩阵函数及其等效的 IRIS GL 函数。
IRIS GL 函数 | OpenGL 函数 | 意义 |
---|---|---|
mmode | glMatrixMode | 设置当前矩阵模式。 |
glLoadIdentity | 将当前矩阵替换为标识矩阵。 | |
loadmatrix |
glLoadMatrixf,glLoadMatrixd |
将当前矩阵替换为指定的矩阵。 |
multmatrix |
glMultMatrixf,glMultMatrixd |
后乘当前矩阵与指定的矩阵(请注意,multmatrix 预乘)。 |
mapw、mapw2 | gluUnProject | 将世界空间坐标投影到对象空间(另请参阅 gluProject)。 |
正交 | glOrtho | 将当前矩阵乘以正交投影矩阵。 |
正交2 | gluOrtho2D | 定义二维投影矩阵。 |
透视 | gluPerspective | 定义透视投影矩阵。 |
选取 | gluPickMatrix | 定义选取区域。 |
popmatrix | glPopMatrix | 弹出当前矩阵堆栈,将当前矩阵替换为下面的矩阵。 |
pushmatrix | glPushMatrix | 将当前矩阵堆栈向下推送一个,复制当前矩阵。 |
旋转,腐 |
glRotated,glRotatef |
按给定角度旋转当前坐标系,从原点到给定点的矢量。 请注意,旋转 仅围绕 x 轴、y 轴和 z 轴旋转。 |
缩放 |
glScaled,glScalef |
将当前矩阵乘以缩放矩阵。 |
翻译 |
glTranslatef,glTranslated |
通过将当前矩阵乘以平移矩阵,将坐标系统原点移动到指定的点。 |
窗口 | glFrustum | 给定剪裁平面坐标,将当前矩阵乘以透视矩阵。 |
OpenGL 有三种矩阵模式,这些模式 glMatrixMode设置。 下表列出了可用作 glMatrixMode参数的模式。
IRIS GL 矩阵模式 | OpenGL 模式 | 意义 | 最小堆栈深度 |
---|---|---|---|
MTEXTURE | GL_TEXTURE | 在纹理矩阵堆栈上作。 | 2 |
MVIEWING | GL_MODELVIEW | 对模型视图矩阵堆栈进行作。 | 32 |
MPROJECTION | GL_PROJECTION | 对投影矩阵堆栈进行作。 | 2 |