3d高度图地形和碰撞检测

时间:2012-09-13 23:26:04

标签: java math 3d

三维地形。

我有3个定义平面的顶点。 (高度图中最近的3个像素)

我在那架飞机上有一个x,z。 (我在世界上的位置)

你如何找到y截距? (这样我就站在那架飞机的表面上)

2 个答案:

答案 0 :(得分:2)

飞机的等式是:

A x + B y + C z = D,其中D = A x0 + B y0 + C z0,

如果您有三个顶点,请从顶点中找到两个矢量。例如,对于三个顶点T,U,V,例如,矢量 TU ,矢量 UV

找到两个向量的叉积。那是你的法线向量 n ,它有三个组件n1,n2和n3。

A = n1
B = n2
C = n3

取其中一点。该点的坐标是x0,y0和z0。

将其输入等式中以计算D.

然后将x和z替换为x和z并求解y!

所以最后y是:

y = (A*x0 + B*y0 + C*z0 - A*x - C*z)/B

如果我的代数错了,有人会纠正我。

您可以像这样计算交叉积:

对于两个向量 a b ,分别包含组件a1,a2,a3和b1,b2,b3,叉积为:

enter image description here

转到:

enter image description here

A = i-hat系数(加粗i)

B = j-hat系数(加粗j)

C = k-hat系数(粗体k)

答案 1 :(得分:0)

您说您正在查看高度贴图中最近的三个像素,这使我假设您有一个从中提取顶点的常规网格。在这种情况下,您可以使用图像插值方法来执行linear,类似于来自eboix或bicubic插值的答案。然后,您的高度值等于图像处理域中的亮度值。 线性情况下的数学运算要容易得多,网格结构可以使用简单的形式。设c为您的单元格大小,p,q,r为3个顶点的高度值,如此

p    q
 +--.
 | /
 |/
r

和x,以及沿着直角三角形的腿的距离。三角形当然是3个顶点在x,y平面上的投影。然后你的插值高度值是

z = (q-p)/c * x + (r-q)/c * y
相关问题