移植矩阵和转换函数

IRIS GL 和 OpenGL 以类似的方式处理矩阵和转换。 但是从 IRIS GL 移植代码时,需要记住几个区别:

  • 在 OpenGL 中,始终处于双矩阵模式;没有单矩阵模式。

  • 角度以度为单位,而不是以十分之几度为单位。

  • 投影矩阵调用(例如 glFrustumglOrtho)现在乘以当前矩阵,而不是加载到当前矩阵上。

  • 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 glLoadMatrixfglLoadMatrixd
将当前矩阵替换为指定的矩阵。
multmatrix glMultMatrixfglMultMatrixd
后乘当前矩阵与指定的矩阵(请注意,multmatrix 预乘)。
mapwmapw2 gluUnProject 将世界空间坐标投影到对象空间(另请参阅 gluProject)。
正交 glOrtho 将当前矩阵乘以正交投影矩阵。
正交2 gluOrtho2D 定义二维投影矩阵。
透视 gluPerspective 定义透视投影矩阵。
选取 gluPickMatrix 定义选取区域。
popmatrix glPopMatrix 弹出当前矩阵堆栈,将当前矩阵替换为下面的矩阵。
pushmatrix glPushMatrix 将当前矩阵堆栈向下推送一个,复制当前矩阵。
旋转
glRotatedglRotatef
按给定角度旋转当前坐标系,从原点到给定点的矢量。 请注意,旋转 仅围绕 x 轴、y 轴和 z 轴旋转。
缩放 glScaledglScalef
将当前矩阵乘以缩放矩阵。
翻译 glTranslatefglTranslated
通过将当前矩阵乘以平移矩阵,将坐标系统原点移动到指定的点。
窗口 glFrustum 给定剪裁平面坐标,将当前矩阵乘以透视矩阵。

OpenGL 有三种矩阵模式,这些模式 glMatrixMode设置。 下表列出了可用作 glMatrixMode参数的模式。

IRIS GL 矩阵模式 OpenGL 模式 意义 最小堆栈深度
MTEXTURE GL_TEXTURE 在纹理矩阵堆栈上作。 2
MVIEWING GL_MODELVIEW 对模型视图矩阵堆栈进行作。 32
MPROJECTION GL_PROJECTION 对投影矩阵堆栈进行作。 2