[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;
}