Opengl - 为什么glTranslatef在编码和glutwiresphere接下来首先出现

时间:2013-11-16 09:47:34

标签: c++ opengl

在开始之前,我想感谢stackoverflow社区成员提供超快速和准确的答案。

我看到了一个示例,并附上了此处代码的摘录

   glPushMatrix();
   glTranslatef (0.0, 0.0, -5.0);


/*    clip lower half -- y < 0          
   glClipPlane (GL_CLIP_PLANE0, eqn);
   glEnable (GL_CLIP_PLANE0);
/*    clip left half -- x < 0           
   glClipPlane (GL_CLIP_PLANE1, eqn2);
   glEnable (GL_CLIP_PLANE1);
   */

   glRotatef (90.0, 1.0, 0.0, 0.0);
   glutWireSphere(1.5, 20, 15);
   glPopMatrix();
   glFlush ();

我怀疑在实际形成线球之前我们是'翻译'和'旋转'。 确切地说glRotate()glTranslate()之前为什么会出现glutWireSphere

2 个答案:

答案 0 :(得分:2)

OpenGL不是场景图。其中没有“对象”这样的东西。没有什么可以“形成”。所有OpenGL都知道是点,线和三角形,绘制到像素帧缓冲画布。 (为什么我没有存储该序言的模板,我会写每个第二个OpenGL答案。)

你用OpenGL绘制的东西就是它。 OpenGL不会记住它。那么OpenGL的作用是,它将通过转换步骤绘制的点,线或三角形的坐标和结果数字告诉,在屏幕上绘制的位置。显然必须在绘制之前设置转换。

答案 1 :(得分:1)

glTranslate()glRotate()做的是将当前矩阵与特定变换矩阵(分别为平移或旋转矩阵)相乘。 glutWireSphere()指定当前活动的模型视图坐标中的球体。

换句话说,首先设置模型视图矩阵,使其表示球体所需的局部坐标系,然后在其中创建球体。