关于Java3d视点和观察方向设置的研究

  在网上查阅了很多资料,发现很多资料都只是介绍了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);

 

  希望我的一些发现对大家有帮助吧!

你可能感兴趣的:(关于Java3d视点和观察方向设置的研究)