UNPKG

awv3

Version:
65 lines (57 loc) 1.99 kB
import * as THREE from 'three'; export default class CombinedCamera extends THREE.PerspectiveCamera { constructor(view, options = {}) { super(); options = { fov: 30, aspect: 0, near: 5, far: 100000, target: new THREE.Vector3(0, 0, 0), position: new THREE.Vector3(0, 0, 1000), up: new THREE.Vector3(0, 0, 1), ...options }; this.host = view; this.fov = options.fov; this.aspect = options.aspect; this.near = options.near; this.far = options.far; this.target = options.target; this.lookAt(this.target); this.position.copy(options.position); this.up.copy(options.up); this.updateProjectionMatrix(); this._orthographic = false; this._orthographicCamera = new THREE.OrthographicCamera(-1, 1, 1, -1, 0, 1); } get display() { if (this._orthographic) { var halfTg = Math.tan(this.fov / 2 * THREE.Math.DEG2RAD); var focusDistance = this.target.distanceTo(this.position); var height = halfTg * focusDistance; var camera = this._orthographicCamera; camera.target = this.target; camera.left = -height * this.aspect; camera.right = height * this.aspect; camera.top = height; camera.bottom = -height; camera.near = this.near; camera.far = this.far; camera.position.copy(this.position); camera.up.copy(this.up); camera.lookAt(this.target); camera.updateProjectionMatrix(); camera.updateMatrixWorld(true); return camera; } else return this; } get orthographic() { return this._orthographic; } set orthographic(value) { this._orthographic = value; this.host.invalidate && this.host.invalidate(); } }