@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
42 lines (41 loc) • 1.6 kB
JavaScript
;
import { BaseSopOperation } from "./_Base";
import { InputCloneMode } from "../../../engine/poly/InputCloneMode";
import { ThreejsCoreObject } from "../../../core/geometry/modules/three/ThreejsCoreObject";
import { CameraAttribute } from "../../../core/camera/CoreCamera";
import { CameraSopNodeType } from "../../poly/NodeContext";
import { CameraFrameMode, CAMERA_FRAME_MODES } from "../../../core/camera/CoreCameraFrameMode";
import { CoreMask } from "../../../core/geometry/Mask";
const _CameraFrameModeSopOperation = class extends BaseSopOperation {
static type() {
return CameraSopNodeType.FRAME_MODE;
}
cook(inputCoreGroups, params) {
const coreGroup = inputCoreGroups[0];
const objects = CoreMask.filterObjects(coreGroup, {
group: params.group
});
if (this._node) {
_CameraFrameModeSopOperation.updateObject({ objects, params });
}
return coreGroup;
}
static updateObject(options) {
const { objects, params } = options;
for (let object of objects) {
ThreejsCoreObject.addAttribute(object, CameraAttribute.FRAME_MODE, params.frameMode);
ThreejsCoreObject.addAttribute(
object,
CameraAttribute.FRAME_MODE_EXPECTED_ASPECT_RATIO,
params.expectedAspectRatio
);
}
}
};
export let CameraFrameModeSopOperation = _CameraFrameModeSopOperation;
CameraFrameModeSopOperation.DEFAULT_PARAMS = {
group: "",
frameMode: CAMERA_FRAME_MODES.indexOf(CameraFrameMode.DEFAULT),
expectedAspectRatio: 16 / 9
};
CameraFrameModeSopOperation.INPUT_CLONED_STATE = InputCloneMode.FROM_NODE;