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

[Java3Djp:00514] Transform3D#lookAt()の謎



    / 免疫機能研究会の3月のお知らせ                             /
   /   ■ アガリクス活性化多糖体による免疫療法体験談 8編   /
  /   ■ 「免疫機能研究」ニューズレター       7編   /
 /             --------------------------                      /
/ こちらで掲載中です。--->> http://www.meneki.com/           /
--------------------------------------------------------------

遠藤です。
LogomotionとTurtle3Dのソースコードを参考に、ずっと亀を作ってました。

亀はだいたい出来たのですが、
View側のTransformGroupとのバインド方法で悩んでます。

View側のTransformGroupは、SimpleUniverseの場合、
getViewingPlatform().getViewPlatformTransform() メソッドで取得できます。

たとえば x=0、y=0、z=4 への視点移動は、

 Transform3D t3d = new Transform3D();
 t3d.set(new Vector3d(0.0, 0.0, 4.0));
 universe.getViewingPlatform().getViewPlatformTransform().setTransform(t3d);

こんなコードで可能です。ところが、Transform3DのlookAt()メソッドを使って、

 Transform3D t3d = new Transform3D();
 Point3d eye = new Point3d(0.0, 0.0, 4.0);     // 視点座標
 Point3d center = new Point3d(0.0, 0.0, 0.0);  // 注目点座標
 Vector3d upvec = new Vector3d(0.0, 1.0, 0.0); // 視点の上向きベクトル
 t3d.lookAt(eye, center, upvec);
 universe.getViewingPlatform().getViewPlatformTransform().setTransform(t3d);

などとすると set(new Vector3d(0.0, 0.0, 4.0)) とはまったく違う結果になります。

Java 3Dのサンプルコードをgrepしてみましたが lookAt() を使ったものは無いようです。

もう少し研究してみます。
-- 
えんどう やすゆき <yasuyuki@xxxxxxxxxx>
http://www.javaopen.org/jfriends/ (Java互助会ホームページ)