Java 3d heightmap地形和碰撞检测

Java 3d heightmap地形和碰撞检测,java,math,3d,Java,Math,3d,三维地形 我有3个顶点定义一个平面。(高度贴图中最近的3个像素) 我在那架飞机上有一个x,z。(我在世界上的位置) 你怎么找到y截距?(这样我就站在那个平面的表面上)平面的方程是: Ax+By+Cz=D,其中D=Ax0+By0+Cz0 如果有三个顶点,则从这些顶点查找两个向量。例如,对于三个顶点T、U、V,例如将有一个向量TU,和一个向量UV 求两个向量的叉积。这是法向量,n,它有三个分量n1、n2和n3 A = n1 B = n2 C = n3 拿其中一点来说。该点的坐标为x0、y0和z0

三维地形

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

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


你怎么找到y截距?(这样我就站在那个平面的表面上)

平面的方程是:

Ax+By+Cz=D,其中D=Ax0+By0+Cz0

如果有三个顶点,则从这些顶点查找两个向量。例如,对于三个顶点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
如果我的代数错了,有人纠正我

可以这样计算叉积:

对于分量分别为a1、a2、a3和b1、b2、b3的两个向量ab,叉积为:

这是为了:

A=i-hat的系数(粗体i)

B=j-hat的系数(粗体j)


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

你说你在看高度贴图中最近的三个像素,这让我假设你有一个规则的网格,你可以从中提取顶点。在这种情况下,您可以使用图像插值方法来执行与eboix或插值中的答案类似的操作。然后,高度值与图像处理域中的亮度值相等。 在线性情况下,数学要容易得多,网格结构使使用简单形式成为可能。让c表示单元大小,p,q,r表示3个顶点的高度值,如下所示

p    q
 +--.
 | /
 |/
r
和x,y是沿着直角三角形腿的距离。其中三角形当然是三个顶点在x,y平面上的投影。然后,插值的高度值为

z = (q-p)/c * x + (r-q)/c * y