我已经阅读了几篇关于使用 OpenGL 渲染 3D 场景的过于复杂的文章,但并没有真正找到可以帮助我可视化关于 glRotate 和 glTranslate 调用的场景导航基本概念的东西。
通过对 LWJGL(我的特定 OpenGL 库)提供的示例进行试验,我基本了解了它们的使用效果。我可以使用 glTranslate 移动到一个点,使用 glRotate 围绕该点旋转,使用 glLoadIdentity 快速回到原点或使用 glPopMatrix 回到最后一个 glPushMatrix,它们本质上是位置和旋转的快照。最后,场景将相对于原点渲染到屏幕上。
所以基本上,把一个立方体放在 A 点旋转 B:
至于“相机”,由于openGL的“眼睛”是固定的,所以场景必须从相机反向移动,以模拟用相机移动眼睛。这是我到目前为止的理解,如果这是错误的,请让我走上正确的道路。
现在针对我的具体情况和问题:
我的“场景”由地形和玩家(一些任意形状,位于与地形相关的位置和“相机”头)组成。 View 应该相对于玩家旋转,而玩家相对于地形移动。我希望最终渲染基本上“透视”玩家的头部或相机。我的困惑在于渲染每个部分的翻译/旋转调用的顺序,以及翻译的方向。以下是相对于玩家的“相机”渲染地形和玩家的正确方法吗?
另外,旋转对翻译有影响吗? Aka,OpenGL 是否相对于旋转进行平移,或者旋转与平移无关?
最佳答案
I can use glTranslate to move to a point, glRotate to rotate about that point, and glLoadIdentity to snap back to the origin or glPopMatrix to go back to the last glPushMatrix, which are essentially snapshots of a location and rotation.
不,不完全。这些功能现在知道场景是什么。他们所做的只是操纵矩阵。这是一篇关于它的优秀文章:
http://www.opengl.org/wiki/Viewing_and_Transformations
使用 OpenGL 时要记住的重要一点是,它不是场景图。它所做的只是将平面点、线和三角形渲染到帧缓冲区。没有像您导航的场景这样的东西。
So basically, to put a cube at point A with rotation B: (...)
是的,你没看错。
As for the "camera", since openGL's "eye" is fixed
好吧,OpenGL 没有相机。它只是通过模型 View 矩阵插入顶点,对它们进行照明计算,然后将它们通过投影并将它们映射到视口(viewport)。
关于 "lookthrough"相机的 OpenGL(简单)场景和对象导航基础知识,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10371391/