@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
32 lines (31 loc) • 1.16 kB
JavaScript
;
import { ParamConfig } from "../../engine/nodes/utils/params/ParamsConfig";
import { CameraNodeType } from "../../engine/poly/NodeContext";
import { ThreejsViewer } from "../../engine/viewers/Threejs";
import { CoreCameraPerspectiveFrameMode } from "./frameMode/CoreCameraPerspectiveFrameMode";
import { PerspectiveCamera } from "three";
export const PERSPECTIVE_CAMERA_DEFAULT = {
fov: 50,
fovRange: [1e-3, 180]
};
export function PerspectiveCameraParamConfigMixin(Base) {
return class Mixin extends Base {
constructor() {
super(...arguments);
/** @param field of view */
this.fov = ParamConfig.FLOAT(PERSPECTIVE_CAMERA_DEFAULT.fov, { range: PERSPECTIVE_CAMERA_DEFAULT.fovRange });
}
};
}
export const registerPerspectiveCamera = (poly) => {
poly.registerCameraNodeType(CameraNodeType.PERSPECTIVE);
poly.registerCamera(PerspectiveCamera, (options) => {
const viewer = new ThreejsViewer({
...options,
updateCameraAspect: (aspect, resolution) => {
CoreCameraPerspectiveFrameMode.updateCameraAspect(options.camera, aspect, { resolution });
}
});
return viewer;
});
};