UNPKG

@polygonjs/polygonjs

Version:

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

82 lines (81 loc) 3.32 kB
"use strict"; import { BaseSopOperation } from "./_Base"; import { MathUtils, OrthographicCamera, Vector3 } from "three"; import { InputCloneMode } from "../../../engine/poly/InputCloneMode"; import { CameraNodeType } from "../../poly/NodeContext"; import { CameraAttribute, CORE_CAMERA_DEFAULT, OrthographicCameraAttribute } from "../../../core/camera/CoreCamera"; import { isBooleanTrue } from "../../../core/Type"; import { CameraHelper } from "../../../core/helpers/CameraHelper"; import { ORTHOGRAPHIC_CAMERA_DEFAULT, registerOrthographicCamera } from "../../../core/camera/CoreOrthographicCamera"; import { ThreejsCoreObject } from "../../../core/geometry/modules/three/ThreejsCoreObject"; import { ObjectType, registerObjectType } from "../../../core/geometry/Constant"; const _OrthographicCameraSopOperation = class extends BaseSopOperation { static type() { return CameraNodeType.ORTHOGRAPHIC; } cook(inputCoreGroups, params) { const camera = _OrthographicCameraSopOperation.createCamera(params, this._node); camera.left = ORTHOGRAPHIC_CAMERA_DEFAULT.left * params.size; camera.right = ORTHOGRAPHIC_CAMERA_DEFAULT.right * params.size; camera.top = ORTHOGRAPHIC_CAMERA_DEFAULT.top * params.size; camera.bottom = ORTHOGRAPHIC_CAMERA_DEFAULT.bottom * params.size; camera.name = params.name || CameraNodeType.ORTHOGRAPHIC; camera.position.copy(params.position); camera.rotation.set( MathUtils.degToRad(params.rotation.x), MathUtils.degToRad(params.rotation.y), MathUtils.degToRad(params.rotation.z) ); _OrthographicCameraSopOperation.setCameraAttributes(camera, params); camera.updateWorldMatrix(false, false); camera.updateProjectionMatrix(); camera.matrixAutoUpdate = params.matrixAutoUpdate; const objects = [camera]; if (isBooleanTrue(params.showHelper)) { const helper = new CameraHelper(camera); helper.update(); camera.add(helper); } return this.createCoreGroupFromObjects(objects); } static createCamera(params, nodeGenerator) { registerObjectType({ type: ObjectType.ORTHOGRAPHIC_CAMERA, checkFunc: (o) => { if (o.isOrthographicCamera) { return ObjectType.ORTHOGRAPHIC_CAMERA; } }, ctor: OrthographicCamera, humanName: "OrthographicCamera" }); const camera = new OrthographicCamera( params.size * 2, params.size * 2, params.size * 2, params.size * 2, params.near, params.far ); if (nodeGenerator) { ThreejsCoreObject.addAttribute(camera, CameraAttribute.NODE_ID, nodeGenerator.graphNodeId()); } return camera; } static setCameraAttributes(camera, options) { ThreejsCoreObject.addAttribute(camera, OrthographicCameraAttribute.SIZE, options.size); } }; export let OrthographicCameraSopOperation = _OrthographicCameraSopOperation; OrthographicCameraSopOperation.DEFAULT_PARAMS = { size: 1, near: CORE_CAMERA_DEFAULT.near, far: CORE_CAMERA_DEFAULT.far, position: new Vector3(0, 0, 0), rotation: new Vector3(0, 0, 0), showHelper: false, matrixAutoUpdate: true, name: CameraNodeType.ORTHOGRAPHIC }; OrthographicCameraSopOperation.INPUT_CLONED_STATE = InputCloneMode.NEVER; OrthographicCameraSopOperation.onRegister = registerOrthographicCamera;