这是一个有点模糊的问题,但请耐心等待。我正在使用 Python/Pyglet 和 openGL 编写游戏。我目前对其进行了结构化,以便有一个名为“世界”的对象,其中包含其他对象以及其中的其他对象等。我这样做是因为例如游戏的一部分是一个平台,上面有其他对象,当我倾斜平台时,我希望平台上的物体也随之倾斜。所以我执行调用 glRotate、glTranslate 的 platform.draw(),然后绘制每个保存模型 View 矩阵的对象,这样平台上的所有对象都会一起移动。 第一个问题是,这是一种合理的组织方式吗?还是我应该使用其他方法?
我没有相机类,目前我只是翻译整个世界或其中的一部分以产生运动的错觉。但是,将来我希望能够在对象之间切换视点,例如,从从上方俯视世界切换到从世界中的一个对象的第一人称视角。所以第二个问题是什么是构建我的程序的最佳方式,以便将来可以实现?
请您参考如下方法:
可能不是一个完整的答案,但我认为一个完整的答案需要一整本书...
您在层次结构中对世界的表示与通常称为“场景图”的内容非常相似,在许多情况下这是个好主意。一个很好的图书馆例子就是 Open Scene Graph .
关于“平移世界”,除非你真的每次都在变换所有的顶点,否则也完全没问题。这只是相对角度的问题,您真正拥有的与相机矩阵相同。您可以将转换视为将相机放置在世界中,或将世界移动到相机前。
