2

我想实现一个 3D 赛车游戏,我需要估计地形上任意点的坡度的大小和方向。

地形数据格式:
- heights[ ][ ]:二维浮点数组(以米为单位表示高度)
- 单位:(i, j) - (i, j+1) 和 (i, j) - ( i+1, j) 以米为单位

前任:

3|1311
2|2542 <-- 2D array of heights in meters
1|2231   (unit distance between two cell is, say, 1 meters)
0|1121   (so the highest point of the terrain (x = 1.5 meters, y = 2.5 meters)
  ----      is 5 meters high)
  0123

例如,(x = 1.75 米,y = 2.25 米)处的坡度值和方向是多少?

你的插值算法是什么?

4

1 回答 1

3

您当然可以沿 x 轴和 y 轴进行线性插值,即首先对低于和高于实际 x 值的 x 坐标插入 y 值两次 - 一次插入低于实际 y 值的 y 坐标和y 值高于实际 y 值的一次。这为您提供了两个 y 值,您可以在它们之间进行线性插值以获得高度。

为了找到斜率,您需要找到该点的法线。要找到法线,您可以以相同的方式进行插值。给定一个补丁(由四个点 A:(x1,y1), B:(x2, y1), C:(x2,y2) 和 D:(x1,y2) 确定,x1 < x2, y1 < y2 和每个点还包括高度)您可以说其中一个点(例如 A)的法线由向量 AB 和 AD 的叉积确定。B 处的法线以同样的方式为 BC x BA。

以与高度相同的方式线性插值法线。我不知道你想要斜率的格式,但如果你想要一个指向斜率方向的向量,那么它将由 S = N - Up 计算,其中 Up 只是向上向量(在这个例子中(0,0,1) 因为您使用 Z 作为 up。

另一种方法是将正方形镶嵌成三角形,例如 ABD 和 BCD。整个三角形的法线将分别为 AB x AD 和 BC x BD。在这种情况下,请查看http://www.cc.gatech.edu/classes/AY2007/cs3451_spring/lininter.pdf例如如何插入三角形的高度。这种方法可以为您提供平滑的三角形,但相邻三角形之间的斜率存在显着差异。

于 2010-01-13T23:34:23.450 回答