我在我的代码中生成了一个由四边形组成的虚拟地形,我现在正试图在某个点找到地形的高度。澄清一下:我有一个地形,在 X 和 Y 方向上有一个宽度和深度,在 Z 方向有一个高度。我想知道特定 X 和 Y 处的线与我的平面相交的 Z 位置。
地形本身存储为二维数组中的四边形(索引是坐标,我只存储高度)并且我使用以下代码:
(它使用从左下角到右下角和左上角的向量的叉积)
function getTerrainHeight(float x, float y) {
int ix = (int)x;
int iy = (int)y;
Vector3 V1 = new Vector3(ix,iy,heights[ix][iy]);
Vector3 V2 = new Vector3(ix+1, iy, heights[ix + 1][iy]);
Vector3 V3 = new Vector3(ix, iy+1, heights[ix][iy+1]);
if ((x-ix) + (y-iy) > 1)
{
V1 = new Vector3(ix + 1, iy + 1, heights[ix + 1][iy + 1]);
}
Vector3 cross = Vector3.Cross(V2-V1,V3-V1);
return (cross.X * (x - ix) + cross.Y * (y - iy)) / -cross.Z + heights[ix][iy];
}
这有点工作,但有一些不匹配,当我越过地形时,总会有一些高度低于应有的凹痕。有人知道出了什么问题吗?