gps-plus-slam-app-framework 1.3.0 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/absolute-orientation-CAEh840t.d.ts +54 -0
- package/dist/{app-selectors-B8VQoMDY.d.ts → app-selectors-ikTUQZpe.d.ts} +1 -1
- package/dist/ar/bresenham3d.d.ts +1 -1
- package/dist/ar/camera-blit-capture.d.ts +2 -2
- package/dist/ar/camera-blit-capture.js +74 -9
- package/dist/ar/capability-checker.d.ts +1 -1
- package/dist/ar/capture-failure-tracker.d.ts +1 -1
- package/dist/ar/chromium-camera-access-workaround.d.ts +1 -1
- package/dist/ar/depth-grid-lookup.d.ts +2 -0
- package/dist/ar/depth-grid-lookup.js +43 -0
- package/dist/ar/depth-sampler.d.ts +2 -2
- package/dist/ar/depth-sampler.js +2 -4
- package/dist/ar/depth-unprojection.d.ts +1 -1
- package/dist/ar/enable-gps-ar.d.ts +1 -1
- package/dist/ar/enable-gps-ar.js +26 -1
- package/dist/ar/frame-loop.d.ts +1 -1
- package/dist/ar/image-capture.d.ts +2 -2
- package/dist/ar/image-capture.js +1 -154
- package/dist/ar/image-quality.d.ts +2 -0
- package/dist/ar/image-quality.js +168 -0
- package/dist/ar/index.d.ts +31 -19
- package/dist/ar/index.js +17 -5
- package/dist/ar/occupancy-grid.d.ts +1 -1
- package/dist/ar/occupancy-grid.js +29 -2
- package/dist/ar/planar-pnp.d.ts +2 -0
- package/dist/ar/planar-pnp.js +425 -0
- package/dist/ar/qr-debug-view.d.ts +2 -0
- package/dist/ar/qr-debug-view.js +89 -0
- package/dist/ar/qr-derived-pose.d.ts +2 -0
- package/dist/ar/qr-derived-pose.js +114 -0
- package/dist/ar/qr-detection-controller.d.ts +2 -0
- package/dist/ar/qr-detection-controller.js +2 -0
- package/dist/ar/qr-frontend.d.ts +2 -0
- package/dist/ar/qr-frontend.js +60 -0
- package/dist/ar/qr-pose.d.ts +2 -0
- package/dist/ar/qr-pose.js +267 -0
- package/dist/ar/qr-size-depth-context.d.ts +3 -0
- package/dist/ar/qr-size-depth-context.js +42 -0
- package/dist/ar/qr-size-measurer.d.ts +2 -0
- package/dist/ar/qr-size-measurer.js +2 -0
- package/dist/ar/replay-scene.d.ts +1 -1
- package/dist/ar/replay-scene.js +1 -1
- package/dist/ar/scene-node-names.d.ts +1 -1
- package/dist/ar/webxr-nue-basis.d.ts +1 -1
- package/dist/ar/webxr-session.d.ts +4 -4
- package/dist/ar/webxr-session.js +2 -2
- package/dist/ar/xr-camera-texture.d.ts +1 -1
- package/dist/ar/xr-error-handler.d.ts +1 -1
- package/dist/ar/xr-frame-loop.d.ts +1 -1
- package/dist/ar-MFpFlV7j.js +382 -0
- package/dist/{ar-world-group-alignment-C9lwwIyI.d.ts → ar-world-group-alignment-69fgnB39.d.ts} +1 -1
- package/dist/{camera-blit-capture-CnxUDbKx.d.ts → camera-blit-capture-NKT9H5-e.d.ts} +57 -4
- package/dist/capture-motion-gate-0Yl2NpQG.d.ts +24 -0
- package/dist/capture-motion-gate-4EscNZCw.js +94 -0
- package/dist/concurrency-By0oOTZt.d.ts +50 -0
- package/dist/core/index.d.ts +2 -2
- package/dist/core/index.js +2 -2
- package/dist/create-slam-app-store-DkCHOpvb.js +149 -0
- package/dist/{create-slam-app-store-BljusOua.d.ts → create-slam-app-store-n_VF63D5.d.ts} +50 -40
- package/dist/depth-grid-lookup-DQ-IYhO3.d.ts +21 -0
- package/dist/{depth-sampler-Bhanfwla.d.ts → depth-sampler-asc8exHt.d.ts} +1 -1
- package/dist/{depth-unprojection-Y6i_mJuT.d.ts → depth-unprojection-DjsbJW9L.d.ts} +1 -1
- package/dist/{enable-gps-ar-BfUJOgpW.d.ts → enable-gps-ar-DkNhFv4Y.d.ts} +4 -4
- package/dist/{frame-conversions-BfsafGWR.d.ts → frame-conversions-DObhj8Wf.d.ts} +1 -1
- package/dist/{fused-path-DJoVu98b.d.ts → fused-path-v6eOmLl3.d.ts} +1 -1
- package/dist/geo/h3-proximity.d.ts +2 -2
- package/dist/geo/h3-proximity.js +61 -2
- package/dist/geo/index.d.ts +2 -2
- package/dist/geo/index.js +2 -2
- package/dist/geodesic-angle-BTldfFgs.js +39 -0
- package/dist/{gps-anchor-dYeCvvp5.d.ts → gps-anchor-BeFO2RYa.d.ts} +1 -1
- package/dist/{gps-ar-pose-sampler-DVb96iOy.d.ts → gps-ar-pose-sampler-DHMZmYAc.d.ts} +1 -1
- package/dist/{gps-event-coordinator-CWIDOk4U.d.ts → gps-event-coordinator-CjWW636x.d.ts} +21 -11
- package/dist/{gps-event-markers-Dc9FT-q1.d.ts → gps-event-markers-Cz9RMA2k.d.ts} +18 -0
- package/dist/{h3-proximity-I1msGPgE.d.ts → h3-proximity-C-j0pw1j.d.ts} +39 -1
- package/dist/image-capture-B2-b6tKK.js +374 -0
- package/dist/{image-capture-qAZ5Fh5X.d.ts → image-capture-CNZDrQXG.d.ts} +103 -3
- package/dist/image-quality-smCBoFj1.d.ts +158 -0
- package/dist/index-BAPokxMb.d.ts +22 -0
- package/dist/{index-BYYUdf9v.d.ts → index-BODDUTvD.d.ts} +1 -1
- package/dist/index-BneSj4_5.d.ts +399 -0
- package/dist/index-_Rhgoqkh.d.ts +2 -0
- package/dist/index.d.ts +80 -67
- package/dist/index.js +24 -12
- package/dist/{leaflet-map-overlay-6CJC-E1l.d.ts → leaflet-map-overlay-CmIyiE8n.d.ts} +1 -1
- package/dist/{map-data-CkloBxIl.d.ts → map-data-B4oEehUh.d.ts} +1 -1
- package/dist/{map-overlay-draw-krOKwDAq.d.ts → map-overlay-draw-ymz1s7fG.d.ts} +1 -1
- package/dist/{null-storage-backend-uKQE8tl7.d.ts → null-storage-backend-B9rtyDfG.d.ts} +2 -2
- package/dist/{occupancy-grid-BRNRaPyT.d.ts → occupancy-grid-DnOc-6PU.d.ts} +12 -2
- package/dist/{opfs-storage-D5zAn_lx.d.ts → opfs-storage-3VZh-qH6.d.ts} +23 -4
- package/dist/{opfs-storage-backend-6aYMUZlJ.d.ts → opfs-storage-backend-JJiUJo-3.d.ts} +3 -3
- package/dist/{persistence-middleware-B9ei4Nhx.d.ts → persistence-middleware-DAPTTwB2.d.ts} +1 -1
- package/dist/planar-pnp-my9bqULS.d.ts +67 -0
- package/dist/qr-debug-view-Brl73HGO.d.ts +29 -0
- package/dist/qr-derived-pose-CmxTP2m4.d.ts +122 -0
- package/dist/qr-detected-slice-VQssZmQJ.d.ts +166 -0
- package/dist/qr-detection-controller-B-tLVd-S.js +119 -0
- package/dist/qr-detection-controller-CDurHv8E.d.ts +48 -0
- package/dist/qr-frontend--fFX25mV.d.ts +58 -0
- package/dist/qr-pose-D2rfu5DA.d.ts +138 -0
- package/dist/qr-pose-aggregation-B7tWJq7j.d.ts +90 -0
- package/dist/qr-pose-aggregation-DBiaLW0O.js +191 -0
- package/dist/qr-size-depth-context-CeAG53fy.d.ts +13 -0
- package/dist/qr-size-measurer-DLb33geH.js +596 -0
- package/dist/qr-size-measurer-DQdAsid1.d.ts +165 -0
- package/dist/recording-options-BPCpMHLK.d.ts +514 -0
- package/dist/{recording-replayer-r0DZ9ALp.d.ts → recording-replayer-DQKpAGyQ.d.ts} +2 -2
- package/dist/recording-slice-DaxHZvNu.d.ts +55 -0
- package/dist/{replay-engine-XpDa0dy1.d.ts → replay-engine-CmKh_4wf.d.ts} +7 -4
- package/dist/{replay-scene-Bw58VL6p.d.ts → replay-scene-DBlDrV_x.d.ts} +3 -3
- package/dist/sensors/absolute-orientation.d.ts +2 -0
- package/dist/sensors/absolute-orientation.js +145 -0
- package/dist/sensors/gps-error-handler.d.ts +1 -1
- package/dist/sensors/gps.d.ts +1 -1
- package/dist/sensors/index.d.ts +5 -4
- package/dist/sensors/index.js +2 -1
- package/dist/sensors/permission-checker.d.ts +1 -1
- package/dist/sensors/permission-checker.js +1 -1
- package/dist/state/app-selectors.d.ts +1 -1
- package/dist/state/combined-root-state.d.ts +1 -1
- package/dist/state/create-slam-app-store.d.ts +1 -1
- package/dist/state/create-slam-app-store.js +1 -74
- package/dist/state/gps-ar-pose-sampler.d.ts +3 -3
- package/dist/state/gps-event-coordinator.d.ts +2 -2
- package/dist/state/gps-event-coordinator.js +27 -17
- package/dist/state/index.d.ts +20 -17
- package/dist/state/index.js +5 -4
- package/dist/state/persistence-middleware.d.ts +1 -1
- package/dist/state/persistence-middleware.js +30 -19
- package/dist/state/qr-detected-slice.d.ts +4 -0
- package/dist/state/qr-detected-slice.js +311 -0
- package/dist/state/recording-options.d.ts +2 -2
- package/dist/state/recording-options.js +273 -7
- package/dist/state/recording-replayer.d.ts +2 -2
- package/dist/state/recording-replayer.js +1 -1
- package/dist/state/recording-slice.d.ts +1 -1
- package/dist/state/recording-slice.js +5 -1
- package/dist/state/replay-engine.d.ts +1 -1
- package/dist/state/replay-engine.js +7 -3
- package/dist/state/store-subscribers.d.ts +2 -2
- package/dist/state/subscribe-to-selector.d.ts +1 -1
- package/dist/state/tracking-quality.d.ts +2 -2
- package/dist/state/tracking-quality.js +40 -128
- package/dist/state/tracking-slice.d.ts +1 -1
- package/dist/{state-BkIfpiyA.js → state-E51QT_-j.js} +2 -1
- package/dist/storage/file-system-utils.d.ts +1 -1
- package/dist/storage/index.d.ts +9 -9
- package/dist/storage/index.js +4 -4
- package/dist/storage/null-storage-backend.d.ts +1 -1
- package/dist/storage/opfs-storage-backend.d.ts +1 -1
- package/dist/storage/opfs-storage-backend.js +3 -3
- package/dist/storage/opfs-storage.d.ts +1 -1
- package/dist/storage/opfs-storage.js +5 -4
- package/dist/storage/storage-backend.d.ts +1 -1
- package/dist/storage/zip-coverage-embed.d.ts +2 -0
- package/dist/storage/zip-coverage-embed.js +88 -0
- package/dist/storage/zip-export.d.ts +2 -2
- package/dist/storage/zip-export.js +37 -59
- package/dist/storage/zip-reader.d.ts +1 -1
- package/dist/{storage-backend-Do6YDpNo.d.ts → storage-backend-BdVLD0dU.d.ts} +1 -1
- package/dist/{store-subscribers-0YWyOLvV.d.ts → store-subscribers-CA6AJH_8.d.ts} +2 -2
- package/dist/{subscribe-to-selector-CZ6k1NFP.d.ts → subscribe-to-selector-B6EUmQ3I.d.ts} +1 -1
- package/dist/test-utils/browser-mocks.d.ts +7 -1
- package/dist/test-utils/browser-mocks.js +6 -0
- package/dist/test-utils/zip-round-trip-helpers.d.ts +9 -1
- package/dist/test-utils/zip-round-trip-helpers.js +5 -1
- package/dist/{tracking-slice-CdK8c-8P.d.ts → tracking-slice-BuAZxXZ5.d.ts} +1 -1
- package/dist/types/ar-types.d.ts +1 -1
- package/dist/types/geo-types.d.ts +1 -1
- package/dist/types/index.d.ts +2 -2
- package/dist/utils/concurrency.d.ts +2 -2
- package/dist/utils/concurrency.js +66 -2
- package/dist/utils/failure-tracker.d.ts +1 -1
- package/dist/utils/format-file-size.d.ts +1 -1
- package/dist/utils/fused-path.d.ts +1 -1
- package/dist/utils/index.d.ts +8 -7
- package/dist/utils/index.js +2 -1
- package/dist/utils/list-formatter.d.ts +1 -1
- package/dist/utils/logger.d.ts +1 -1
- package/dist/visualization/accuracy-circles.d.ts +1 -1
- package/dist/visualization/alignment-lerper.d.ts +1 -1
- package/dist/visualization/ar-world-group-alignment.d.ts +1 -1
- package/dist/visualization/ar-world-group-alignment.js +1 -1
- package/dist/visualization/camera-follower.d.ts +1 -1
- package/dist/visualization/css3d-renderer-manager.d.ts +1 -1
- package/dist/visualization/frame-conversions.d.ts +1 -1
- package/dist/visualization/frustum-visibility.d.ts +1 -1
- package/dist/visualization/gps-anchor.d.ts +1 -1
- package/dist/visualization/gps-compass-cubes.d.ts +1 -1
- package/dist/visualization/gps-event-markers.d.ts +1 -1
- package/dist/visualization/gps-event-markers.js +40 -5
- package/dist/visualization/hit-test-reticle.d.ts +1 -1
- package/dist/visualization/hit-test-reticle.js +1 -0
- package/dist/visualization/index.d.ts +18 -18
- package/dist/visualization/leaflet-map-overlay.d.ts +1 -1
- package/dist/visualization/leaflet-map-overlay.js +15 -3
- package/dist/visualization/lerp-utils.d.ts +1 -1
- package/dist/visualization/map-data.d.ts +1 -1
- package/dist/visualization/map-overlay-draw.d.ts +1 -1
- package/dist/visualization/map-overlay.d.ts +1 -1
- package/dist/visualization/three-dispose.d.ts +1 -1
- package/dist/visualization/vis-colors.d.ts +1 -1
- package/dist/{webxr-session-TIaD883f.js → webxr-session-DG-eNfny.js} +244 -11
- package/dist/{webxr-session-GjZ2BIpS.d.ts → webxr-session-Do5L6G3B.d.ts} +86 -8
- package/dist/zip-coverage-embed-DCAREVmw.d.ts +41 -0
- package/dist/{zip-export-G14hkSPG.d.ts → zip-export-ol0S_Ofd.d.ts} +27 -23
- package/package.json +2 -2
- package/dist/concurrency-CO1FQvs3.d.ts +0 -24
- package/dist/file-system-CwXTNHmB.d.ts +0 -114
- package/dist/index-CF05QV2m.d.ts +0 -2
- package/dist/recording-options-DJBXuMxV.d.ts +0 -182
- package/dist/recording-slice-89O07ebs.d.ts +0 -36
- package/dist/storage/file-system.d.ts +0 -2
- package/dist/storage/file-system.js +0 -289
- /package/dist/{accuracy-circles-BpwWAs8G.d.ts → accuracy-circles-BtqOP_v1.d.ts} +0 -0
- /package/dist/{alignment-lerper-Dm9G7JJO.d.ts → alignment-lerper-Bil6vbVw.d.ts} +0 -0
- /package/dist/{ar-types-Dan1MVTi.d.ts → ar-types-BFX2r1wk.d.ts} +0 -0
- /package/dist/{bresenham3d-CFfd7n6B.d.ts → bresenham3d-CU1Gv2W4.d.ts} +0 -0
- /package/dist/{camera-follower-C2mwEn7c.d.ts → camera-follower-CqJJ7zRj.d.ts} +0 -0
- /package/dist/{capability-checker-CQXJHxXg.d.ts → capability-checker-DUQLg6gq.d.ts} +0 -0
- /package/dist/{capture-failure-tracker-CUeU3L_M.d.ts → capture-failure-tracker-gsm8q7yi.d.ts} +0 -0
- /package/dist/{chromium-camera-access-workaround-Jqbn0apH.d.ts → chromium-camera-access-workaround-D4K2uwwQ.d.ts} +0 -0
- /package/dist/{css3d-renderer-manager-ptu_t3B3.d.ts → css3d-renderer-manager-B3kGNtcn.d.ts} +0 -0
- /package/dist/{failure-tracker-Cn8Fo9D4.d.ts → failure-tracker-BO7M7jF_.d.ts} +0 -0
- /package/dist/{file-system-utils-CXIoL-DM.d.ts → file-system-utils-DOajnMm-.d.ts} +0 -0
- /package/dist/{format-file-size-CLCZz3lC.d.ts → format-file-size-Dc98ulzB.d.ts} +0 -0
- /package/dist/{frame-loop-CMewS8cY.d.ts → frame-loop-CpVjQ1dH.d.ts} +0 -0
- /package/dist/{frustum-visibility-CmI96ESS.d.ts → frustum-visibility-CeoCZchO.d.ts} +0 -0
- /package/dist/{geo-types-SaPnIEUM.d.ts → geo-types-3Ip1NzVR.d.ts} +0 -0
- /package/dist/{gps-VuezJWK3.d.ts → gps-BBO3hKfT.d.ts} +0 -0
- /package/dist/{gps-compass-cubes-BM1uGiYV.d.ts → gps-compass-cubes-DSN87L8p.d.ts} +0 -0
- /package/dist/{gps-error-handler-CJl_2MVm.d.ts → gps-error-handler-BbPsfw-_.d.ts} +0 -0
- /package/dist/{hit-test-reticle-BEzEybxZ.d.ts → hit-test-reticle-DV-2TpB9.d.ts} +0 -0
- /package/dist/{lerp-utils-BpV-0Dtk.d.ts → lerp-utils-BLmHhkVe.d.ts} +0 -0
- /package/dist/{list-formatter-RRcBe8Vg.d.ts → list-formatter-KNMS0ay2.d.ts} +0 -0
- /package/dist/{logger-BEHXsnnq.d.ts → logger-CLnPrHiD.d.ts} +0 -0
- /package/dist/{map-overlay-bcogY5fK.d.ts → map-overlay-Dh2B97MP.d.ts} +0 -0
- /package/dist/{permission-checker-GpAiSCwd.d.ts → permission-checker-CDuI8BwC.d.ts} +0 -0
- /package/dist/{scene-node-names-Bu0S66H1.d.ts → scene-node-names-BiShOQDB.d.ts} +0 -0
- /package/dist/{session-disposers-M-oashRH.js → session-disposers-zv9OGXPB.js} +0 -0
- /package/dist/{three-dispose-D950t71B.d.ts → three-dispose-Bt1k7WKh.d.ts} +0 -0
- /package/dist/{vis-colors-D6omC64K.d.ts → vis-colors-Obw2pLqT.d.ts} +0 -0
- /package/dist/{webxr-nue-basis-CqKQmZzT.d.ts → webxr-nue-basis-3nfjDJJp.d.ts} +0 -0
- /package/dist/{xr-camera-texture-DBwCaKTd.d.ts → xr-camera-texture-Cva1q3Qj.d.ts} +0 -0
- /package/dist/{xr-error-handler-C0AQRmxs.d.ts → xr-error-handler-CtvHpjfm.d.ts} +0 -0
- /package/dist/{xr-frame-loop-BtYytZJg.d.ts → xr-frame-loop-DIYtRcUa.d.ts} +0 -0
- /package/dist/{zip-reader-DSEXt7K6.d.ts → zip-reader-D9iPQwdQ.d.ts} +0 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { _ as solveQrPose, a as QrPoseSolution, c as SolveQrPoseInput, d as intrinsicsFromProjection, f as invertPose, g as signedQuadArea, h as reprojectionErrorPx, i as Pose, l as buildObjectPoints, m as qrInCameraFromOpenCv, n as OpenCvPnpResult, o as QuadValidation, p as projectViewPoint, r as Point2, s as SolvePnpSquare, t as CameraIntrinsics, u as composePose, v as transformPoint, y as validateQuad } from "../qr-pose-D2rfu5DA.js";
|
|
2
|
+
export { CameraIntrinsics, OpenCvPnpResult, Point2, Pose, QrPoseSolution, QuadValidation, SolvePnpSquare, SolveQrPoseInput, buildObjectPoints, composePose, intrinsicsFromProjection, invertPose, projectViewPoint, qrInCameraFromOpenCv, reprojectionErrorPx, signedQuadArea, solveQrPose, transformPoint, validateQuad };
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
import { quat, vec3 } from "gl-matrix";
|
|
2
|
+
//#region ../src/ar/qr-pose.ts
|
|
3
|
+
/**
|
|
4
|
+
* QR pose math — Phase 1 of the QR-code detection & 3D-tracking plan.
|
|
5
|
+
*
|
|
6
|
+
* Pure, device-free, OpenCV-free transforms shared by every later phase:
|
|
7
|
+
* - object-point builder for a centered planar square (the `solvePnP` model),
|
|
8
|
+
* - camera intrinsics derived from the rendered view's projection matrix,
|
|
9
|
+
* - the OpenCV camera frame (+x right, +y DOWN, +z FORWARD) → WebXR camera
|
|
10
|
+
* frame (+x right, +y UP, −z forward) conversion of a solved pose,
|
|
11
|
+
* - rigid pose compose/invert to lift a QR-in-camera pose into raw-WebXR
|
|
12
|
+
* ("odom") space under `arWorldGroup`,
|
|
13
|
+
* - quad winding validation (the mirror/degenerate guard the briefs warn about),
|
|
14
|
+
* - reprojection error (the on-device verification gate's quality metric).
|
|
15
|
+
*
|
|
16
|
+
* The heavy `solvePnP` itself is injected via {@link SolvePnpSquare} so this
|
|
17
|
+
* module — and its tests — need no OpenCV. See qr-pose.ts.md for the full
|
|
18
|
+
* convention rationale and the OpenCV↔WebXR derivation.
|
|
19
|
+
*
|
|
20
|
+
* Convention notes (single source of truth):
|
|
21
|
+
* - Image/pixel coordinates have a TOP-LEFT origin, x right, y DOWN — matching
|
|
22
|
+
* `depth-unprojection.ts`, `BarcodeDetector.cornerPoints`, and OpenCV.
|
|
23
|
+
* - The QR-local object frame is +x right, +y UP, +z out of the printed face;
|
|
24
|
+
* the centered square lies on z = 0. Corner order is TL, TR, BR, BL as read
|
|
25
|
+
* on the printed symbol (carries the QR's reading orientation → pose yaw).
|
|
26
|
+
* - `solvePnP` maps object→camera in the OpenCV frame: p_cam = R·p_obj + t.
|
|
27
|
+
* WebXR camera = Rx(π)·(OpenCV camera); Rx(π) = diag(1,−1,−1) is a proper
|
|
28
|
+
* rotation (det = +1), so the converted pose stays a rigid motion.
|
|
29
|
+
*/
|
|
30
|
+
const DEFAULT_MAX_REPROJECTION_ERROR_PX = 4;
|
|
31
|
+
/**
|
|
32
|
+
* Build the 4 object points of a centered planar square of side `sizeM`, in
|
|
33
|
+
* the QR-local frame (+x right, +y up, z = 0), ordered TL, TR, BR, BL to match
|
|
34
|
+
* the detector's symbol reading order.
|
|
35
|
+
*/
|
|
36
|
+
function buildObjectPoints(sizeM) {
|
|
37
|
+
if (!(sizeM > 0) || !Number.isFinite(sizeM)) throw new RangeError(`qr-pose: sizeM must be a positive number, got ${sizeM}`);
|
|
38
|
+
const h = sizeM / 2;
|
|
39
|
+
return [
|
|
40
|
+
[
|
|
41
|
+
-h,
|
|
42
|
+
h,
|
|
43
|
+
0
|
|
44
|
+
],
|
|
45
|
+
[
|
|
46
|
+
h,
|
|
47
|
+
h,
|
|
48
|
+
0
|
|
49
|
+
],
|
|
50
|
+
[
|
|
51
|
+
h,
|
|
52
|
+
-h,
|
|
53
|
+
0
|
|
54
|
+
],
|
|
55
|
+
[
|
|
56
|
+
-h,
|
|
57
|
+
-h,
|
|
58
|
+
0
|
|
59
|
+
]
|
|
60
|
+
];
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Derive pinhole intrinsics (pixels) from a column-major GL projection matrix
|
|
64
|
+
* for a detector frame of `width`×`height`. Valid for an axis-aligned frustum
|
|
65
|
+
* (no skew); principal point uses the TOP-LEFT-origin pixel convention.
|
|
66
|
+
*
|
|
67
|
+
* Derivation (see qr-pose.ts.md): for clip = P·v_view and pixel
|
|
68
|
+
* px = (ndc.x+1)·W/2, py = (1−ndc.y)·H/2 with ndc = clip.xy / (−Z):
|
|
69
|
+
* fx = P[0]·W/2, fy = P[5]·H/2, cx = (1−P[8])·W/2, cy = (1+P[9])·H/2.
|
|
70
|
+
*/
|
|
71
|
+
function intrinsicsFromProjection(projection, width, height) {
|
|
72
|
+
if (!projection || projection.length !== 16) throw new RangeError("qr-pose: projection must be a 16-element matrix");
|
|
73
|
+
if (!(width > 0) || !(height > 0)) throw new RangeError("qr-pose: width and height must be positive");
|
|
74
|
+
return {
|
|
75
|
+
fx: projection[0] * width / 2,
|
|
76
|
+
fy: projection[5] * height / 2,
|
|
77
|
+
cx: (1 - projection[8]) * width / 2,
|
|
78
|
+
cy: (1 + projection[9]) * height / 2
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Project a point given in the WebXR camera frame (+x right, +y up, −z forward)
|
|
83
|
+
* to a pixel (top-left origin). Returns `null` for points not strictly in front
|
|
84
|
+
* of the camera (z ≥ 0) or non-finite results.
|
|
85
|
+
*/
|
|
86
|
+
function projectViewPoint(pointInCamera, intrinsics) {
|
|
87
|
+
const [x, y, z] = pointInCamera;
|
|
88
|
+
const depth = -z;
|
|
89
|
+
if (!(depth > 0) || !Number.isFinite(depth)) return null;
|
|
90
|
+
const px = intrinsics.cx + intrinsics.fx * x / depth;
|
|
91
|
+
const py = intrinsics.cy - intrinsics.fy * y / depth;
|
|
92
|
+
return Number.isFinite(px) && Number.isFinite(py) ? {
|
|
93
|
+
x: px,
|
|
94
|
+
y: py
|
|
95
|
+
} : null;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Convert a solved OpenCV pose (object→OpenCV-camera) into the QR pose in the
|
|
99
|
+
* WebXR camera frame. Left-multiply by Rx(π): rotation = Rx(π)·R, position =
|
|
100
|
+
* Rx(π)·t = (t0, −t1, −t2).
|
|
101
|
+
*/
|
|
102
|
+
function qrInCameraFromOpenCv(pnp) {
|
|
103
|
+
const { rvec, tvec } = pnp;
|
|
104
|
+
const angle = Math.hypot(rvec[0], rvec[1], rvec[2]);
|
|
105
|
+
const qR = quat.create();
|
|
106
|
+
if (angle > 1e-12) {
|
|
107
|
+
const axis = vec3.fromValues(rvec[0] / angle, rvec[1] / angle, rvec[2] / angle);
|
|
108
|
+
quat.setAxisAngle(qR, axis, angle);
|
|
109
|
+
}
|
|
110
|
+
const rxPi = quat.fromValues(1, 0, 0, 0);
|
|
111
|
+
const qWorld = quat.multiply(quat.create(), rxPi, qR);
|
|
112
|
+
quat.normalize(qWorld, qWorld);
|
|
113
|
+
return {
|
|
114
|
+
rotation: [
|
|
115
|
+
qWorld[0],
|
|
116
|
+
qWorld[1],
|
|
117
|
+
qWorld[2],
|
|
118
|
+
qWorld[3]
|
|
119
|
+
],
|
|
120
|
+
position: [
|
|
121
|
+
tvec[0],
|
|
122
|
+
-tvec[1],
|
|
123
|
+
-tvec[2]
|
|
124
|
+
]
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
/** Compose two rigid poses: result = parent ∘ child (child expressed in parent). */
|
|
128
|
+
function composePose(parent, child) {
|
|
129
|
+
const pq = quat.fromValues(parent.rotation[0], parent.rotation[1], parent.rotation[2], parent.rotation[3]);
|
|
130
|
+
const cq = quat.fromValues(child.rotation[0], child.rotation[1], child.rotation[2], child.rotation[3]);
|
|
131
|
+
const rq = quat.multiply(quat.create(), pq, cq);
|
|
132
|
+
quat.normalize(rq, rq);
|
|
133
|
+
const childPos = vec3.fromValues(child.position[0], child.position[1], child.position[2]);
|
|
134
|
+
const rotated = vec3.transformQuat(vec3.create(), childPos, pq);
|
|
135
|
+
return {
|
|
136
|
+
rotation: [
|
|
137
|
+
rq[0],
|
|
138
|
+
rq[1],
|
|
139
|
+
rq[2],
|
|
140
|
+
rq[3]
|
|
141
|
+
],
|
|
142
|
+
position: [
|
|
143
|
+
rotated[0] + parent.position[0],
|
|
144
|
+
rotated[1] + parent.position[1],
|
|
145
|
+
rotated[2] + parent.position[2]
|
|
146
|
+
]
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
/** Invert a rigid pose: if pose maps A→B, the result maps B→A. */
|
|
150
|
+
function invertPose(pose) {
|
|
151
|
+
const q = quat.fromValues(pose.rotation[0], pose.rotation[1], pose.rotation[2], pose.rotation[3]);
|
|
152
|
+
const inv = quat.invert(quat.create(), q);
|
|
153
|
+
quat.normalize(inv, inv);
|
|
154
|
+
const p = vec3.fromValues(pose.position[0], pose.position[1], pose.position[2]);
|
|
155
|
+
const negRotated = vec3.transformQuat(vec3.create(), p, inv);
|
|
156
|
+
return {
|
|
157
|
+
rotation: [
|
|
158
|
+
inv[0],
|
|
159
|
+
inv[1],
|
|
160
|
+
inv[2],
|
|
161
|
+
inv[3]
|
|
162
|
+
],
|
|
163
|
+
position: [
|
|
164
|
+
-negRotated[0],
|
|
165
|
+
-negRotated[1],
|
|
166
|
+
-negRotated[2]
|
|
167
|
+
]
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Signed area of the quad TL→TR→BR→BL via the shoelace formula, in image
|
|
172
|
+
* pixels (top-left origin, y down). A front-facing QR imaged in symbol order is
|
|
173
|
+
* clockwise on screen → POSITIVE signed area in this y-down convention. A
|
|
174
|
+
* negative value means the winding is reversed (mirrored / wrong corner order)
|
|
175
|
+
* — the #1 pose bug the briefs warn about.
|
|
176
|
+
*/
|
|
177
|
+
function signedQuadArea(corners) {
|
|
178
|
+
let sum = 0;
|
|
179
|
+
const n = corners.length;
|
|
180
|
+
for (let i = 0; i < n; i++) {
|
|
181
|
+
const a = corners[i];
|
|
182
|
+
const b = corners[(i + 1) % n];
|
|
183
|
+
if (a === void 0 || b === void 0) continue;
|
|
184
|
+
sum += a.x * b.y - b.x * a.y;
|
|
185
|
+
}
|
|
186
|
+
return sum / 2;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Validate the 4 detected corners (assumed ordered TL, TR, BR, BL). Rejects a
|
|
190
|
+
* mirrored winding and degenerate (tiny / collinear) quads. This does NOT
|
|
191
|
+
* re-sort by image position — that would destroy the reading orientation the
|
|
192
|
+
* detector encodes; it only guards the known failure modes.
|
|
193
|
+
*/
|
|
194
|
+
function validateQuad(corners, options = {}) {
|
|
195
|
+
const minAreaPx2 = options.minAreaPx2 ?? 64;
|
|
196
|
+
if (corners.length !== 4 || corners.some((c) => !Number.isFinite(c.x) || !Number.isFinite(c.y))) return {
|
|
197
|
+
ok: false,
|
|
198
|
+
mirrored: false,
|
|
199
|
+
degenerate: true,
|
|
200
|
+
areaPx2: 0
|
|
201
|
+
};
|
|
202
|
+
const signed = signedQuadArea(corners);
|
|
203
|
+
const areaPx2 = Math.abs(signed);
|
|
204
|
+
const mirrored = signed < 0;
|
|
205
|
+
const degenerate = areaPx2 < minAreaPx2;
|
|
206
|
+
return {
|
|
207
|
+
ok: !mirrored && !degenerate,
|
|
208
|
+
mirrored,
|
|
209
|
+
degenerate,
|
|
210
|
+
areaPx2
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* RMS reprojection error (pixels): project the object points through
|
|
215
|
+
* `qrPoseInCamera` (WebXR frame) and the pinhole model, compare to the detected
|
|
216
|
+
* image points. `Infinity` if any point falls behind the camera.
|
|
217
|
+
*/
|
|
218
|
+
function reprojectionErrorPx(objectPoints, imagePoints, qrPoseInCamera, intrinsics) {
|
|
219
|
+
if (objectPoints.length !== imagePoints.length || objectPoints.length === 0) return Infinity;
|
|
220
|
+
let sumSq = 0;
|
|
221
|
+
for (let i = 0; i < objectPoints.length; i++) {
|
|
222
|
+
const obj = objectPoints[i];
|
|
223
|
+
const img = imagePoints[i];
|
|
224
|
+
if (obj === void 0 || img === void 0) return Infinity;
|
|
225
|
+
const projected = projectViewPoint(transformPoint(obj, qrPoseInCamera), intrinsics);
|
|
226
|
+
if (!projected) return Infinity;
|
|
227
|
+
const dx = projected.x - img.x;
|
|
228
|
+
const dy = projected.y - img.y;
|
|
229
|
+
sumSq += dx * dx + dy * dy;
|
|
230
|
+
}
|
|
231
|
+
return Math.sqrt(sumSq / objectPoints.length);
|
|
232
|
+
}
|
|
233
|
+
/** Apply a rigid pose to a point: result = rotation·p + position. */
|
|
234
|
+
function transformPoint(point, pose) {
|
|
235
|
+
const q = quat.fromValues(pose.rotation[0], pose.rotation[1], pose.rotation[2], pose.rotation[3]);
|
|
236
|
+
const p = vec3.fromValues(point[0], point[1], point[2]);
|
|
237
|
+
const r = vec3.transformQuat(vec3.create(), p, q);
|
|
238
|
+
return [
|
|
239
|
+
r[0] + pose.position[0],
|
|
240
|
+
r[1] + pose.position[1],
|
|
241
|
+
r[2] + pose.position[2]
|
|
242
|
+
];
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Full pipeline: detected corners → QR pose in raw-WebXR/odom space. Validates
|
|
246
|
+
* the quad, solves PnP (injected), converts OpenCV→WebXR, composes with the
|
|
247
|
+
* camera pose, and gates on reprojection error. Returns `null` when the
|
|
248
|
+
* detection is rejected at any stage.
|
|
249
|
+
*/
|
|
250
|
+
function solveQrPose(input) {
|
|
251
|
+
const { imagePoints, sizeM, intrinsics, cameraPose, solver, maxReprojectionErrorPx = DEFAULT_MAX_REPROJECTION_ERROR_PX } = input;
|
|
252
|
+
if (!validateQuad(imagePoints).ok) return null;
|
|
253
|
+
const objectPoints = buildObjectPoints(sizeM);
|
|
254
|
+
const pnp = solver.solve(objectPoints, imagePoints, intrinsics);
|
|
255
|
+
if (!pnp) return null;
|
|
256
|
+
if (!pnp.rvec.every(Number.isFinite) || !pnp.tvec.every(Number.isFinite) || pnp.tvec[2] <= 0) return null;
|
|
257
|
+
const qrPoseInCamera = qrInCameraFromOpenCv(pnp);
|
|
258
|
+
const reprojectionErrorPx_ = reprojectionErrorPx(objectPoints, imagePoints, qrPoseInCamera, intrinsics);
|
|
259
|
+
if (!(reprojectionErrorPx_ <= maxReprojectionErrorPx)) return null;
|
|
260
|
+
return {
|
|
261
|
+
qrPoseWorld: composePose(cameraPose, qrPoseInCamera),
|
|
262
|
+
qrPoseInCamera,
|
|
263
|
+
reprojectionErrorPx: reprojectionErrorPx_
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
//#endregion
|
|
267
|
+
export { buildObjectPoints, composePose, intrinsicsFromProjection, invertPose, projectViewPoint, qrInCameraFromOpenCv, reprojectionErrorPx, signedQuadArea, solveQrPose, transformPoint, validateQuad };
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { createDepthUnprojector } from "./depth-unprojection.js";
|
|
2
|
+
import { createDepthGridLookup } from "./depth-grid-lookup.js";
|
|
3
|
+
//#region ../src/ar/qr-size-depth-context.ts
|
|
4
|
+
/**
|
|
5
|
+
* `createQrSizeDepthContext` — build a {@link QrSizeDepthContext} (unprojector +
|
|
6
|
+
* bilinear depth-grid lookup) from one {@link DepthSample}.
|
|
7
|
+
*
|
|
8
|
+
* This is the **shared** depth-context constructor for the QR sizing path. Both
|
|
9
|
+
* consumers used to wire it independently:
|
|
10
|
+
* - the QR-tracking demo's `seams.getDepthContext` (live latest sample), and
|
|
11
|
+
* - the Recorder live-QR `qr-depth-resolver.contextFromSample` (as-of join).
|
|
12
|
+
* They were byte-for-byte the same `createDepthUnprojector` +
|
|
13
|
+
* `createDepthGridLookup` + `depthAt` wiring — a divergence risk (e.g. one
|
|
14
|
+
* switching nearest↔bilinear would silently make the two apps measure different
|
|
15
|
+
* QR sizes). Centralizing it here keeps them identical by construction; each
|
|
16
|
+
* consumer composes whatever extra it needs on top (the demo adds `cameraPose` +
|
|
17
|
+
* `projectionMatrix` for the PnP intrinsics).
|
|
18
|
+
*
|
|
19
|
+
* Deep-imported via `…/ar/qr-size-depth-context` (NOT the `…/ar` barrel) so the
|
|
20
|
+
* Recorder's partially-mocked wiring tests don't pull heavy transitive deps —
|
|
21
|
+
* same rationale as `qr-depth-resolver` / `qr-debug-view`.
|
|
22
|
+
*
|
|
23
|
+
* @see qr-size-measurer.ts — the `QrSizeDepthContext` consumer (size measurement).
|
|
24
|
+
* @see depth-unprojection.ts / depth-grid-lookup.ts — the pieces this composes.
|
|
25
|
+
*/
|
|
26
|
+
/**
|
|
27
|
+
* Build a {@link QrSizeDepthContext} from one depth sample, or `null` when it has
|
|
28
|
+
* no projection matrix / a singular one (the unprojector cannot be built). The
|
|
29
|
+
* grid lookup is **bilinear** (depth varies smoothly across a small QR face,
|
|
30
|
+
* rather than snapping to one nearest node). Best-effort — never throws.
|
|
31
|
+
*/
|
|
32
|
+
function createQrSizeDepthContext(sample) {
|
|
33
|
+
const unprojector = createDepthUnprojector(sample.cameraPos, sample.cameraRot, sample.projectionMatrix);
|
|
34
|
+
if (!unprojector) return null;
|
|
35
|
+
const lookup = createDepthGridLookup(sample.points);
|
|
36
|
+
return {
|
|
37
|
+
unprojector,
|
|
38
|
+
depthAt: (x, y) => lookup.depthAt(x, y)
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
//#endregion
|
|
42
|
+
export { createQrSizeDepthContext };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { a as QrSizeMeasurerOptions, i as QrSizeMeasurer, n as QrSizeDepthContext, o as createQrSizeMeasurer, r as QrSizeMeasurement, t as ImageSize } from "../qr-size-measurer-DQdAsid1.js";
|
|
2
|
+
export { ImageSize, QrSizeDepthContext, QrSizeMeasurement, QrSizeMeasurer, QrSizeMeasurerOptions, createQrSizeMeasurer };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as getCameraFollower, c as getReplayState, d as updateOrbitTarget, i as getAlignmentLerper, l as initReplayScene, n as ReplaySceneState, o as getCameraMode, r as disposeReplayScene, s as getCss3dManager, t as CameraMode, u as toggleCameraMode } from "../replay-scene-
|
|
1
|
+
import { a as getCameraFollower, c as getReplayState, d as updateOrbitTarget, i as getAlignmentLerper, l as initReplayScene, n as ReplaySceneState, o as getCameraMode, r as disposeReplayScene, s as getCss3dManager, t as CameraMode, u as toggleCameraMode } from "../replay-scene-DBlDrV_x.js";
|
|
2
2
|
export { CameraMode, ReplaySceneState, disposeReplayScene, getAlignmentLerper, getCameraFollower, getCameraMode, getCss3dManager, getReplayState, initReplayScene, toggleCameraMode, updateOrbitTarget };
|
package/dist/ar/replay-scene.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createLogger } from "../utils/logger.js";
|
|
2
|
-
import {
|
|
2
|
+
import { D as setCamera, E as setArWorldGroup, N as setScene, T as setArPose, i as createSceneHierarchy } from "../webxr-session-DG-eNfny.js";
|
|
3
3
|
import { createCss3dRendererManager } from "../visualization/css3d-renderer-manager.js";
|
|
4
4
|
import { createCameraFollower } from "../visualization/camera-follower.js";
|
|
5
5
|
import { createAlignmentLerper } from "../visualization/alignment-lerper.js";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as SCENE_NODE } from "../scene-node-names-
|
|
1
|
+
import { t as SCENE_NODE } from "../scene-node-names-BiShOQDB.js";
|
|
2
2
|
export { SCENE_NODE };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as WEBXR_TO_NUE } from "../webxr-nue-basis-
|
|
1
|
+
import { t as WEBXR_TO_NUE } from "../webxr-nue-basis-3nfjDJJp.js";
|
|
2
2
|
export { WEBXR_TO_NUE };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { i as DepthSample, t as ARPose } from "../ar-types-
|
|
2
|
-
import { n as CapturedImage } from "../image-capture-
|
|
3
|
-
import { A as
|
|
4
|
-
export { ARPose, CapturedImage, DepthSample, SessionFeatureOptions, TrackingSubscribableStore, applyAlignmentMatrix, buildSessionOptions, createSceneHierarchy, endARSession, extractPoseFromViewer, extractResetTransformData, getArPose, getArWorldGroup, getCamera, getCurrentArPose, getDepthSampleCount, getImageCaptureFrameCount, getLiveCss3dManager, getScene, getXrCameraFromPose, initAR, isWebXRSupported, isXRCameraLike, nuePositionToWebXR, nueQuaternionToWebXR, resetWebXRState, setArPose, setArWorldGroup, setCamera, setDepthCaptureCallback, setFrameCallback, setImageCaptureCallback, setScene, setTrackingCallbacks, setTrackingLostCallback, setTrackingRecoveredCallback, setTrackingStore, shouldLogCameraAccessDiagnostic, startDepthCapture, startImageCapture, stopDepthCapture, stopImageCapture };
|
|
1
|
+
import { i as DepthSample, t as ARPose } from "../ar-types-BFX2r1wk.js";
|
|
2
|
+
import { n as CapturedImage } from "../image-capture-CNZDrQXG.js";
|
|
3
|
+
import { A as setCamera, B as setTrackingStore, C as isWebXRSupported, D as resetWebXRState, E as nueQuaternionToWebXR, F as setImageQualityAnalyzer, G as stopCameraFrameCapture, H as startCameraFrameCapture, I as setScene, K as stopDepthCapture, L as setTrackingCallbacks, M as setDepthCaptureCallback, N as setFrameCallback, O as setArPose, P as setImageCaptureCallback, R as setTrackingLostCallback, S as initAR, T as nuePositionToWebXR, U as startDepthCapture, V as shouldLogCameraAccessDiagnostic, W as startImageCapture, _ as getDepthSampleCount, a as applyAlignmentMatrix, b as getScene, c as endARSession, d as getArPose, f as getArWorldGroup, g as getCurrentArPose, h as getCameraFrameCount, i as TrackingSubscribableStore, j as setCameraFrameCallback, k as setArWorldGroup, l as extractPoseFromViewer, m as getCameraFrameCaptureSize, n as DEFAULT_CAMERA_FRAME_CAPTURE_SIZE, o as buildSessionOptions, p as getCamera, q as stopImageCapture, r as SessionFeatureOptions, s as createSceneHierarchy, t as CameraFrameCaptureConfig, u as extractResetTransformData, v as getImageCaptureFrameCount, w as isXRCameraLike, x as getXrCameraFromPose, y as getLiveCss3dManager, z as setTrackingRecoveredCallback } from "../webxr-session-Do5L6G3B.js";
|
|
4
|
+
export { ARPose, CameraFrameCaptureConfig, CapturedImage, DEFAULT_CAMERA_FRAME_CAPTURE_SIZE, DepthSample, SessionFeatureOptions, TrackingSubscribableStore, applyAlignmentMatrix, buildSessionOptions, createSceneHierarchy, endARSession, extractPoseFromViewer, extractResetTransformData, getArPose, getArWorldGroup, getCamera, getCameraFrameCaptureSize, getCameraFrameCount, getCurrentArPose, getDepthSampleCount, getImageCaptureFrameCount, getLiveCss3dManager, getScene, getXrCameraFromPose, initAR, isWebXRSupported, isXRCameraLike, nuePositionToWebXR, nueQuaternionToWebXR, resetWebXRState, setArPose, setArWorldGroup, setCamera, setCameraFrameCallback, setDepthCaptureCallback, setFrameCallback, setImageCaptureCallback, setImageQualityAnalyzer, setScene, setTrackingCallbacks, setTrackingLostCallback, setTrackingRecoveredCallback, setTrackingStore, shouldLogCameraAccessDiagnostic, startCameraFrameCapture, startDepthCapture, startImageCapture, stopCameraFrameCapture, stopDepthCapture, stopImageCapture };
|
package/dist/ar/webxr-session.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { A as
|
|
2
|
-
export { applyAlignmentMatrix, buildSessionOptions, createSceneHierarchy, endARSession, extractPoseFromViewer, extractResetTransformData, getArPose, getArWorldGroup, getCamera, getCurrentArPose, getDepthSampleCount, getImageCaptureFrameCount, getLiveCss3dManager, getScene, getXrCameraFromPose, initAR, isWebXRSupported, isXRCameraLike, nuePositionToWebXR, nueQuaternionToWebXR, resetWebXRState, setArPose, setArWorldGroup, setCamera, setDepthCaptureCallback, setFrameCallback, setImageCaptureCallback, setScene, setTrackingCallbacks, setTrackingLostCallback, setTrackingRecoveredCallback, setTrackingStore, shouldLogCameraAccessDiagnostic, startDepthCapture, startImageCapture, stopDepthCapture, stopImageCapture };
|
|
1
|
+
import { A as setFrameCallback, B as startDepthCapture, C as nueQuaternionToWebXR, D as setCamera, E as setArWorldGroup, F as setTrackingLostCallback, H as stopCameraFrameCapture, I as setTrackingRecoveredCallback, L as setTrackingStore, M as setImageQualityAnalyzer, N as setScene, O as setCameraFrameCallback, P as setTrackingCallbacks, R as shouldLogCameraAccessDiagnostic, S as nuePositionToWebXR, T as setArPose, U as stopDepthCapture, V as startImageCapture, W as stopImageCapture, _ as getScene, a as endARSession, b as isWebXRSupported, c as getArPose, d as getCameraFrameCaptureSize, f as getCameraFrameCount, g as getLiveCss3dManager, h as getImageCaptureFrameCount, i as createSceneHierarchy, j as setImageCaptureCallback, k as setDepthCaptureCallback, l as getArWorldGroup, m as getDepthSampleCount, n as applyAlignmentMatrix, o as extractPoseFromViewer, p as getCurrentArPose, r as buildSessionOptions, s as extractResetTransformData, t as DEFAULT_CAMERA_FRAME_CAPTURE_SIZE, u as getCamera, v as getXrCameraFromPose, w as resetWebXRState, x as isXRCameraLike, y as initAR, z as startCameraFrameCapture } from "../webxr-session-DG-eNfny.js";
|
|
2
|
+
export { DEFAULT_CAMERA_FRAME_CAPTURE_SIZE, applyAlignmentMatrix, buildSessionOptions, createSceneHierarchy, endARSession, extractPoseFromViewer, extractResetTransformData, getArPose, getArWorldGroup, getCamera, getCameraFrameCaptureSize, getCameraFrameCount, getCurrentArPose, getDepthSampleCount, getImageCaptureFrameCount, getLiveCss3dManager, getScene, getXrCameraFromPose, initAR, isWebXRSupported, isXRCameraLike, nuePositionToWebXR, nueQuaternionToWebXR, resetWebXRState, setArPose, setArWorldGroup, setCamera, setCameraFrameCallback, setDepthCaptureCallback, setFrameCallback, setImageCaptureCallback, setImageQualityAnalyzer, setScene, setTrackingCallbacks, setTrackingLostCallback, setTrackingRecoveredCallback, setTrackingStore, shouldLogCameraAccessDiagnostic, startCameraFrameCapture, startDepthCapture, startImageCapture, stopCameraFrameCapture, stopDepthCapture, stopImageCapture };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { i as acquireCameraTexture, n as RendererLike, r as XRCameraLike, t as CameraTextureResult } from "../xr-camera-texture-
|
|
1
|
+
import { i as acquireCameraTexture, n as RendererLike, r as XRCameraLike, t as CameraTextureResult } from "../xr-camera-texture-Cva1q3Qj.js";
|
|
2
2
|
export { CameraTextureResult, RendererLike, XRCameraLike, acquireCameraTexture };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as XR_ERROR_MESSAGE_UNKNOWN, r as getXrErrorMessage, t as XR_ERROR_MESSAGES } from "../xr-error-handler-
|
|
1
|
+
import { n as XR_ERROR_MESSAGE_UNKNOWN, r as getXrErrorMessage, t as XR_ERROR_MESSAGES } from "../xr-error-handler-CtvHpjfm.js";
|
|
2
2
|
export { XR_ERROR_MESSAGES, XR_ERROR_MESSAGE_UNKNOWN, getXrErrorMessage };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as runXrFrameUpdates, i as registerXrFrameUpdate, n as XrFrameUpdate, r as clearXrFrameUpdates, t as XrFrameContext } from "../xr-frame-loop-
|
|
1
|
+
import { a as runXrFrameUpdates, i as registerXrFrameUpdate, n as XrFrameUpdate, r as clearXrFrameUpdates, t as XrFrameContext } from "../xr-frame-loop-DIYtRcUa.js";
|
|
2
2
|
export { XrFrameContext, XrFrameUpdate, clearXrFrameUpdates, registerXrFrameUpdate, runXrFrameUpdates };
|