移植矩阵和转换函数
IRIS GL 和 OpenGL 以类似的方式处理矩阵和转换。 但是,从 IRIS GL 移植代码时,需要记住几个差异:
在 OpenGL 中,始终处于双矩阵模式;没有单矩阵模式。
角度以度为单位,而不是十分之一度。
OpenGL 函数 glRotate 与 rotate 大不相同。 可以绕任意轴旋转,而不是限制在 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 | glLoadMatrixf,glLoadMatrixd |
将当前矩阵替换为指定的矩阵。 |
multmatrix | glMultMatrixf,glMultMatrixd |
将当前矩阵与指定矩阵相乘后 (请注意 ,multmatrix 预乘) 。 |
mapw、 mapw2 | gluUnProject | 将世界空间坐标投影到对象空间 (另请参阅 gluProject) 。 |
邻 | glOrtho | 将当前矩阵乘以正交投影矩阵。 |
ortho2 | gluOrtho2D | 定义二维正交投影矩阵。 |
视角 | gluPerspective | 定义透视投影矩阵。 |
picksize | gluPickMatrix | 定义选取区域。 |
popmatrix | glPopMatrix | 弹出当前矩阵堆栈,将当前矩阵替换为其下面的矩阵。 |
pushmatrix | glPushMatrix | 将当前矩阵堆栈向下推 1,复制当前矩阵。 |
rotate,rot |
glRotated,glRotatef |
按从原点到给定点的矢量的给定角度旋转当前坐标系。 请注意,仅围绕 x 轴、y 轴和 z 轴旋转。 |
scale | glScaled,glScalef |
将当前矩阵乘以缩放矩阵。 |
translate | glTranslatef,glTranslated |
通过将当前矩阵乘以平移矩阵,将坐标系原点移动到指定的点。 |
窗口 | glFrustum | 给定的剪裁平面坐标将当前矩阵乘以透视矩阵。 |
OpenGL 有三种矩阵模式,这些模式是使用 glMatrixMode 设置的。 下表列出了 可用作 glMatrixMode 参数的模式。
IRIS GL 矩阵模式 | OpenGL 模式 | 含义 | 最小堆栈深度 |
---|---|---|---|
MTEXTURE | GL_TEXTURE | 对纹理矩阵堆栈进行操作。 | 2 |
MVIEWING | GL_MODELVIEW | 在模型视图矩阵堆栈上操作。 | 32 |
MPROJECTION | GL_PROJECTION | 在投影矩阵堆栈上操作。 | 2 |
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈