[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Java3Djp:01469] Re: 衝突直前と衝突直後について



‥‥・・━━━●    2000年ダイエーのお中元    ●━━━・・‥‥
   ハワイ旅行・商品券が当たる!!    全国無料配達承り中
    さらに!! d´clubサポーター(登録・会費無料)なら
       早期割引10%OFF  7月3日(月)まで
━━   http://www.daiei.co.jp/ochugen2000/ad/easyml.html   ━━━
-PR------------------------------------------------------------------PR


えんどうです。

>   目線をある一定量移動させ、もし自分以外の物体に衝突したら、目線を衝突
> 直前の座標に戻したいのですが、目線を変更するためのGUIのスレッドとJava3D
> が衝突を判定するスレッドが別であるためか、すぐに衝突を検出できずに目線
> を移動できてしまいます。
> 
>   えんどうさんの、「Java 3D プログラミングガイド (凍結版) 」にあるサンプル
> (http://www.javaopen.org/j3dbook/examples/CollisionTest/CollisionTest.java)
> もどうようの動きを見せ、簡単に壁を突き抜けてしまいます。

つきぬけてましたか^^;

>   みなさんはこのような場合、どのように対処していらっしゃるのでしょうか?

Java 3Dの衝突判定は、
WakeupOnCollisionEnter (衝突した)、
WakeupOnCollisionMovement (衝突しながら移動した)、
WakeupOnCallisionExit (衝突していたものが離れた) 
の3つなのですが、
最初のものが検出されたとしても、
最後のものが必ずしも検出されない場合があるとか、
けっこう扱いがむずかしいです。

このサンプルでは WakeupOnCollisionMovement だけを使っているのですが、
本当は3つとも使って別の動作をさせた方が良いかも知れません。

また、BoundingBox を使う荒い判定と、
Geometry を使う細かい判定があるのですが、
BoundingBox を使うと衝突判定が甘すぎ、
Geometry を使うとパフォーマンスが悪くなるなどの問題もあります。

>   やはり、衝突判定用の境界群を自前で管理しておき(最適化できるように工夫は
> 必要でしょうが)、目線を移動させるたびに自分で判定するのでしょうか?

私も経験不足なのでよくわかりませんが、
空間をマークするようなことが必要なのだと思います。

>   ま、そうしたところで interpolatorを利用して運動している物体との衝突判定
> はうまく行かないような気もしますが...。

衝突判定や Interpolator が増えると、
かなりパフォーマンスが悪くなるという印象があります。
ある程度あきらめが必要なんでしょうね・・

そういえば Sun の Java 3D 開発チームが作ったこの手のサンプル、
Maze Demo は公開されたんでしょうか?
この Maze Demo で衝突判定関係の技法が
いろいろわかるのではないかと期待してるんですが..

-- 
ENDO Yasuyuki <yasuyuki@xxxxxxxxxxxx>
http://www.javaopen.org/jfriends/index.html (Japanese Only)