3

Haskell を使用して、OpenGL に与えられる特定の幅の三角形化された正方形の地形を手続き的に生成しようとしています。

実際に手続き的に生成されるのは高さだけですが、これはまったく難しいことではありません。ランダム関数を使用して[[GLfloat]]、高さの行を表す を作成するだけです。

次に、heightsToCoordsを受け取り、各頂点の x、y、z 座標を含む [[GLfloat]]を返す関数もあります。[GLfloat]

したがって、 を呼び出すとheightsToCoords [[0, 1], [1, 0]]、返されます

[0, 0, 0,  
 1, 1, 0,
 0, 1, 1,
 1, 0, 1]

私が抱えている問題は、データを OpenGL に取得することです。OpenGL では、(少なくとも私のセットアップでは) 各面を三角測量する必要があり、私が持っているのはポイントだけです。面を作成する方法がわかりません。

このデータを点のリストから面のリストに変換するにはどうすればよいでしょうか? 法線と頂点の順序を無視します。

4

1 に答える 1

3

GL 側ではdrawElements、ポイントのリストとインデックスのリストを入力として必要とする を使用します。したがって、ポイントのリストにインデックスのリストを生成する方法が問題になります。

元の XZ グリッドを念頭に置いて、グリッドの各セルに 2 つの三角形を描画するという考え方です。したがって、グリッド セルごとに 6 つのインデックスが必要です。Haskell では、次のように記述できます。

concat [[x + width * (y+1), 1 + x + width*y, x + width * y, 
         x + width* (y+1), 1 + x + width * (y+1), 1 + x + width*y] 
         | y <- [0..height-1], x <- [0..width-1]]
于 2014-01-13T15:22:53.490 に答える