我已经阅读了几篇关于使用OpenGL渲染3D场景的过于复杂的文章,并且没有真正找到一些东西可以帮助我可视化关于glRotate和glTranslate调用的场景导航的基本概念。
通过试验LWJGL(我的特定OpenGL库)提供的示例,我基本上了解它们的使用效果。我可以使用glTranslate移动到一个点,glRotate旋转到该点,glLoadIdentity快速回到原点或glPopMatrix回到最后一个glPushMatrix,它们本质上是位置和旋转的快照。最后,场景将渲染到相对于原点的屏幕。
所以基本上,将一个立方体放在A点,旋转B:
对于“相机”,由于openGL的“眼睛”是固定的,场景必须从相机反向移动,以模拟用相机移动眼睛。 到目前为止,这是我的理解,如果这是错误的,请把我放在正确的道路上。
现在针对我的具体情况和问题:
我的“场景”由地形和玩家组成(一些任意形状,位于地形相关位置和“相机”头部)。视图应相对于玩家旋转,并且玩家相对于地形移动。我希望最终渲染基本上“透视”玩家的头部或相机。我的困惑在于渲染每个部分的翻译/旋转调用顺序以及翻译方向。 以下是相对于玩家的“相机”渲染地形和玩家的正确方法吗?
另外,旋转对翻译有影响吗? Aka,OpenGL是否就旋转进行翻译,还是旋转与翻译无关?
答案 0 :(得分:1)
我可以使用glTranslate移动到一个点,glRotate旋转到该点,glLoadIdentity快速回到原点或glPopMatrix回到最后一个glPushMatrix,它们本质上是位置和旋转的快照。
不是不完全。这些功能现在已经知道场景是什么。他们所做的只是操纵矩阵。这是一篇关于它的优秀文章:
http://www.opengl.org/wiki/Viewing_and_Transformations
使用OpenGL时要记住的一件重要事情是,它不是场景图。它所做的只是将平点,线和三角形渲染到帧缓冲区。没有像你导航的场景那样的东西。
所以基本上,将一个立方体放在A点,旋转B: (...)
是的,你说得对。
至于“相机”,因为openGL的“眼睛”是固定的
嗯,OpenGL没有相机。它只是推动顶点通过模型视图矩阵,对它们进行光照计算,然后将它们传递给投影并将它们映射到视口。