地面データを作って、Easy3D で表示する方法
このページでは、BMPファイルから、地面データを作成する方法を、説明します。
パレットのない、24ビットのBMPしか、使用できませんので、注意してください。
3枚とも、同じサイズのBMPでないと、使用できません。
現バージョンでは、3枚のBMPから、地面を生成します。
(今後、増えるかもしれません。)
一枚目は、地面の座標を決めるために使用します。
二枚目は、道の位置を決めるために使用します。
三枚目は、川の位置を決めるために使用します。
3枚のBMPの例を、下に示します。
一枚目、座標データ用
二枚目、道データ用
三枚目、川データ用
まず、一枚目のBMP(赤いBMP)から説明します。
座標のデータの元となるわけですが、
地面を上から見た図と、考えてください。
横軸方向が、X座標、
縦軸方向が、Z座標となります。
分かりやすく、格子の線を入れた図を、下に示します。
(実際のデータには、格子は入れないでください。)
x、zの格子の本数は、E3DLoadGroundBMP関数に渡す、divx, divz で指定します。
データの大きさは、E3DLoadGroundBMP関数に渡す、maxx, maxzで指定します。
今、上の図のように、x方向の13番目の線と、z方向の8番目の線の交わる点は、
座標に直すと、
(x,y,z) = ( (maxx / divx) * 13, Y, (maxz / divz ) * 8 )
となります。
さて、ここで、まだ説明していない、Y座標の値ですが、
格子の交点の、色の濃淡から、高さを計算します。
濃い色は、Y座標が高く、薄い色は、Y座標が低くなるように、計算されます。
色の濃淡のデータであれば、赤色でなくても、どんな色でもOKです。
一番濃い色の部分の高さは、E3DLoadGroundBMP関数に渡す、maxheightで指定します。
ここまで、分かれば、あとの2枚も同じです。
2枚目の道データ用のBMPも、X,Zの格子の交点の色を読みとって、
そこに、濃い色が付いていれば、道になります。
3枚目の川データ用のBMPも、X,Zの格子の交点の色を読みとって、
そこに、濃い色が付いていれば、川になります。
ところで、どうやって、普通の地面と、道と川を表示するのか、
疑問に思うかもしれませんので、
一応、説明しておきます。
下の図を見てください。
上の絵は、地面のテクスチャーとして使用します。
縦横、2こずつ分割して、4つの領域として使用します。
普通の地面には、緑っぽい部分が貼られるようにし、
道には、茶色、
川には、水色の部分が、貼られるように表示します。
なんとも、いんちきくさい方法ですが(笑)。。
このテクスチャーファイル名は、E3DLoadGroundBMP関数に渡す、filename4で指定します。
サンプルとして、地面上を動くためのスクリプトを、作ってみました。
Easy3D For HSPのzipの中に、
e3dhsp_ground.as というサンプルを入れました。
下の図は、その、実行画面です。
同じ地面データを、縦横2個ずつ並べてみました。
矢印キーで移動できます。
ver1.0.1.0で、地面とのあたり判定が、つきました。
ver1.0.1.2で、ビルボードの木が追加されました。
e3dhsp_ground.asで使用されている、モロ星人のデータは、naosukeAniさんの作を加工したものです。
モロは、版権ものです。著作権は、原作者に帰属します。
プログラムしないでも、地面データを確認できるように、
Ground Viewerを作りました。
Ground Viewerのページをご覧ください。
移動可能領域を設定したい場合には、
http://www5d.biglobe.ne.jp/~ochikko/HSPde3DKakuge/nyuumon/wallfrombmp.htm
をお読みください。
トップページに戻る