コードでクワッドで構成される仮想地形を生成しました。現在、特定のポイントでの地形の高さを見つけようとしています。明確にするために: 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];
}
これはちょっと機能しますが、いくつかの不一致があります。地形を越えると、高さが本来よりも低い場所に常にいくつかのへこみがあります。何が問題なのか誰か知っていますか?