[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Java3Djp:01350] Re: Traditional Camera View Model
筒口です.
: えんどうです。
ご回答,ありがとうございます.
: > Transform3D t3d_camera = new Transform3D();
: > t3d_camera.frustum(left, right, bottom, top, near, far);
: > t3d_camera.lookAt( eye/*Point3d*/, to/*Point3d*/, up/*Vector3d*/ );
:
: Transform3D#lookAt() の後に Transform3D#invert() を必ず実行しましょう。
これは知りませんでした.ありがとうございます.
さて,つけてみたのですが,何も表示されない(まっ暗な)状態に
なってしまいました.以下は,前回添えたサンプルのビューを設定する
部分ですが,OpenGL のように,Transform3D#frustum() と
Transform3D#lookAt() の間に何か実行しなければならないのでしょうか?
単純に,変換は累積されるものと考えておりましたが...
自分でも,もう少し調べてみます.
public BranchGroup viewRoot() {
BranchGroup view_root = new BranchGroup(); // returns this.
View view = new View();
ViewPlatform view_platform = new ViewPlatform();
view.attachViewPlatform( view_platform );
view.addCanvas3D( new Canvas3D( null ) );
view.setPhysicalBody( new PhysicalBody() );
view.setPhysicalEnvironment( new PhysicalEnvironment() );
//view.setCompatibilityModeEnable(true); // <- 必要?
TransformGroup tfg_camera = new TransformGroup();
Transform3D t3d_camera = new Transform3D();
t3d_camera.frustum(-2.375814, 2.868131, -2.742890, 1.190069,
4.799551, 23.916407+30.0 );
t3d_camera.lookAt(new Point3d(2.375814, 2.742890, 4.799551),
new Point3d(2.375814, 2.742890, 0.000000),
new Vector3d(0.0, 1.0, 0.0) );
t3d_camera.invert(); // 逆行列を作成する
tfg_camera.setTransform( t3d_camera );
tfg_camera.addChild( view_platform );
// view-BranchGraph にカメラ行列変換をぶら下げる
view_root.addChild( tfg_camera );
// Canvas3D をすでに作成されたフレームにバインドする
this.add( view.getCanvas3D(0), "Center" );
return view_root;
}