3

我想使用Irrlicht引擎在C++中制作 2D 游戏。在这个游戏中,你将在某种洞穴中控制一艘小船。这个洞穴会自动创建(游戏会有随机关卡),看起来像这样:

洞穴

假设我已经有了洞穴内部的多边形点(白色部分)。我应该如何在屏幕上渲染这个形状并将其用于碰撞检测?根据我在不同地点阅读的内容,我应该使用三角测量算法使用洞穴内部的多边形(白色部分)制作洞穴墙壁(黑色部分)的网格。然后,我还可以使用这些网格进行碰撞检测。这真的是最好的方法吗?你知道 Irrlicht 是否有一些内置函数可以帮助我实现这一点?

任何建议将不胜感激。

4

3 回答 3

3

描述如何使用给定的 3D 引擎渲染任意多边形形状是一个相当漫长的过程。可以说几乎所有 3D 渲染都是根据三角形完成的,如果您没有使用工具来生成已经由三角形组成的模型,那么您需要从那里的任何数据生成三角形。对黑色空间或白色空间进行三角测量可能是最好的方法,是的。然后你可以从中建立一个网格或顶点列表,并以这种方式渲染这些三角形。然后列表中的三角形也会加倍以进行碰撞检测。

我怀疑 Irrlicht 有任何三角测量方法,因为它是针对你的游戏设计的,而不是大多数人会采用的通用方法。(通常他们会有一个工具,它允许并排生成游戏几何和导航几何。)考虑到你在那里的形状,看起来它可能非常棘手。

于 2010-02-26T10:16:28.713 回答
1

一种选择是直接使用地图(图像掩码)来测试碰撞。

例如,

if map_points[sprite.x sprite.y] is black then
   collision detected

假设您的对象是图像并且它们不是真正的多边形。

如果您使用真正的多边形,您可以为每个对象形状创建一个“点样本”,
并检查样本是否存在碰撞。

于 2010-02-26T10:22:10.070 回答
1

要检查一个点是在多边形内部还是外部,您可以简单地计算交叉点。你知道 (0,0) 在你的多边形之外。现在从那里画一条线到你的测试点(X,Y)。如果这条线穿过奇数个多边形边(例如 1 条),则它在多边形内。如果直线穿过偶数条边(例如 0 或 2),则点 (X,Y) 位于多边形之外。在纸上运行这个算法一次以说服自己很有用。

于 2010-02-26T10:32:54.693 回答