地面データを作って、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
をお読みください。


トップページに戻る