[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Java3Djp:02038] Re: Transform3D.rotX() について
------------------------- infoseek ML Sponsor --------------------------
■■■■■■■■ キャッシングならキャッシュワン ■■■■■■■■■
┏━━┓┏1.入会金・年会費・ATM手数料一切不要!━━━━━━━━┓
<特徴>┃2.実質年率15.0〜18.0% 1万円からのキャッシング ┃
┗━━┛┗3.【今なら5万円商品券も当る!10月1日〜11月30日まで 】━┛
東京三菱キャッシュワン ⇒ http://www.p-advg.com/?bid=11321
------------------------------------------------------------------------
えんどうです。
> 1. t3dXtrans.setTranslation(new Vector3d(1.0,0.0,0.0));
> 2. t3dZrot.rotZ(Math.PI/4.0);
> 3. t3dZrot.mul(t3dXtrans);
> 4. t3d2.mul(t3dZrot); ←t3d2がnew直後なのであまり意味無いです。
> 5. tg2.setTransform(t3d2);
これ 4. は不要で、5. で tg2.setTranslation(t3dZrot) とやっても
全く同じだと思います。
> 3. まず、t3dXtrans により、tg2のローカル座標系が上位座標系である
> tg1のローカル座標上の(1.0, 0.0, 0.0)の位置へ移動する。
> いまはtg1とワールド座標系は同一なので、ワールド座標系表示の
> (1.0, 0.0, 0.0)ベクトル方向へ1.0移動する。
ええと、t3dXtrans.setTranslation(new Vector3d(1.0,0.0,0.0)); の時点では
まだ TransformGroup に対して何の操作も加えられていませんので、
x方向への移動量が1.0な行列ができるだけです。
> 4. 次にt3dZrotにより、tg2がtg1のz軸(ワールド座標表示で原点における
> (0.0, 0.0, 1.0)ベクトル)まわりにPI/4回転する。原点を中心に公転するイ
> メージです
t3dZrot に対して t3dXtrans を乗算するのですから、それは間違いです。
簡略化のため t1, t2 として書いてみました。
import javax.media.j3d.Transform3D;
import javax.vecmath.Vector3d;
public class T3DTest
{
public static void main(String[] args)
{
Transform3D t1 = new Transform3D();
System.out.println(t1); // 初期状態を見ておく
t1.setTranslation(new Vector3d(1.0, 0.0, 0.0));
System.out.println(t1); // t1のX軸移動
Transform3D t2 = new Transform3D();
t2.rotZ(Math.PI/4.0);
System.out.println(t2); // t2の回転
t2.mul(t1);
System.out.println(t2); // 乗算
}
}
実行結果はこうです。
1.0, 0.0, 0.0, 0.0 // 初期状態
0.0, 1.0, 0.0, 0.0
0.0, 0.0, 1.0, 0.0
0.0, 0.0, 0.0, 1.0
1.0, 0.0, 0.0, 1.0 // 移動(t1)
0.0, 1.0, 0.0, 0.0
0.0, 0.0, 1.0, 0.0
0.0, 0.0, 0.0, 1.0
0.7071067811865476, -0.7071067811865475, 0.0, 0.0 // 回転(t2)
0.7071067811865475, 0.7071067811865476, 0.0, 0.0
0.0, 0.0, 1.0, 0.0
0.0, 0.0, 0.0, 1.0
0.7071067811865476, -0.7071067811865475, 0.0, 0.7071067811865476 // 乗算(t2)
0.7071067811865475, 0.7071067811865476, 0.0, 0.7071067811865475
0.0, 0.0, 1.0, 0.0
0.0, 0.0, 0.0, 1.0
乗算は、すでに回転している t2 に対して移動を適用するのですから、
t2.mul(t1);
すでに回転した座標系の x 方向に 1.0 移動します。
# 何か変ですか...?
このMLでは定番ですが、
javax.vecmathパッケージ詳説 Java 3Dの数学
http://objectclub.esm.co.jp/vecmath/vecmath.pdf
は読まれましたか...?
--
ENDO Yasuyuki <yasuyuki@xxxxxxxxxxxx>
http://www.javaopen.org/yasuyuki/ (Personal/Japanese Only)
http://www.javaopen.org/jfriends/ (Japanese Only)
------------------------------------------------------------------------
★豪華賞品が呼んでいるぅ〜。『あなたのプロバイダーはなぁ〜にぃ〜?』
http://ap.infoseek.co.jp/navi.html