« トライジンオープニングBタイプ | Main | USAゴジラ »

2006.08.01

HSPで3Dゲームその30

結局、移動ルーチンを作り直すことにした。
mhgファイルが4Mというのはやはりでかすぎる。
具体的には1024*1024個の高さデータがあるmhgファイルを64*64個に減らすのである。
なんで64*64かというと、地形データのメッシュの分割が64*64になっているからだ。

ここで高さのデータをXファイルからもらえばいいのだが、テキストデータの扱い方が良く解ってないのと、Xファイルの構造をちゃんと把握してないので、座標データのロケーションをどう取得すればいいのか解らないのと、更に、xファイルのデータが小数点付きの実数でしかも扱いが数値データじゃなくて文字データであるので、ややこしいからやらない。ふう。

さてそうすると、である。
ロボ子の座標とmhgファイルのデータが1:1で対応しなくなる訳だから、ロボ子の高さデータを算出しなくてはいけない。
座標からX地点の高さを算出するとなると、当然三角関数だろう、と思って、前は嫌だったのだ。
しかし考え直した。
腹を決めて三角関数を使うことに…した訳ではない。
計算は加減乗除で済ませたい。
で、よ~~~~っく考えたら、どうやら加減乗除だけでいけそうだ。

問題を単純化して考えねばならない。
四つの点A(0,0)B(1,0)C(0,1)D(1,1)を頂点とする正方形のエリアの中にロボ子がいて、ロボ子のデータを出さなくてはならないとしよう。点ABCDの高さは解っている。
ちなみにポリゴンは平面で構成されているので、高さの違う四つの点で出来た四角形は2枚の三角形に分割される。この場合ΔABCとΔBDCの二枚の直角三角形になる。
さて、まずロボ子がどちらの三角形のエリアにいるのか?
ここでベクトルと平面の当たり判定とかベクトルの外積とかを使わなくちゃならないのか、と思って躊躇してたんであるが、よく考えたらここは足し算で済むのである。

考え付いた俺は偉い!と思ってるんだが、きっともう誰かが考え付いてるんだろうな(^^;

さて。足し算でどうやってロボ子がどちらの三角形に居るか解るのか?
具体的に考えてみよう。
例えばロボ子の座標が(0.1,0.1)だとする。この場合ロボ子はΔABCの中に居る事になる。
ロボ子が(0.9,0.9)だとするとΔBDCの中にいる。
(0.5,0.5)だとすると、二枚の三角形の接する辺BC上に居る事になる。辺BC上にいる時は高さの算出はどちらの三角形で行っても良い。
辺BCに近い点の辺りを見てみよう。
(0.4,0.5)だとΔABCにいる。(0.6,0.5)だとΔBDCにいる。
もうお解かりだろう。
X座標とZ座標を足して、正方形の一辺の長さより小さいか大きいかでどちらの三角形に居るか解るのである。
本当である。色々点を取って試してみるといい。図に描いてみると解りやすい。
あ、ちなみに正方形じゃないと出来ない(^^;
ま、普通座標のエリアって正方形だから良いよね。

と、こうしてどちらの三角形にいるか解ればあとは簡単。
各頂点の高さが解っているんだから、X方向とZ方向の傾きが解る。掛け算と割り算で高さが求められるのである。中学生の数学で大丈夫である。良かった(^^;
え?具体的にどうするのか?
説明が面倒なので式を書こう。理由はたぶん誰でも解る。中学生以上なら。
ΔABCの場合
(点Bの高さー点Aの高さ)*(ロボ子のX座標/一辺の長さ)+(点Cの高さー点Aの高さ)*(ロボ子のZ座標/一辺の長さ)=ロボ子の居る座標の高さ
になる。

で、こうして移動ルーチンを書き直しているのだが、ついでにプログラムの構成とかも直しているので、実はまだ動作を確認していない(^O^;
うーむむ。
大丈夫なのか?

|

« トライジンオープニングBタイプ | Main | USAゴジラ »

Comments

Post a comment



(Not displayed with comment.)




TrackBack


Listed below are links to weblogs that reference HSPで3Dゲームその30:

« トライジンオープニングBタイプ | Main | USAゴジラ »