0

コードでクワッドで構成される仮想地形を生成しました。現在、特定のポイントでの地形の高さを見つけようとしています。明確にするために: X 方向と Y 方向に幅と深さ、Z 方向に高さを持つ地形があります。特定の X と Y の線が自分の平面と交差する Z を知りたいです。

地形自体は 2 次元配列のクワッドとして格納され (インデックスは座標で、高さを格納するだけです)、次のコードを使用しています。

(左下から右下、左上の点までのベクトルの外積を使用します)

    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