[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