移植矩阵和转换函数

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

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

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

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

  • OpenGL 函数 glRotaterotate 大不相同。 可以绕任意轴旋转,而不是限制在 x 轴、y 轴和 z 轴上。 例如,可以翻译:

    rotate(200*(i+1), 'z');
    

    to:

    glRotate(.1*(200*(i+1), 0.0, 0.0, 1.0);
    

    旋转 转换为 glRotate 时,可切换到从十分之一度开始的度数,并将“z”替换为 z 轴的向量。

  • OpenGL 没有与 polarview 函数等效的函数。 可以轻松地将它替换为一个转换和三个旋转。 例如,可以翻译:

    polarview(distance, azimuth, incidence, twist);
    
    

    to:

    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 将当前矩阵乘以正交投影矩阵。
ortho2 gluOrtho2D 定义二维正交投影矩阵。
视角 gluPerspective 定义透视投影矩阵。
picksize gluPickMatrix 定义选取区域。
popmatrix glPopMatrix 弹出当前矩阵堆栈,将当前矩阵替换为其下面的矩阵。
pushmatrix glPushMatrix 将当前矩阵堆栈向下推 1,复制当前矩阵。
rotaterot
glRotatedglRotatef
按从原点到给定点的矢量的给定角度旋转当前坐标系。 请注意,仅围绕 x 轴、y 轴和 z 轴旋转。
scale glScaledglScalef
将当前矩阵乘以缩放矩阵。
translate glTranslatefglTranslated
通过将当前矩阵乘以平移矩阵,将坐标系原点移动到指定的点。
窗口 glFrustum 给定的剪裁平面坐标将当前矩阵乘以透视矩阵。

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

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