-
-
-
+
+
地形碰撞(Terrain Collisions)
此前我们创建了一个地形,接下来就是检测碰撞以避免穿过它。回忆一下之前的内容,一个地形是由地形块组成的,每个地形块都是由高度图生成的,高度图用于设置构成地形的三角形的顶点高度。
为了检测碰撞,我们必须将当前所在位置的Y值与当前地形点的Y值进行比较。如果有碰撞,我们需要回到地形上方。很简单的想法,是吗?确实是这样,但在比较之前,我们需要进行几次计算。
-
我们首先要定义的是我们对“当前位置”这个词的理解。由于我们还没有一个球员的概念,答案很简单,当前的位置将是相机的位置。因此,我们已经有了比较的组成部分之一,因此,接下来要计算的是当前位置的地形高度。
-首先要定义的是“当前位置”这个词的概念。由于我们还没有一个“玩家”的概念,因此当前位置将是摄像机的位置。这样我们就有了比较的一方,因此接下来要计算当前位置的地形高度。
-
如上所是,地形由地形块组成,如下图所示。
+
首先要定义的是“当前位置”这个词的概念。由于我们还没有一个“玩家”的概念,当前位置将是摄像机的位置。这样我们就有了比较的一方,因此接下来要计算当前位置的地形高度。
+
如上所述,地形由地形块组成,如下图所示。

每个地形块都是由相同的高度图网格构成,但被精确地缩放和位移,以形成看起来像是连续的景观的地形网格。
所以首先要做的是确定当前位置(摄像机位置)在哪个地形块。为了得到它,我们将基于位移和缩放来计算每个地形块的包围盒(BoundingBox)。因为地形在运行时不会移动或缩放,所以我们可以在Terrain类的构造方法中计算。这样就可以在任何时候访问它们,而不需要在每个游戏循环周期中重复这些计算。
@@ -433,31 +413,22 @@ if ( camera.getPosition().y <= height ) {
有许多可行的解决方案可以避免这个效应,最简单的解决方法是将要进行的计算分成增量较小的多份。
-
-
@@ -465,11 +436,11 @@ if ( camera.getPosition().y <= height ) {