@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
45 lines (44 loc) • 1.55 kB
JavaScript
;
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
);
}