@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
89 lines (88 loc) • 3.45 kB
JavaScript
;
import { BaseSopOperation } from "./_Base";
import { InputCloneMode } from "../../poly/InputCloneMode";
import { CameraSopNodeType } from "../../poly/NodeContext";
import { ThreejsCoreObject } from "../../../core/geometry/modules/three/ThreejsCoreObject";
import { CameraAttribute } from "../../../core/camera/CoreCamera";
import {
MarkerTrackingTransformMode,
MARKER_TRACKING_TRANSFORM_MODES,
MarkerTrackingSourceMode,
MARKER_TRACKING_SOURCE_MODES
} from "../../../core/webXR/markerTracking/Common";
import { Poly } from "../../Poly";
import { CoreMask } from "../../../core/geometry/Mask";
const _CameraWebXRARMarkerTrackingSopOperation = class extends BaseSopOperation {
static type() {
return CameraSopNodeType.WEBXR_AR_MARKER_TRACKING;
}
cook(inputCoreGroups, params) {
var _a;
const coreGroup = inputCoreGroups[0];
const objects = CoreMask.filterObjects(coreGroup, {
group: params.group
});
if (Poly.thirdParty.markerTracking().hasController()) {
if (this._node) {
_CameraWebXRARMarkerTrackingSopOperation.updateObject({
scene: this._node.scene(),
objects,
params,
active: true
});
}
} else {
(_a = this._node) == null ? void 0 : _a.states.error.set(
"This node requires the plugin-marker-tracking. See [https://github.com/polygonjs/plugin-marker-tracking](https://github.com/polygonjs/plugin-marker-tracking)"
);
}
return coreGroup;
}
static updateObject(options) {
const { objects, params, active } = options;
for (let object of objects) {
ThreejsCoreObject.addAttribute(object, CameraAttribute.WEBXR_AR_MARKER_TRACKING, active);
const sourceMode = MARKER_TRACKING_SOURCE_MODES[params.sourceMode];
ThreejsCoreObject.addAttribute(object, CameraAttribute.WEBXR_AR_MARKER_TRACKING_SOURCE_MODE, sourceMode);
ThreejsCoreObject.addAttribute(
object,
CameraAttribute.WEBXR_AR_MARKER_TRACKING_SOURCE_URL,
params.sourceUrl
);
const transformMode = MARKER_TRACKING_TRANSFORM_MODES[params.transformMode];
ThreejsCoreObject.addAttribute(
object,
CameraAttribute.WEBXR_AR_MARKER_TRACKING_TRANSFORM_MODE,
transformMode
);
ThreejsCoreObject.addAttribute(object, CameraAttribute.WEBXR_AR_MARKER_TRACKING_SMOOTH, params.smooth);
ThreejsCoreObject.addAttribute(
object,
CameraAttribute.WEBXR_AR_MARKER_TRACKING_SMOOTH_COUNT,
params.smoothCount
);
ThreejsCoreObject.addAttribute(
object,
CameraAttribute.WEBXR_AR_MARKER_TRACKING_BAR_CODE_TYPE,
params.barCodeType
);
ThreejsCoreObject.addAttribute(
object,
CameraAttribute.WEBXR_AR_MARKER_TRACKING_BAR_CODE_VALUE,
params.barCodeValue
);
}
}
};
export let CameraWebXRARMarkerTrackingSopOperation = _CameraWebXRARMarkerTrackingSopOperation;
CameraWebXRARMarkerTrackingSopOperation.DEFAULT_PARAMS = {
group: "",
sourceMode: MARKER_TRACKING_SOURCE_MODES.indexOf(MarkerTrackingSourceMode.WEBCAM),
sourceUrl: "",
transformMode: MARKER_TRACKING_TRANSFORM_MODES.indexOf(MarkerTrackingTransformMode.CAMERA),
smooth: true,
smoothCount: 5,
barCodeType: Poly.thirdParty.markerTracking().barCodeTypes()[0] || "",
barCodeValue: 0
};
CameraWebXRARMarkerTrackingSopOperation.INPUT_CLONED_STATE = InputCloneMode.FROM_NODE;