bambooflow Note

ハイトフィールド

最終更新:

bambooflow

- view
メンバー限定 登録/ログイン

ハイトフィールド



ハイトフィールドは、三角メッシュと似ていますが、縦横の分割数と高さのみを持つ立体形状を表現したものです。
ハイト・フィールドは非常に多くの小さな3角形によって凹凸のある面を表現します。

リアルな山や他の地形を簡単に作ることができます。


ビットマップデータを高さマップとして使用


とりあえず面白そうなので作ってみました。


  • 32x32のビットマップファイル




test_heightfield01.zip

ビットマップデータは黒色は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++)みたいなイメージです。
ステップサイズを大きくすると、フィールドのグリッドが細かくなります。
細かくしすぎると、処理が重くなりますので注意してください。


ODEのdemoについているdemo_heightfieldが参考になると思います。
demoの場合、ステップサイズを大きくしすぎるとグラフィック処理がかなりつらくなります。
この場合は、リストを使って表示したほうがよさそうです。


ハイトフィールドの表示は、drawstuffでは、ステップサイズの大きさに限界がありそう。

タグ:

ODE
記事メニュー
目安箱バナー