modelsUnderRay高速化

| コメント(0) | トラックバック(0)

数少ないSW3D制作者にとっては役立つTIPSです。
modelsUnderRay()は遅いとよく言われますが、というか遅いですが
特定のオブジェクトだけを判定対象にすればかなり速くなります。

具体的には、対象外にしたいモデルをグループに入れて、ray-castingする時だけそのグループを削除します。例えばignoreRaysGroupにモデルを入れて、下記のコードを実行するとignoreRaysGroup内のモデルは計算の対象から外れます。

SW3DMember.group("ignoreRaysGroup").removeFromWorld ()
M = SW3DMember.modelsUnderRay (vector (1,2,3), vector (1,0,0))
SW3DMember.group("ignoreRaysGroup").addToWorld ()

対象外グループを作る方法として、3Dソフト上でモデルのユーザー定義プロパティにignoreRays=trueフラグを設定しておくと便利です。
下記のコードで対象外モデルを選別してグループにまとめることができます。

G = SW3DMember.newGroup ("ignoreRaysGroup")
repeat with i=1 to SW3DMember.model.count
if SW3DMember.model[i].userData[1][#ignoreRays] = "true" then
G.addChild (SW3DMember.model[i])
end if
end repeat

modelsUnderRayに限らずmodelUnderLocやmodelsUnderLocについても同様です。
対象外にするポリゴン数に比例して、かなり効果がありますよ。

トラックバック(0)

トラックバックURL: http://www.kyucon.com/cgi-bin/blog/mt-tb.cgi/175

コメントする

アーカイブ