UNPKG

@polygonjs/polygonjs

Version:

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

45 lines (44 loc) 1.55 kB
"use strict"; import { ParamConfig } from "../../engine/nodes/utils/params/ParamsConfig"; import { Vector2 } from "three"; import { CameraAttribute } from "./CoreCamera"; import { coreObjectClassFactory } from "../geometry/CoreObjectFactory"; export function CoreCameraViewOffsetParamConfig(Base) { return class Mixin extends Base { constructor() { super(...arguments); /** @param min */ this.min = ParamConfig.VECTOR2([0, 0]); /** @param max */ this.max = ParamConfig.VECTOR2([1, 1]); } }; } function cameraViewOffsetMin(coreObjectClass, camera, target) { target.set(0, 0); coreObjectClass.attribValue(camera, CameraAttribute.VIEW_OFFSET_MIN, 0, target); } function cameraViewOffsetMax(coreObjectClass, camera, target) { target.set(1, 1); coreObjectClass.attribValue(camera, CameraAttribute.VIEW_OFFSET_MAX, 0, target); } const _min = new Vector2(); const _max = new Vector2(); export function cameraSetViewOffset(camera, resolution) { const coreObjectClass = coreObjectClassFactory(camera); const hasMin = coreObjectClass.hasAttribute(camera, CameraAttribute.VIEW_OFFSET_MIN); const hasMax = coreObjectClass.hasAttribute(camera, CameraAttribute.VIEW_OFFSET_MAX); if (!(hasMin && hasMax)) { return; } cameraViewOffsetMin(coreObjectClass, camera, _min); cameraViewOffsetMax(coreObjectClass, camera, _max); camera.setViewOffset( resolution.x, resolution.y, _min.x * resolution.x, _min.y * resolution.y, _max.x * resolution.x, _max.y * resolution.y ); }