让角色跟随不平坦的地形(2D)

时间:2010-02-24 13:08:51

标签: c++

我想制作一个地形不均匀且基于png的游戏。考虑到物体的vec2及其角度,理论上如何做到这一点,因为如果有一座山,那么角色将根据山的角度旋转。感谢

2d喜欢马里奥

3 个答案:

答案 0 :(得分:2)

我认为你在谈论一个heightmap,你是PNG,然后将其转换为3D三角网格。您需要使用网格中的信息(或PNG颜色值)来计算放置角色的当前高度。

如果这是一个飞行角色,你可以在这里完成,但在你的情况下,你需要计算角色所站立的当前三角形的法线向量。使用两个三角矢量(V2-V1)x(V3-V1)的叉积非常简单。这也应该是你角色的角度。您也可以通过包含周围角度的法线来平均此向量。

顺便说一句,当你有三角形的法线时,你也可以在地面上应用一些基本的阴影。


补充:OP将问题更改为2D问题。上述方法仍然有效,但2D更容易。

使用高度值不是三角形而是线条(轮廓),而是计算当前线的法线。也就是说,在当前高度值和下一个高度值之间创建一个向量v。然后该矢量的法线是n =< -v.y,v.x>。将其用作角色的角度。

答案 1 :(得分:0)

您需要一个将PNG数据转换为三维表示的映射函数...此映射函数可以很简单,例如将PNG中的灰度值解释为高度或通过人工指导,或者它可能很复杂,如在高级计算机视觉算法中使用的阴影检测。在任何一种情况下,您都可以根据通过映射函数收集的数据移动角色。

答案 2 :(得分:0)

在c ++中,我建议寻找一种不仅仅支持普通地形的3D游戏引擎 您可以从this list

开始

当然,如果你不想从头开始,那么你需要首先寻找算法。

编辑: 因为它是游戏,而不是2d的地形,如果你想要从图像中创建你的环境,那么你需要很多edge-detection