キーワードは「ピッキング」!

やったー!!
キター!!
Quitar!!
(黙れ・・)

ついに地形の高さに沿ってキャラクターを
歩かせることに成功しました!w

なんかほとんどの参考書とかHPとかでは
キャラの、地形上のY座標を割り出すのに
変数用意して、三角ポリゴン割り出して、
その座標格納して、面上のY座標をさらに
計算によって割り出して・・・とか
無駄なことやってるんですが、
RMの機能をいろいろ模索していたら
「Pick」というものを発見し、
それが結局、非常に効率的な方法だと
わかったのです。

「Pick」のほかに、それに類するもので
「RayPick」があります。
それを今回使うことにしました。

RayPickは、シーンフレーム(ワールド)上の
座標を指定すると、その座標から
あらかじめ指定された向きに光線(たとえ)
を放ちます。
それと交差するポリゴン面の情報を
Direct3DRMPick2Array型で返してきます。
そして、それにvPositionを問いただせば
座標がわかるというものです。

毎シーンごとにRayの座標を
キャラクターのX、Z、そしてY+10(適当w)
に設定し、姿勢はベクトル型で(0,-1,0)に
設定(下向きです。左からx,y,z軸)し、
LandscapeからRayPickを使い、
そのRayとLandscapeの直交する面を求めれば
ハイ、終了。

こんなにも簡単な、すばらしい関数が
存在しているとは・・・
なんでもっと早く気づかなかったんだ;;
今まで数学に励んでいたのはなんだったんだ;
(別にたいした労力かけたわけじゃないが)

ただ、なんだか知らんがこのRayPickって、
ひとつ前のシーンより低いY座標が
割り出されたときにちゃんと値が下がりません。
なので、重力計算っぽいものが要ります。
つまり、常に下に向かって押し付けるのです。
追記:このY座標が下がらないのは
   実は影フレームにRayPickがあたったからでした。
   間違った説明すみません。

今回はそれについては実に簡素な方法を
とることにしました。
RayPickで求めたY座標から1だけ引いてると
ある値で必ずとまります。それは、
キャラのY座標が地面に直交するからです。
この性質を利用します。
追記:実はこれも間違い。
   理由は上の追記と同じ。

つまり、毎回、Y座標を-1してるだけで
いいのです。

実際に実行してみると、なんだかマリオ64を
思い出させる動きをします。
キャラが、乗っていた物体から離れる(落ちる)
と、一定の速度で下にキャラが引っ張られます。
これには結構感心しました。
何も考えずに重力計算が出来たような気に
なれますw

ああ・・・あの4000円の本とか
3Dの数学書(1万2000円)とか
買わなくても一人で出来た・・
衝動買いしなくて良かった、ホント。
では、今日はこの辺で。
明日あたり、DirectDrawのお話が
聞けるかもしれませんよ。

(でもな~、テニスとかバイオリンとか、
 習い事も絶えないんだよな~・・・
 あ~忙しい。)

You may also like...

コメントを残す

メールアドレスが公開されることはありません。