声明: 本博客文章原创类别的均为个人原创,版权所有。转载请注明出处: http://blog.youkuaiyun.com/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.youkuaiyun.com/ml3947,另外本人的个人博客:http://www.wjfxgame.com。