UNPKG

polygonjs-engine

Version:

node-based webgl 3D engine https://polygonjs.com

117 lines (106 loc) 3.46 kB
/** * Creates an orthographic camera. * * */ import {Constructor} from '../../../types/GlobalTypes'; import {OrthographicCamera} from 'three/src/cameras/OrthographicCamera'; import { TypedThreejsCameraObjNode, BASE_CAMERA_DEFAULT, ThreejsCameraTransformParamConfig, CameraMasterCameraParamConfig, } from './_BaseCamera'; const DEFAULT = { left: -0.5, right: 0.5, top: 0.5, bottom: -0.5, }; import {ParamConfig, NodeParamsConfig} from '../utils/params/ParamsConfig'; import {CameraRenderParamConfig} from './utils/cameras/RenderController'; import {CameraPostProcessParamConfig} from './utils/cameras/PostProcessController'; import {LayerParamConfig} from './utils/LayersController'; import {TransformedParamConfig} from './utils/TransformController'; import {CameraNodeType} from '../../poly/NodeContext'; export function OrthographicCameraObjParamConfigMixin<TBase extends Constructor>(Base: TBase) { return class Mixin extends Base { size = ParamConfig.FLOAT(1); // vertical_size_range = ParamConfig.VECTOR2([-1, -1]); // horizontal_size_range = ParamConfig.VECTOR2([-1, -1]); }; } class OrthographicCameraObjParamConfig extends CameraPostProcessParamConfig( CameraRenderParamConfig( LayerParamConfig( OrthographicCameraObjParamConfigMixin( CameraMasterCameraParamConfig( ThreejsCameraTransformParamConfig( TransformedParamConfig(NodeParamsConfig, {matrixAutoUpdate: true}) ) ) ) ) ) ) {} const ParamsConfig = new OrthographicCameraObjParamConfig(); export class OrthographicCameraObjNode extends TypedThreejsCameraObjNode< OrthographicCamera, OrthographicCameraObjParamConfig > { params_config = ParamsConfig; // protected get background_controller_constructor() { // return OrthographicCameraBackgroundController; // } static type(): Readonly<CameraNodeType.ORTHOGRAPHIC> { return CameraNodeType.ORTHOGRAPHIC; } create_object() { return new OrthographicCamera( DEFAULT.left * 2, DEFAULT.right * 2, DEFAULT.top * 2, DEFAULT.bottom * 2, BASE_CAMERA_DEFAULT.near, BASE_CAMERA_DEFAULT.far ); } update_camera() { this._update_for_aspect_ratio(); } protected _update_for_aspect_ratio() { if (this._aspect) { const size = this.pv.size || 1; // let lock_width = this.pv.lock_width; // if (lock_width == null) { // lock_width = true; // } // if (lock_width) { // const vertical_size = size / this._aspect; // const zoom = 1 //this.get_zoom(vertical_size, this.pv.vertical_size_range); // this._object.left = DEFAULT.left * size * zoom; // this._object.right = DEFAULT.right * size * zoom; // this._object.top = DEFAULT.top * vertical_size * zoom; // this._object.bottom = DEFAULT.bottom * vertical_size * zoom; // } else { const horizontal_size = size * this._aspect; const zoom = 1; //this.get_zoom(horizontal_size, this.pv.horizontal_size_range); this._object.left = DEFAULT.left * horizontal_size * zoom; this._object.right = DEFAULT.right * horizontal_size * zoom; this._object.top = DEFAULT.top * size * zoom; this._object.bottom = DEFAULT.bottom * size * zoom; // } this._object.updateProjectionMatrix(); } } // private get_zoom(size: number, range: Vector2) { // let zoom = 1; // if (range) { // if (size < range.x || size > range.y) { // const new_size = lodash_clamp(size, range.x, range.y); // zoom = new_size / size; // } // } // return zoom; // } }