0

我在我的代码中生成了一个由四边形组成的虚拟地形,我现在正试图在某个点找到地形的高度。澄清一下:我有一个地形,在 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];
}

这有点工作,但有一些不匹配,当我越过地形时,总会有一些高度低于应有的凹痕。有人知道出了什么问题吗?

4

0 回答 0