ModelsUnderLocを ModelsUnderRayの代わりに使えるという話の前置きデモ。Locも Rayも返値は同じ、内部的な処理もおそらく同じ。与える変数が違うだけで基本的には同じコマンド。だから、ModelsUnderLocの代わりに ModelsUnderRayが使えるし、その逆もありなのではないかと。Locの代わりとしての Rayにそれほどの恩恵は無いかもしれないけど、色々と処理がかさばる Rayの代わりに Locが使える。今回は、RayとLocが本当に同じ値を返すかのテスト。
ソースは下記のイメージ。カメラの向いている方向に Rayを飛ばすのと、スプライトのセンターのLocを調べるのは同じはず。ただ、スプライトのサイズ(カメラの矩形)が真ん中を割り出せないと、RayとLocの値が同じにならない。だから奇数の長さじゃないと駄目です。すると、RayもLocもまったく同じ値が返ってくる。デモでは1秒ごとにレイを飛ばしてる。
次回は、Rayの代わりに Locがどれだけ使えるのか検証。次回がいつになるのかは分からないけど。。。(結末から言うと、RayもLocも基本的な処理速度はほとんど同じ。ただ、Rayで#modelsListを選んだりするとRayの処理がグッと重たくなる。Rayで判別したいモデルをmodelsListで選ぶよりも、カメラのRootNodeに入れて Locする方がウンと速くなるわけです。RayはデフォルトだとWorldにあるモデルにレイを飛ばす、#modelsListでモデルを選別することもできる。LocはカメラのRootNodeにあるモデルだけにレイを飛ばす。この違いが結構おもしろくて、使えるわけ。)
psp = sprite(me.spritenum) pmem = psp.member pcam = psp.camera(1) t = pCam.getworldtransform() r = pcam.rect Ray = pMem. modelsUnderRay( t.position, -t.zAxis, 1, #detailed) Loc = pcam. modelsUnderLoc( point(r.width /2, r.height/2), 1 , #detailed)
Trackbacks/Pingbacks (Trackback URL)
Comments
-
wtnv said June 14, 2006 13:03
これは面白い情報ですね。似非物理シミュレーション(浮遊飛行とか)を実行する際にModelsUnderRayを使っていたんですが、UnderLocのほうが低負荷になる可能性があるってことなんですね。ふむふむ…。
-
アイザワ said June 14, 2006 20:40
場合によっては、ですね。
レイを当てたいモデルがワールドになくて、階層構造を変えずにレイを当てたい場合に使えたりします。 不可に関しては、対象モデルの数が同じなら RayもLocも同じですが、#modelsListを指定したRayの場合はグッと落ちます。オーサリング状況によっては、ワールドにモデルを出し入れして Rayの処理速度を上げるよりも、カメラのRootNodeに指定する方が都合が良かったりするかもしれません。