2

3D カーレース ゲームを実装したいのですが、地形上の任意の点の勾配の大きさと方向を概算する必要があります。

地形データ形式:
- heights[ ][ ]: float の 2D 配列 (メートル単位の高さを表す)
- unit: (i, j) - (i, j+1) 間および (i, j) - ( i+1, j) メートル

元:

3|1311
2|2542 <-- 2D array of heights in meters
1|2231   (unit distance between two cell is, say, 1 meters)
0|1121   (so the highest point of the terrain (x = 1.5 meters, y = 2.5 meters)
  ----      is 5 meters high)
  0123

たとえば、点 (x = 1.75 メートル、y = 2.25 メートル) での勾配の値と方向は?

あなたの補間アルゴリズムは何ですか?

4

1 に答える 1

3

もちろん、x 軸と y 軸の両方に沿って線形補間することもできます。つまり、最初に、実際の x 値よりも低い x 座標と高い x 座標の y 値を 2 回補間します。実際のy値よりも高いy値に対して1回。これにより、高さを取得するために直線的に補間できる 2 つの y 値が得られます。

勾配を見つけるには、その時点での法線を見つける必要があります。法線を見つけるには、同じ方法で補間を行うことができます。パッチの 1 つ (4 つの点 A:(x1,y1)、B:(x2, y1)、C:(x2,y2)、および D:(x1,y2) によって決定される) が与えられると、x1 < x2、y1 < y2 および各ポイントには高さも含まれます)、ポイントの 1 つ、たとえば A での法線は、ベクトル AB と AD の外積によって決定されると言えます。Bでの法線も同様にBC×BAです。

高さの場合と同じ方法で法線を線形補間します。どの形式で勾配が必要かはわかりませんが、勾配の方向を指すベクトルが必要な場合は、S = N - Up で計算されます。ここで、Up は単純にアップ ベクトルです (この例では(0,0,1) Z を up として使用しているため。

別のアプローチは、正方形を三角形、たとえば ABD と BCD に分割することです。三角形全体の法線は、それぞれ AB x AD と BC x BD になります。その場合、三角形の高さを補間する方法については、たとえばhttp://www.cc.gatech.edu/classes/AY2007/cs3451_spring/lininter.pdfをご覧ください。このアプローチでは滑らかな三角形が得られますが、隣接する三角形間の勾配には顕著な違いがあります。

于 2010-01-13T23:34:23.450 に答える