UNPKG

@polygonjs/polygonjs

Version:

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

89 lines (88 loc) 3.45 kB
"use strict"; 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;