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

[Java3Djp:02006] Re: 物体の形状変化?



名古屋商科大学の徳永というものです。

ちょうど今作っているプログラムと関連しているところなので、
僭越ながら発言させてもらいます。

> > Morphingによる2つの物体間をスケジュールで変化させることは
> > なんとか出来たのですがここからどうにかできることなのでしょ
> > うか、それとも全然違ったやり方なのでしょうか?
> 
> Morph はある形状から他の形状への変化をスムースに行うための Node です。
> ランダムな形状変化には適しません。
> 
> テストしてませんが、ランダムに形状を変化させるなら 
> Shape3D の setCapability() で ALLOW_GEOMETRY_READ をセットしておき、
> 実行時に Geometry を入れ換える手法でできるかも知れません。

私がやった方法はまさにこれです。ただし setCapability() で
ALLOW_GEOMETRY_WRITE もセットしています。

また、読み書きする Geometry オブジェクトに対しては、座標の値を変更するので、
setCapability() で ALLOW_COORDINATE_READ と ALLOW_COORDINATE_WRITE を
セットしました。

#より正確には、私は Geometry に BY_REFERENCE モードを使ったので、
#ALLOW_REF_DATE_WRITE をセットしました。

その後、Behavior の processStimulus() もしくは Thread の run() の中など
で getGeomtry() した Geometry オブジェクトに対して、setCoordinate() で
座標を書き換え、setGeometry() で戻せば、物体の形状が実行時に変えら
れるはずです。


ちなみに、Java3D API Collateral 
http://java.sun.com/products/java-media/3D/collateral/
の examples の Animation/ParticleApp にも Geometry を変更する例が
載っています。


この例では、GeometryUpdater というインターフェースが使われています。
このインターフェースは GeometryArray クラスの updateData() メソッドの
引数として呼ばれています。従って、オブジェクト指向的には、物体の形状
変形する部分(座標の変更など)を GeometryUpdater インターフェースで記述
し、それを updateData() から呼ぶのが良い方法ではないかと思います。

もっと良い方法をご存じの方がおられましたら、お教えください。


                                      +----------------------------------+
                                      | 徳永 健一 (TOKUNAGA Ken-ichi)    |
                                      | 名古屋商科大学経営情報学部       |
                                      | email:tkenichi@xxxxxxxxxxx       |
                                      +----------------------------------+




------------------------------------------------------------------------
      ★あなたのホームページに“最新ニュース”をお届け!!      
         http://ap.infoseek.co.jp/ticker2.html