import { MathUtils } from 'three'; import { PerspectiveCamera, CameraHelper } from 'three'; import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls'; export default class Camera { constructor(experience) { this.experience = experience; this.scene = experience.scene; this.canvas = experience.canvas; this.sizes = experience.sizes; this.setInstance(); this.setOrbitControls(); } // 设置透视相机 setInstance() { this.instance = new PerspectiveCamera(45, this.sizes.width / this.sizes.height, 0.1, 200); this.instance.position.set(0,30,25); this.scene.add(this.instance); this.instance.position.z = 10; this.instance.position.x = 0; // 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, 1); this.controls.enableDamping = true; this.controls.minDistance = 20; this.controls.maxDistance = 80; this.controls.maxPolarAngle = MathUtils.degToRad(80); // this.controls.maxPolarAngle = (-Math.PI / 2); } resize() { // 重新计算比例 this.cameraAspect = this.sizes.width / this.sizes.height; this.instance.updateProjectionMatrix(); } update() { this.controls.update(); } destroy() { this.disposeObject(); this.removeObject(); this.resetObject(); } disposeObject() { this.controls.dispose(); } removeObject() { this.scene.remove(this.instance); } resetObject() { this.controls = null; this.instance = null; this.scene = null; this.canvas = null; this.sizes = null; } }