移植矩阵和转换函数

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

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

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

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

  • OpenGL 函数 glRotate旋转非常不同。 可以围绕任意轴旋转,而不是局限于 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(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 将当前矩阵乘以正交投影矩阵。
正交2 gluOrtho2D 定义二维投影矩阵。
视角 gluPerspective 定义透视投影矩阵。
picksize gluPickMatrix 定义选取区域。
popmatrix glPopMatrix 弹出当前矩阵堆栈,用下面的矩阵替换当前矩阵。
pushmatrix glPushMatrix 将当前矩阵堆栈向下推送一个,复制当前矩阵。
旋转腐烂
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