在网上查阅了很多资料,发现很多资料都只是介绍了Java3d的视点设置,并没有介绍观察方向的设置。有一些资料只是简述观察方向默认是Z轴的递减方向。
官方文档提供的设置视点是这样的:
Canvas3D canvas = new Canvas3D(SimpleUniverse.getPreferredConfiguration());
SimpleUniverse u = new SimpleUniverse(canvas);
u.getViewingPlatform().setNominalViewingTransform(); //设置观察点
这是默认的视点,观察方向默认是Z轴的递减方向
如果要设置视点位置,应该这么写
Canvas3D canvas = new Canvas3D(SimpleUniverse.getPreferredConfiguration());
Viewer viewer = new Viewer(canvas);
Vector3d viewpoint = new Vector3d(0.0, 0.0, 10.0);
//初始观察点位置
Transform3D t = new Transform3D();
t.set(viewpoint);
ViewingPlatform v = new ViewingPlatform( );
v.getViewPlatformTransform().setTransform(t);
SimpleUniverse u = new SimpleUniverse(v, viewer);
这样就可以设置视点的位置,位置为(0.0,0.0,10.0)
简单的视点位置变换还不能满足我们的要求,如果要设置观察方向呢?比方说,我要设置从高10米处,45度俯视观察。那代码可以这么写
Canvas3D canvas = new Canvas3D(SimpleUniverse.getPreferredConfiguration());
Viewer viewer = new Viewer(canvas);
Vector3d viewpoint = new Vector3d(0.0, 10.0, 0.0);
//初始观察点位置
Transform3D t = new Transform3D();
t.set(viewpoint);
Transform3D rot = new Transform3D();
rot.rotX(-Math.PI / 4); //观察点方向设置,此方向为俯视45度
t.mul(rot); //将平移变换的矩阵和旋转变换的矩阵相乘
ViewingPlatform v = new ViewingPlatform( );
v.getViewPlatformTransform().setTransform(t);
SimpleUniverse u = new SimpleUniverse(v, viewer);
希望我的一些发现对大家有帮助吧!