要场景图还是不场景图?


10

我一直在努力决定是否在游戏中实现场景图。我有一些使用这种工具的用例,但我无法获得一些实现细节。

背景知识:我正在写针对移动平台(主要是Android)的太空射击游戏,我的代码几乎完全是C ++。我没有使用任何中间件;渲染引擎和物理引擎特别是我自己的作品。我的物理引擎会根据力和脉冲来更新对象的位置。到目前为止,我还没有动画系统,但是可能会在某些时候访问它(可能与本次讨论无关)。

首先,我将描述一个很好的用例。我想拥有一个由几个独立的零件组成的老板,每个零件都可以独立损坏/破坏。例如,我可能有一个老板的胳膊可以独立于其他老板实体而受到伤害。当手臂被销毁时,位于凸台肩部的火焰微粒效应可能表明手臂已被销毁。

实际上,我决定尝试在物理引擎中解决具有约束的此类问题,以将此类复合对象保持在一起。一个这样的约束条件提供了0个自由度,并且本质上是一个变换矩阵。这实际上是在试图解决一个最终使我脱离场景图的问题的尝试,如下所述。

我不使用场景图的主要原因是因为我找不到在物理世界和渲染场景中都保留嵌套对象(从其父级继承了转换的对象)的有效方法。物理世界需要对象位于世界空间(或至少相同的空间)中,而渲染场景需要对象位于父空间中。跟踪两个空间中的位置可能会有所帮助(并且是不可避免的),但会引起自身的担忧,其中至少与性能有关。

但是,考虑到上述用例,我认为能够在父空间中“工作”将变得非常重要,而试图通过约束来迫使我的物理引擎保持这些关系将变得成问题。

给定上述用例和困境,我是否应该使用图结构将转换从一个对象传递到另一个对象?如果是这样,我的物理引擎应该如何计算新位置并针对不同空间中的对象执行相交测试?

Answers:


11

您是否实际尝试过分层图并测量了性能?

您是否已经研究了简单的物理引擎以了解它们如何解决问题,即使是在对象之间具有链接的2D引擎也可以帮助您朝着可靠的方向发展。

我不会尝试在多个空间中运行您的物理学,复杂性将令人生畏。在世界空间中运行物理,并添加功能以创建层次结构的转换,以将局部空间对象移至世界空间并移回世界空间。必要时,约束必须位于相对于父对象的局部空间中。

附带说明一下,即使是纯粹的对象数组也是“场景图”,只是一个非常简单的图。不要害怕以解决问题的方式组织数据,尤其是不要在没有衡量性能的情况下就决定该数据组织的性能是一个因素。


我尝试解决问题不是因为性能,而是因为时间。当您独立时,长时间停留在某些事物上可能对进度和思维定势有害。我稍微看了一下Spring RTS引擎,但没有找到我想要的东西。因此,如果我试一试图,那么在物理引擎中,我将需要更新对象在局部空间中的位置,然后计算世界空间的方向并继续使用以进行碰撞检测。不过,您提到了“和返回”,这需要计算逆矩阵,对吗?我什么时候需要这样做?
notlesh 2011年

我本来想如果时间是问题,那么使用物理库会更快,从而节省大量调试时间。如果您仅做2D,那么也许box2d.org?我建议使用“后退”,因为它只是一个逆,就像您猜到的那样。在某个时候,您可能想要在世界空间中获取某些东西并将其附加到另一个需要该模型的模型上。
Patrick Hughes
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.