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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值