JavaFX 3D一部分介绍(2) Camera

JavaFX 3D部分介绍(2) Camera

  声明:   本博客文章原创类别的均为个人原创,版权所有。转载请注明出处: http://blog.csdn.net/ml3947,另外本人的个人博客:http://www.wjfxgame.com

  

   本篇文章将紧接着上一篇进行JavaFX 3D API的讲解。

   JavaFX 3D Graphics API中,Camera是一个Node,并且可以被直接添加到JavaFX的Scene中。我们可以在3D UI布局中随意的移动Camera,这将不同于2D布局。


   首先,Camera的坐标体系是这样的:

   X轴指向右边,Y轴指向下面,Z轴指向屏幕远离观察者的方向。


   我们可以创建一个Camera,然后添加到场景中:

   

     Camera camera = new PerspectiveCamera(true);
     scene.setCamera(camera);

   添加到场景:

  

     Group cameraGroup = new Group();
     cameraGroup.getChildren().add(camera);
     root.getChildren().add(cameraGroup);
  

   旋转Camera,然后移动CameraGroup:

  

     camera.rotate(45);
     cameraGroup.setTranslateZ(-75);
  

   Perspective Camera

   JavaFX提供透视相机来渲染3D场景,并为透视投影定义了一个值。我们可以通过修改fieldOfView来改变这个值。

  

  创建Perspective Camera的构造函数:

 

    PerspectiveCamera()

    erspectiveCamera(boolean fixedEyeAtCameraZero)

  后一个构造函数是在JavaFX8中新增的,我们可以在初始化的时候指定一个fixedEyeAtCameraZero值,这个可以让

场景渲染的像是在3D环境里。

 

  所以如果是开发3D项目,我们应该使用PerspectiveCamera(true)来初始化,在2D中使用false。


  下面来介绍几个常用的方法:

  setFieldOfView(double value);

  setNearClip(double value);

  setFarClip(double value);

 
  第一个是调整视野的,主要是一个角度问题。后面两个是调整裁剪面的,主要是限制渲染的距离的范围,可以极大
的提升性能。

  
 JavaFX中的Y坐标
 
 很多3D场景中,Y轴是朝上的。然后在JavaFX 3D中,Y轴是朝下的。如果你需要Y轴朝上,我们可以创建一个xform
节点加入到根节点中。

  如下所示:
  
  root3D = new Xform();
  root3D.rx.setAngle(180.0);
  root.getChildren().add(root3D);
  root3D.getChildren().add(...); // 添加你所有的3D物体

  当然,也可以把你的Camera加入到xform中,如下所示:
  
  Camera camera = new PerspectiveCamera(true);
  Xform cameraXform = new Xform();
  root.getChildren().add(cameraXform);
  cameraXform.getChildren().add(camera);
  cameraXform.rz.setAngle(180.0);

  还有一中更好的方法是,对Camera做一个角度的旋转,如下所示:

  
  Camera camera = new PerspectiveCamera(true);
  Xform cameraXform = new Xform();
  root.getChildren().add(cameraXform);
  cameraXform.getChildren().add(camera);
  Rotate rz = new Rotate(180.0, Rotate.Z_AXIS);
  camera.getTransforms().add(rz);

  由此来保证我们使用JavaFX 3D的时候,坐标系如其他的3D类引擎和工具保持一致。


  本博客文章原创类别的均为个人原创,版权所有。转载请注明出处: http://blog.csdn.net/ml3947,另外本人的个人博客:http://www.wjfxgame.com