javafx PerspectiveCamera
时间: 2024-08-12 07:09:00 浏览: 69
`PerspectiveCamera`是JavaFX中的一个类,它用于创建透视图相机,常用于3D场景中的渲染。在JavaFX 3D中,摄像机(Camera)提供了观察场景的角度和位置,`PerspectiveCamera`则提供了基于透视投影的视图,这种投影方式模拟了人类眼睛的视觉效果,物体离相机越近,看起来越大。
`PerspectiveCamera`的主要属性包括:
- `fovy` (Field of View Y):垂直视角范围,单位为度。
- `aspectRatio`:屏幕宽度与高度的比例。
- `nearClip`:近裁剪平面,通常设置为0.1到1之间。
- `farClip`:远裁剪平面,定义了可见空间的尽头。
创建`PerspectiveCamera`的基本步骤如下:
```java
import javafx.scene.paint.Color;
import javafx.scene.transform.Rotate;
import javafx.scene.transform.Translate;
import javafx.scene.paint.image.WritableImage;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.camera.PerspectiveCamera;
import javafx.scene.shape.Box;
import javafx.stage.Stage;
// ...
Stage stage = new Stage();
Canvas canvas = new Canvas(800, 600);
GraphicsContext gc = canvas.getGraphicsContext2D();
// 创建透视摄像机
PerspectiveCamera camera = new PerspectiveCamera();
camera.setTranslateZ(-10); // 设置相机位置
camera.setFieldOfView(45); // 设置视角
camera.setNearClip(0.1); // 设置近裁剪平面
camera.setFarClip(100); // 设置远裁剪平面
// 渲染场景
Box box = new Box(100, 100, 100);
box.setTranslateX(0);
box.setTranslateY(0);
box.setTranslateZ(0);
box.setMaterial(Color.BLUE);
stage.setScene(new Scene(canvas));
stage.show();
gc.setFill(Color.WHITE);
gc.fillRect(0, 0, canvas.getWidth(), canvas.getHeight());
// 渲染相机视图
gc.setCamera(camera);
gc.clearRect(0, 0, canvas.getWidth(), canvas.getHeight());
gc.translate(0, 0, -100); // 在画布上移动相机
gc.rotate(0, 1, 0, 45); // 可以旋转相机
gc.rotate(1, 0, 0, 90); // 可以绕Y轴旋转
box.draw();
// 更新舞台
stage.setWidth(canvas.getWidth());
stage.setHeight(canvas.getHeight());
```
阅读全文