如何组织3D游戏的结构?

时间:2010-11-27 12:10:11

标签: python architecture 3d pyglet

这是一个模糊的问题,但请耐心等待。我正在使用Python / Pyglet和openGL编写游戏。我目前有它的结构,所以有一个名为'world'的对象,其中包含其他对象的其他对象等。我这样做是因为例如游戏的一部分是一个包含其他对象的平台,当我倾斜平台时,我希望它上面的物体随之倾斜。所以我做platform.draw()调用glRotate,glTranslate,然后绘制每个对象,在中间保存模型视图矩阵,这样平台上的所有对象一起移动。 第一个问题是,这是一种合理的方式来组织事物还是我应该使用其他方法?

我没有相机课,目前我只是翻译整个世界或其中的一部分,以给出运动的幻觉。但是,将来我希望能够在对象之间切换视点,例如,从世界上的一个对象切换到从上到下的世界到第一人称视图。所以第二个问题是构建我的程序的最佳方法是什么,以便将来可以实现?

2 个答案:

答案 0 :(得分:1)

可能不是一个完整的答案,但我认为一本完整的答案需要整本书......

你在层次结构中表达世界的方式与通常所说的“场景图”非常相似,在许多情况下这是一个好主意。这个库的一个很好的例子是Open Scene Graph

关于“翻译世界”,除非你每次真正改变所有顶点,否则它也完全没问题。这只是一个相对观点的问题,你真正拥有的是相机矩阵。您可以看到转换为将相机放置在世界中,或者将相机移动到相机前面。

答案 1 :(得分:0)

您可以将逻辑放入单独的模块/单独的类/函数中。 在我的2D游戏中,我有一个GameLogic类,它简化了为某些事件注册它的方法或安排它们(并注销+取消注册它们),我创建了一个@state_wrapper装饰器,它注入一个简单的新风格object作为该方法的state-storage。如果您这样做,则不必将指针传递给所有世界对象,只有事件方法必须能够访问您的对象。

但我不会声称这是最好的解决方案;)