import { PerspectiveCamera, CameraHelper } from 'three';
|
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls';
|
|
|
export default class Camera {
|
constructor(experience) {
|
this.experience = experience;
|
this.scene = this.experience.scene;
|
this.canvas = this.experience.canvas;
|
this.sizes = this.experience.sizes;
|
this.setInstance();
|
this.setOrbitControls();
|
|
}
|
|
// 设置透视相机
|
setInstance() {
|
this.instance = new PerspectiveCamera(75,this.sizes.width / this.sizes.height, 0.1, 1000);
|
this.instance.position.set(0, 5, 2);
|
this.scene.add(this.instance);
|
const help = new CameraHelper(this.instance);
|
this.scene.add(help);
|
}
|
|
setOrbitControls() {
|
this.controls = new OrbitControls(this.instance, this.canvas);
|
this.controls.target.set(0, 0, 0);
|
}
|
|
resize() {
|
// 重新计算比例
|
this.cameraAspect = (this.sizes.width / this.sizes.height) * this.frustrum;
|
this.instance.left = -this.cameraAspect / 2;
|
this.instance.right = this.cameraAspect / 2;
|
this.instance.top = this.frustrum / 2;
|
this.instance.bottom = -this.frustrum / 2;
|
this.instance.updateProjectionMatrix();
|
}
|
|
|
update() {
|
this.controls.update();
|
}
|
}
|