ハイトフィールド
ハイトフィールドは、三角メッシュと似ていますが、縦横の分割数と高さのみを持つ立体形状を表現したものです。
ハイト・フィールドは非常に多くの小さな3角形によって凹凸のある面を表現します。
ハイト・フィールドは非常に多くの小さな3角形によって凹凸のある面を表現します。
リアルな山や他の地形を簡単に作ることができます。
ビットマップデータを高さマップとして使用
とりあえず面白そうなので作ってみました。
- 32x32のビットマップファイル



ビットマップデータは黒色は0で、白色は255となっています。
その値をそのまま高さのパラメータに使用しています。
もっとグラデーションがかった図であれば、なだらかな斜面になると思います。
その値をそのまま高さのパラメータに使用しています。
もっとグラデーションがかった図であれば、なだらかな斜面になると思います。
一応、衝突が起こるかどうかを試すためにボールを落としています。
メモ(まとめ中)
ハイトフィールドの地面を作成
dHeightfiledDataID heightid = dGeamHeightfieldDataCreate();
dGeomHeightfieldDataBuildCallback([] heightid, NULL, heightfield_callback, 4.0, // width フィールドの幅 8.0, // depth フィールドの奥行き 15, // width step size 幅方向ステップサイズ 31, // depth step size 奥行き方向ステップサイズ 1.0, // scale 0.0, // 0.0, // 0 // );
ステップサイズの値を大きくすると、heightfield_callback関数の引数の値がそのステップサイズまで変化します。
for (int x=0; x<width_step; x++)みたいなイメージです。
ステップサイズを大きくすると、フィールドのグリッドが細かくなります。
細かくしすぎると、処理が重くなりますので注意してください。
for (int x=0; x<width_step; x++)みたいなイメージです。
ステップサイズを大きくすると、フィールドのグリッドが細かくなります。
細かくしすぎると、処理が重くなりますので注意してください。
ODEのdemoについているdemo_heightfieldが参考になると思います。
demoの場合、ステップサイズを大きくしすぎるとグラフィック処理がかなりつらくなります。
この場合は、リストを使って表示したほうがよさそうです。
demoの場合、ステップサイズを大きくしすぎるとグラフィック処理がかなりつらくなります。
この場合は、リストを使って表示したほうがよさそうです。
ハイトフィールドの表示は、drawstuffでは、ステップサイズの大きさに限界がありそう。