OpenGL中的翻译和轮换?

时间:2013-03-16 11:19:28

标签: opengl-3

我正在通过OpenGL Superbible(第4版)。第4章有一个围绕原子核旋转电子的例子。 (基本上是关于单个较大球体的小球体)。

这是渲染函数的摘录,它在围绕核(另一个球体)的特定位置绘制电子(球体)。 fElect1是每次渲染调用时增加10度的角度。

glPushMatrix();
glRotatef(360.0f-45.0f,0.0f, 0.0f, 1.0f);
glRotatef(fElect1, 0.0f, 1.0f, 0.0f);
glTranslatef(0.0f, 0.0f, 60.0f);
glColor3ub(56,136,21);
glutSolidSphere(6.0f, 15, 15);
glPopMatrix()

所以 - 他围绕z轴旋转了315度。然后将关于新旋转的y轴的视图旋转角度fElect1,然后绘制球体。即,他想模拟围绕y轴的电子轨道。结果是电子似乎在球体周围的“倾斜”轨道上移动(因为x轴倾斜了315度而倾斜)。

但我的问题是 - 他为什么翻译z轴?这不意味着电子有一种轨道,其中核不在其路径的中心吗?但是当我运行模拟时,它看起来并不像那样。

1 个答案:

答案 0 :(得分:1)

我想也许你正在考虑从错误的方向进行操作。他们在GL中的应用方式,您首先应用最“全局”的转换,最后应用最“本地”的转换。因此,在考虑如何改变某些事物时,您可能希望以相反的顺序考虑它们。

所以:

  • 您的球体是在原点生成的
  • 这是由Z。中的60个单位翻译而来。
  • 然后围绕Y轴旋转(因此现在它在XZ平面中以60个单位的距离绕原点运行)。
  • 最后,一切都围绕Z轴旋转,产生倾斜。
  • 这将通过任何先前的转换进一步转换,例如已经应用于“原子”和相机的任何转换。