@iwsdk/core 0.1.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/LICENSE +21 -0
- package/dist/asset/asset-manager.d.ts +72 -0
- package/dist/asset/asset-manager.d.ts.map +1 -0
- package/dist/asset/asset-manager.js +138 -0
- package/dist/asset/asset-manager.js.map +1 -0
- package/dist/asset/cache-manager.d.ts +44 -0
- package/dist/asset/cache-manager.d.ts.map +1 -0
- package/dist/asset/cache-manager.js +80 -0
- package/dist/asset/cache-manager.js.map +1 -0
- package/dist/asset/index.d.ts +9 -0
- package/dist/asset/index.d.ts.map +1 -0
- package/dist/asset/loaders/audio-loader.d.ts +21 -0
- package/dist/asset/loaders/audio-loader.d.ts.map +1 -0
- package/dist/asset/loaders/audio-loader.js +57 -0
- package/dist/asset/loaders/audio-loader.js.map +1 -0
- package/dist/asset/loaders/gltf-loader.d.ts +33 -0
- package/dist/asset/loaders/gltf-loader.d.ts.map +1 -0
- package/dist/asset/loaders/gltf-loader.js +79 -0
- package/dist/asset/loaders/gltf-loader.js.map +1 -0
- package/dist/asset/loaders/hdr-texture-loader.d.ts +18 -0
- package/dist/asset/loaders/hdr-texture-loader.d.ts.map +1 -0
- package/dist/asset/loaders/hdr-texture-loader.js +65 -0
- package/dist/asset/loaders/hdr-texture-loader.js.map +1 -0
- package/dist/asset/loaders/texture-loader.d.ts +21 -0
- package/dist/asset/loaders/texture-loader.d.ts.map +1 -0
- package/dist/asset/loaders/texture-loader.js +57 -0
- package/dist/asset/loaders/texture-loader.js.map +1 -0
- package/dist/audio/audio-pool.d.ts +59 -0
- package/dist/audio/audio-pool.d.ts.map +1 -0
- package/dist/audio/audio-pool.js +105 -0
- package/dist/audio/audio-pool.js.map +1 -0
- package/dist/audio/audio-system.d.ts +326 -0
- package/dist/audio/audio-system.d.ts.map +1 -0
- package/dist/audio/audio-system.js +478 -0
- package/dist/audio/audio-system.js.map +1 -0
- package/dist/audio/audio-utils.d.ts +71 -0
- package/dist/audio/audio-utils.d.ts.map +1 -0
- package/dist/audio/audio-utils.js +145 -0
- package/dist/audio/audio-utils.js.map +1 -0
- package/dist/audio/audio.d.ts +178 -0
- package/dist/audio/audio.d.ts.map +1 -0
- package/dist/audio/audio.js +104 -0
- package/dist/audio/audio.js.map +1 -0
- package/dist/audio/index.d.ts +11 -0
- package/dist/audio/index.d.ts.map +1 -0
- package/dist/ecs/component-registry.d.ts +54 -0
- package/dist/ecs/component-registry.d.ts.map +1 -0
- package/dist/ecs/component-registry.js +86 -0
- package/dist/ecs/component-registry.js.map +1 -0
- package/dist/ecs/component.d.ts +12 -0
- package/dist/ecs/component.d.ts.map +1 -0
- package/dist/ecs/entity.d.ts +17 -0
- package/dist/ecs/entity.d.ts.map +1 -0
- package/dist/ecs/entity.js +13 -0
- package/dist/ecs/entity.js.map +1 -0
- package/dist/ecs/index.d.ts +12 -0
- package/dist/ecs/index.d.ts.map +1 -0
- package/dist/ecs/system.d.ts +70 -0
- package/dist/ecs/system.d.ts.map +1 -0
- package/dist/ecs/system.js +79 -0
- package/dist/ecs/system.js.map +1 -0
- package/dist/ecs/world.d.ts +101 -0
- package/dist/ecs/world.d.ts.map +1 -0
- package/dist/ecs/world.js +165 -0
- package/dist/ecs/world.js.map +1 -0
- package/dist/environment/dome-gradient.d.ts +39 -0
- package/dist/environment/dome-gradient.d.ts.map +1 -0
- package/dist/environment/dome-gradient.js +30 -0
- package/dist/environment/dome-gradient.js.map +1 -0
- package/dist/environment/dome-texture.d.ts +39 -0
- package/dist/environment/dome-texture.d.ts.map +1 -0
- package/dist/environment/dome-texture.js +30 -0
- package/dist/environment/dome-texture.js.map +1 -0
- package/dist/environment/environment-system.d.ts +82 -0
- package/dist/environment/environment-system.d.ts.map +1 -0
- package/dist/environment/environment-system.js +389 -0
- package/dist/environment/environment-system.js.map +1 -0
- package/dist/environment/gradient-environment.d.ts +37 -0
- package/dist/environment/gradient-environment.d.ts.map +1 -0
- package/dist/environment/gradient-environment.js +99 -0
- package/dist/environment/gradient-environment.js.map +1 -0
- package/dist/environment/ibl-gradient.d.ts +38 -0
- package/dist/environment/ibl-gradient.d.ts.map +1 -0
- package/dist/environment/ibl-gradient.js +29 -0
- package/dist/environment/ibl-gradient.js.map +1 -0
- package/dist/environment/ibl-texture.d.ts +36 -0
- package/dist/environment/ibl-texture.d.ts.map +1 -0
- package/dist/environment/ibl-texture.js +30 -0
- package/dist/environment/ibl-texture.js.map +1 -0
- package/dist/environment/index.d.ts +12 -0
- package/dist/environment/index.d.ts.map +1 -0
- package/dist/grab/distance-grabbable.d.ts +115 -0
- package/dist/grab/distance-grabbable.d.ts.map +1 -0
- package/dist/grab/distance-grabbable.js +102 -0
- package/dist/grab/distance-grabbable.js.map +1 -0
- package/dist/grab/grab-system.d.ts +320 -0
- package/dist/grab/grab-system.d.ts.map +1 -0
- package/dist/grab/grab-system.js +239 -0
- package/dist/grab/grab-system.js.map +1 -0
- package/dist/grab/handles.d.ts +43 -0
- package/dist/grab/handles.d.ts.map +1 -0
- package/dist/grab/handles.js +132 -0
- package/dist/grab/handles.js.map +1 -0
- package/dist/grab/index.d.ts +13 -0
- package/dist/grab/index.d.ts.map +1 -0
- package/dist/grab/index.js +23 -0
- package/dist/grab/index.js.map +1 -0
- package/dist/grab/one-hand-grabbable.d.ts +80 -0
- package/dist/grab/one-hand-grabbable.d.ts.map +1 -0
- package/dist/grab/one-hand-grabbable.js +80 -0
- package/dist/grab/one-hand-grabbable.js.map +1 -0
- package/dist/grab/pointer-events-patch.d.ts +16 -0
- package/dist/grab/pointer-events-patch.d.ts.map +1 -0
- package/dist/grab/pointer-events-patch.js +223 -0
- package/dist/grab/pointer-events-patch.js.map +1 -0
- package/dist/grab/two-hands-grabbable.d.ts +103 -0
- package/dist/grab/two-hands-grabbable.d.ts.map +1 -0
- package/dist/grab/two-hands-grabbable.js +100 -0
- package/dist/grab/two-hands-grabbable.js.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +82 -0
- package/dist/index.js.map +1 -0
- package/dist/init/index.d.ts +9 -0
- package/dist/init/index.d.ts.map +1 -0
- package/dist/init/world-initializer.d.ts +76 -0
- package/dist/init/world-initializer.d.ts.map +1 -0
- package/dist/init/world-initializer.js +403 -0
- package/dist/init/world-initializer.js.map +1 -0
- package/dist/init/xr.d.ts +87 -0
- package/dist/init/xr.d.ts.map +1 -0
- package/dist/init/xr.js +193 -0
- package/dist/init/xr.js.map +1 -0
- package/dist/input/index.d.ts +9 -0
- package/dist/input/index.d.ts.map +1 -0
- package/dist/input/input-system.d.ts +52 -0
- package/dist/input/input-system.d.ts.map +1 -0
- package/dist/input/input-system.js +176 -0
- package/dist/input/input-system.js.map +1 -0
- package/dist/input/state-tags.d.ts +56 -0
- package/dist/input/state-tags.d.ts.map +1 -0
- package/dist/input/state-tags.js +63 -0
- package/dist/input/state-tags.js.map +1 -0
- package/dist/level/index.d.ts +12 -0
- package/dist/level/index.d.ts.map +1 -0
- package/dist/level/level-entity-creator.d.ts +27 -0
- package/dist/level/level-entity-creator.d.ts.map +1 -0
- package/dist/level/level-entity-creator.js +110 -0
- package/dist/level/level-entity-creator.js.map +1 -0
- package/dist/level/level-glxf-importer.d.ts +22 -0
- package/dist/level/level-glxf-importer.d.ts.map +1 -0
- package/dist/level/level-glxf-importer.js +40 -0
- package/dist/level/level-glxf-importer.js.map +1 -0
- package/dist/level/level-root.d.ts +18 -0
- package/dist/level/level-root.d.ts.map +1 -0
- package/dist/level/level-root.js +25 -0
- package/dist/level/level-root.js.map +1 -0
- package/dist/level/level-system.d.ts +54 -0
- package/dist/level/level-system.d.ts.map +1 -0
- package/dist/level/level-system.js +134 -0
- package/dist/level/level-system.js.map +1 -0
- package/dist/level/level-tag.d.ts +25 -0
- package/dist/level/level-tag.d.ts.map +1 -0
- package/dist/level/level-tag.js +28 -0
- package/dist/level/level-tag.js.map +1 -0
- package/dist/locomotion/geometries/beveled-cylinder.d.ts +12 -0
- package/dist/locomotion/geometries/beveled-cylinder.d.ts.map +1 -0
- package/dist/locomotion/geometries/beveled-cylinder.js +64 -0
- package/dist/locomotion/geometries/beveled-cylinder.js.map +1 -0
- package/dist/locomotion/index.d.ts +11 -0
- package/dist/locomotion/index.d.ts.map +1 -0
- package/dist/locomotion/locomotion.d.ts +239 -0
- package/dist/locomotion/locomotion.d.ts.map +1 -0
- package/dist/locomotion/locomotion.js +256 -0
- package/dist/locomotion/locomotion.js.map +1 -0
- package/dist/locomotion/materials/line.d.ts +24 -0
- package/dist/locomotion/materials/line.d.ts.map +1 -0
- package/dist/locomotion/materials/line.js +307 -0
- package/dist/locomotion/materials/line.js.map +1 -0
- package/dist/locomotion/slide.d.ts +76 -0
- package/dist/locomotion/slide.d.ts.map +1 -0
- package/dist/locomotion/slide.js +131 -0
- package/dist/locomotion/slide.js.map +1 -0
- package/dist/locomotion/teleport.d.ts +68 -0
- package/dist/locomotion/teleport.d.ts.map +1 -0
- package/dist/locomotion/teleport.js +150 -0
- package/dist/locomotion/teleport.js.map +1 -0
- package/dist/locomotion/turn.d.ts +77 -0
- package/dist/locomotion/turn.d.ts.map +1 -0
- package/dist/locomotion/turn.js +126 -0
- package/dist/locomotion/turn.js.map +1 -0
- package/dist/node_modules/.pnpm/@pmndrs_uikitml@0.0.10_@pmndrs_uikit@1.0.32_super-three@0.177.0_/node_modules/@pmndrs/uikitml/dist/index.js +13 -0
- package/dist/node_modules/.pnpm/@pmndrs_uikitml@0.0.10_@pmndrs_uikit@1.0.32_super-three@0.177.0_/node_modules/@pmndrs/uikitml/dist/index.js.map +1 -0
- package/dist/node_modules/.pnpm/@pmndrs_uikitml@0.0.10_@pmndrs_uikit@1.0.32_super-three@0.177.0_/node_modules/@pmndrs/uikitml/dist/interpreter/index.js +154 -0
- package/dist/node_modules/.pnpm/@pmndrs_uikitml@0.0.10_@pmndrs_uikit@1.0.32_super-three@0.177.0_/node_modules/@pmndrs/uikitml/dist/interpreter/index.js.map +1 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/error-codes.js +66 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/error-codes.js.map +1 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/foreign-content.js +162 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/foreign-content.js.map +1 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/html.js +519 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/html.js.map +1 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/token.js +15 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/token.js.map +1 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/unicode.js +32 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/unicode.js.map +1 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/formatting-element-list.js +10 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/formatting-element-list.js.map +1 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/index.js +41 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/index.js.map +1 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/open-element-stack.js +35 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/open-element-stack.js.map +1 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/serializer/index.js +24 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/serializer/index.js.map +1 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/tokenizer/index.js +92 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/tokenizer/index.js.map +1 -0
- package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/examples/jsm/libs/fflate.module.js +382 -0
- package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/examples/jsm/libs/fflate.module.js.map +1 -0
- package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/examples/jsm/loaders/EXRLoader.js +2587 -0
- package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/examples/jsm/loaders/EXRLoader.js.map +1 -0
- package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/examples/jsm/loaders/RGBELoader.js +477 -0
- package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/examples/jsm/loaders/RGBELoader.js.map +1 -0
- package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/src/math/MathUtils.js +17 -0
- package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/src/math/MathUtils.js.map +1 -0
- package/dist/physics/index.d.ts +11 -0
- package/dist/physics/index.d.ts.map +1 -0
- package/dist/physics/physics-system.d.ts +314 -0
- package/dist/physics/physics-system.d.ts.map +1 -0
- package/dist/physics/physics-system.js +419 -0
- package/dist/physics/physics-system.js.map +1 -0
- package/dist/physics/physicsBody.d.ts +83 -0
- package/dist/physics/physicsBody.d.ts.map +1 -0
- package/dist/physics/physicsBody.js +60 -0
- package/dist/physics/physicsBody.js.map +1 -0
- package/dist/physics/physicsManipulation.d.ts +51 -0
- package/dist/physics/physicsManipulation.d.ts.map +1 -0
- package/dist/physics/physicsManipulation.js +46 -0
- package/dist/physics/physicsManipulation.js.map +1 -0
- package/dist/physics/physicsShape.d.ts +133 -0
- package/dist/physics/physicsShape.d.ts.map +1 -0
- package/dist/physics/physicsShape.js +97 -0
- package/dist/physics/physicsShape.js.map +1 -0
- package/dist/physics/utils.d.ts +21 -0
- package/dist/physics/utils.d.ts.map +1 -0
- package/dist/physics/utils.js +130 -0
- package/dist/physics/utils.js.map +1 -0
- package/dist/runtime/index.d.ts +8 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/three.d.ts +8 -0
- package/dist/runtime/three.d.ts.map +1 -0
- package/dist/runtime/three.js +18 -0
- package/dist/runtime/three.js.map +1 -0
- package/dist/scene-understanding/anchor.d.ts +42 -0
- package/dist/scene-understanding/anchor.d.ts.map +1 -0
- package/dist/scene-understanding/anchor.js +45 -0
- package/dist/scene-understanding/anchor.js.map +1 -0
- package/dist/scene-understanding/index.d.ts +11 -0
- package/dist/scene-understanding/index.d.ts.map +1 -0
- package/dist/scene-understanding/mesh.d.ts +67 -0
- package/dist/scene-understanding/mesh.d.ts.map +1 -0
- package/dist/scene-understanding/mesh.js +55 -0
- package/dist/scene-understanding/mesh.js.map +1 -0
- package/dist/scene-understanding/plane.d.ts +39 -0
- package/dist/scene-understanding/plane.d.ts.map +1 -0
- package/dist/scene-understanding/plane.js +42 -0
- package/dist/scene-understanding/plane.js.map +1 -0
- package/dist/scene-understanding/scene-understanding-system.d.ts +180 -0
- package/dist/scene-understanding/scene-understanding-system.d.ts.map +1 -0
- package/dist/scene-understanding/scene-understanding-system.js +342 -0
- package/dist/scene-understanding/scene-understanding-system.js.map +1 -0
- package/dist/transform/index.d.ts +10 -0
- package/dist/transform/index.d.ts.map +1 -0
- package/dist/transform/synced-quaternion.d.ts +35 -0
- package/dist/transform/synced-quaternion.d.ts.map +1 -0
- package/dist/transform/synced-quaternion.js +128 -0
- package/dist/transform/synced-quaternion.js.map +1 -0
- package/dist/transform/synced-vector3.d.ts +34 -0
- package/dist/transform/synced-vector3.d.ts.map +1 -0
- package/dist/transform/synced-vector3.js +106 -0
- package/dist/transform/synced-vector3.js.map +1 -0
- package/dist/transform/transform.d.ts +100 -0
- package/dist/transform/transform.d.ts.map +1 -0
- package/dist/transform/transform.js +194 -0
- package/dist/transform/transform.js.map +1 -0
- package/dist/types/webxr-augmentations.d.ts +23 -0
- package/dist/types/webxr-augmentations.d.ts.map +1 -0
- package/dist/ui/document.d.ts +112 -0
- package/dist/ui/document.d.ts.map +1 -0
- package/dist/ui/document.js +298 -0
- package/dist/ui/document.js.map +1 -0
- package/dist/ui/follow.d.ts +197 -0
- package/dist/ui/follow.d.ts.map +1 -0
- package/dist/ui/follow.js +143 -0
- package/dist/ui/follow.js.map +1 -0
- package/dist/ui/index.d.ts +18 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/screenspace.d.ts +219 -0
- package/dist/ui/screenspace.d.ts.map +1 -0
- package/dist/ui/screenspace.js +215 -0
- package/dist/ui/screenspace.js.map +1 -0
- package/dist/ui/ui.d.ts +209 -0
- package/dist/ui/ui.d.ts.map +1 -0
- package/dist/ui/ui.js +185 -0
- package/dist/ui/ui.js.map +1 -0
- package/dist/vendor/basis/README.md +46 -0
- package/dist/vendor/basis/basis_transcoder.js +19 -0
- package/dist/vendor/basis/basis_transcoder.wasm +0 -0
- package/dist/vendor/draco/README.md +32 -0
- package/dist/vendor/draco/draco_decoder.js +34 -0
- package/dist/vendor/draco/draco_decoder.wasm +0 -0
- package/dist/vendor/draco/draco_encoder.js +33 -0
- package/dist/vendor/draco/draco_wasm_wrapper.js +117 -0
- package/dist/vendor/draco/gltf/draco_decoder.js +33 -0
- package/dist/vendor/draco/gltf/draco_decoder.wasm +0 -0
- package/dist/vendor/draco/gltf/draco_encoder.js +33 -0
- package/dist/vendor/draco/gltf/draco_wasm_wrapper.js +116 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +4 -0
- package/dist/version.js.map +1 -0
- package/dist/visibility/index.d.ts +8 -0
- package/dist/visibility/index.d.ts.map +1 -0
- package/dist/visibility/visibility.d.ts +37 -0
- package/dist/visibility/visibility.d.ts.map +1 -0
- package/dist/visibility/visibility.js +52 -0
- package/dist/visibility/visibility.js.map +1 -0
- package/package.json +46 -0
|
@@ -0,0 +1,342 @@
|
|
|
1
|
+
import { createSystem } from '../ecs/system.js';
|
|
2
|
+
import '../ecs/world.js';
|
|
3
|
+
import { Types } from 'elics';
|
|
4
|
+
import '../ecs/component-registry.js';
|
|
5
|
+
import '../runtime/three.js';
|
|
6
|
+
import { XRAnchor } from './anchor.js';
|
|
7
|
+
import { XRMesh } from './mesh.js';
|
|
8
|
+
import { XRPlane } from './plane.js';
|
|
9
|
+
import { Group, Matrix4, Mesh, Vector3, BoxGeometry, MeshBasicMaterial, BufferGeometry, BufferAttribute } from 'three';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
13
|
+
*
|
|
14
|
+
* This source code is licensed under the MIT license found in the
|
|
15
|
+
* LICENSE file in the root directory of this source tree.
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* Manages WebXR scene understanding features including plane detection, mesh detection, and anchoring.
|
|
19
|
+
*
|
|
20
|
+
* @remarks
|
|
21
|
+
* - Automatically detects and visualizes real‑world planes and meshes in AR/VR environments.
|
|
22
|
+
* - Creates entities with {@link XRPlane} components for detected planes (floors, walls, ceilings).
|
|
23
|
+
* - Creates entities with {@link XRMesh} components for detected 3D geometry.
|
|
24
|
+
* - Supports anchoring objects to real‑world positions using {@link XRAnchor} components.
|
|
25
|
+
* - Requires WebXR session features: 'plane‑detection', 'mesh‑detection', 'anchor' when using the related features.
|
|
26
|
+
* - Automatically manages entity lifecycle as real‑world geometry changes.
|
|
27
|
+
* - Provides optional visual feedback with wireframe meshes for detected geometry.
|
|
28
|
+
* - Objects with {@link XRAnchor} are automatically attached to a stable world‑anchored group.
|
|
29
|
+
*
|
|
30
|
+
* @example Basic scene understanding setup
|
|
31
|
+
* ```ts
|
|
32
|
+
* // WebXR session must request required features
|
|
33
|
+
* World.create(document.getElementById('scene-container'), {
|
|
34
|
+
* assets,
|
|
35
|
+
* xr: {
|
|
36
|
+
* sessionMode: SessionMode.ImmersiveAR,
|
|
37
|
+
* features: { planeDetection: true, meshDetection: true, anchors: true },
|
|
38
|
+
* }
|
|
39
|
+
* })
|
|
40
|
+
*
|
|
41
|
+
* // Add to your world to enable scene understanding
|
|
42
|
+
* world.addSystem(SceneUnderstandingSystem)
|
|
43
|
+
*
|
|
44
|
+
|
|
45
|
+
* ```
|
|
46
|
+
*
|
|
47
|
+
* @example Create an anchored object
|
|
48
|
+
* ```ts
|
|
49
|
+
* const cube = world.createTransformEntity(cubeObject)
|
|
50
|
+
* cube.addComponent(XRAnchor) // Will be anchored to real-world position
|
|
51
|
+
* ```
|
|
52
|
+
*
|
|
53
|
+
* @example React to detected planes
|
|
54
|
+
* ```ts
|
|
55
|
+
* // Planes are automatically created as entities with XRPlane component
|
|
56
|
+
* system.query({ required: [XRPlane] }).subscribe('qualify', (entity) => {
|
|
57
|
+
* const plane = entity.getValue(XRPlane, '_plane')
|
|
58
|
+
* console.log('New plane detected:', plane.orientation)
|
|
59
|
+
* })
|
|
60
|
+
* ```
|
|
61
|
+
*
|
|
62
|
+
* @category Scene Understanding
|
|
63
|
+
* @see {@link XRPlane}
|
|
64
|
+
* @see {@link XRMesh}
|
|
65
|
+
* @see {@link XRAnchor}
|
|
66
|
+
*/
|
|
67
|
+
class SceneUnderstandingSystem extends createSystem({
|
|
68
|
+
planeEntities: { required: [XRPlane] },
|
|
69
|
+
meshEntities: { required: [XRMesh] },
|
|
70
|
+
anchoredEntities: { required: [XRAnchor] },
|
|
71
|
+
}, {
|
|
72
|
+
showWireFrame: { type: Types.Boolean, default: false },
|
|
73
|
+
}) {
|
|
74
|
+
constructor() {
|
|
75
|
+
super(...arguments);
|
|
76
|
+
this.anchorRequested = false;
|
|
77
|
+
this.currentPlanes = new Map();
|
|
78
|
+
this.currentMeshes = new Map();
|
|
79
|
+
this.anchoredGroup = new Group();
|
|
80
|
+
this.matrixBuffer = new Matrix4();
|
|
81
|
+
}
|
|
82
|
+
init() {
|
|
83
|
+
this.xrManager.addEventListener('sessionstart', async () => {
|
|
84
|
+
this.updateEnabledFeatures(this.xrManager.getSession());
|
|
85
|
+
// Temporarily disabling initiateRoomCapture API call due to the anhor wiping issue.
|
|
86
|
+
// const planes = this.xrManager.getFrame()?.detectedPlanes;
|
|
87
|
+
// const meshes = this.xrManager.getFrame()?.detectedMeshes;
|
|
88
|
+
// if (
|
|
89
|
+
// (!planes || planes.size === 0) &&
|
|
90
|
+
// (!meshes || meshes.size === 0) &&
|
|
91
|
+
// (this.planeFeatureEnabled || this.meshFeatureEnabled)
|
|
92
|
+
// ) {
|
|
93
|
+
// await this.xrManager.getSession()?.initiateRoomCapture();
|
|
94
|
+
// }
|
|
95
|
+
});
|
|
96
|
+
this.scene.add(this.anchoredGroup);
|
|
97
|
+
this.config.showWireFrame.subscribe((value) => {
|
|
98
|
+
this.queries.planeEntities.entities.forEach((planeEntity) => {
|
|
99
|
+
const planeObject = planeEntity.object3D;
|
|
100
|
+
if (planeObject instanceof Mesh) {
|
|
101
|
+
planeObject.material.visible = value;
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
this.queries.meshEntities.entities.forEach((meshEntity) => {
|
|
105
|
+
const meshObject = meshEntity.object3D;
|
|
106
|
+
if (meshObject instanceof Mesh) {
|
|
107
|
+
meshObject.material.visible = value;
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
update(_delta, _time) {
|
|
113
|
+
var _a;
|
|
114
|
+
const frame = this.xrFrame;
|
|
115
|
+
const planes = frame === null || frame === void 0 ? void 0 : frame.detectedPlanes;
|
|
116
|
+
const meshes = frame === null || frame === void 0 ? void 0 : frame.detectedMeshes;
|
|
117
|
+
const referenceSpace = this.xrManager.getReferenceSpace();
|
|
118
|
+
if (this.planeFeatureEnabled) {
|
|
119
|
+
this.updatePlanes(planes, referenceSpace);
|
|
120
|
+
}
|
|
121
|
+
if (this.meshFeatureEnabled) {
|
|
122
|
+
this.updateMeshes(meshes, referenceSpace);
|
|
123
|
+
}
|
|
124
|
+
if (this.anchorFeatureEnabled &&
|
|
125
|
+
this.xrAnchor === undefined &&
|
|
126
|
+
!this.anchorRequested) {
|
|
127
|
+
this.createAnchor(referenceSpace);
|
|
128
|
+
}
|
|
129
|
+
if (this.xrAnchor && referenceSpace) {
|
|
130
|
+
this.updateAnchoredObject();
|
|
131
|
+
const pose = (_a = this.xrManager
|
|
132
|
+
.getFrame()) === null || _a === void 0 ? void 0 : _a.getPose(this.xrAnchor.anchorSpace, referenceSpace);
|
|
133
|
+
if (pose) {
|
|
134
|
+
new Matrix4()
|
|
135
|
+
.fromArray(pose.transform.matrix)
|
|
136
|
+
.decompose(this.anchoredGroup.position, this.anchoredGroup.quaternion, new Vector3());
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
updatePlanes(planes, referenceSpace) {
|
|
141
|
+
this.currentPlanes.clear();
|
|
142
|
+
this.queries.planeEntities.entities.forEach((planeEntity) => {
|
|
143
|
+
if (planes === null || planes === void 0 ? void 0 : planes.has(planeEntity.getValue(XRPlane, '_plane'))) {
|
|
144
|
+
this.currentPlanes.set(planeEntity.getValue(XRPlane, '_plane'), planeEntity);
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
planeEntity.destroy();
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
if (planes) {
|
|
151
|
+
planes.forEach((plane) => {
|
|
152
|
+
var _a;
|
|
153
|
+
if (referenceSpace != null) {
|
|
154
|
+
const pose = this.xrManager
|
|
155
|
+
.getFrame()
|
|
156
|
+
.getPose(plane.planeSpace, referenceSpace);
|
|
157
|
+
if (!pose) {
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
this.matrixBuffer.fromArray(pose.transform.matrix);
|
|
161
|
+
const polygon = plane.polygon;
|
|
162
|
+
let minX = Number.MAX_SAFE_INTEGER;
|
|
163
|
+
let maxX = Number.MIN_SAFE_INTEGER;
|
|
164
|
+
let minZ = Number.MAX_SAFE_INTEGER;
|
|
165
|
+
let maxZ = Number.MIN_SAFE_INTEGER;
|
|
166
|
+
for (const point of polygon) {
|
|
167
|
+
minX = Math.min(minX, point.x);
|
|
168
|
+
maxX = Math.max(maxX, point.x);
|
|
169
|
+
minZ = Math.min(minZ, point.z);
|
|
170
|
+
maxZ = Math.max(maxZ, point.z);
|
|
171
|
+
}
|
|
172
|
+
const width = maxX - minX;
|
|
173
|
+
const height = maxZ - minZ;
|
|
174
|
+
const geometry = new BoxGeometry(width, 0.01, height);
|
|
175
|
+
const material = new MeshBasicMaterial({
|
|
176
|
+
color: 0xffffff * Math.random(),
|
|
177
|
+
wireframe: true,
|
|
178
|
+
visible: this.config.showWireFrame.value,
|
|
179
|
+
});
|
|
180
|
+
if (this.currentPlanes.has(plane) === false) {
|
|
181
|
+
const mesh = new Mesh(geometry, material);
|
|
182
|
+
mesh.position.setFromMatrixPosition(this.matrixBuffer);
|
|
183
|
+
mesh.quaternion.setFromRotationMatrix(this.matrixBuffer);
|
|
184
|
+
const planeEntity = this.world.createTransformEntity(mesh);
|
|
185
|
+
planeEntity.addComponent(XRPlane, {
|
|
186
|
+
_plane: plane,
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
const planeObject = (_a = this.currentPlanes.get(plane)) === null || _a === void 0 ? void 0 : _a.object3D;
|
|
191
|
+
planeObject === null || planeObject === void 0 ? void 0 : planeObject.position.setFromMatrixPosition(this.matrixBuffer);
|
|
192
|
+
planeObject === null || planeObject === void 0 ? void 0 : planeObject.quaternion.setFromRotationMatrix(this.matrixBuffer);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
updateMeshes(meshes, referenceSpace) {
|
|
199
|
+
this.currentMeshes.clear();
|
|
200
|
+
this.queries.meshEntities.entities.forEach((meshEntity) => {
|
|
201
|
+
if (meshes === null || meshes === void 0 ? void 0 : meshes.has(meshEntity.getValue(XRMesh, '_mesh'))) {
|
|
202
|
+
this.currentMeshes.set(meshEntity.getValue(XRMesh, '_mesh'), meshEntity);
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
meshEntity.destroy();
|
|
206
|
+
}
|
|
207
|
+
});
|
|
208
|
+
if (meshes) {
|
|
209
|
+
meshes.forEach((mesh) => {
|
|
210
|
+
var _a;
|
|
211
|
+
if (referenceSpace != null) {
|
|
212
|
+
const pose = this.xrManager
|
|
213
|
+
.getFrame()
|
|
214
|
+
.getPose(mesh.meshSpace, referenceSpace);
|
|
215
|
+
if (!pose) {
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
218
|
+
this.matrixBuffer.fromArray(pose.transform.matrix);
|
|
219
|
+
const geometry = new BufferGeometry();
|
|
220
|
+
geometry.setAttribute('position', new BufferAttribute(mesh.vertices, 3));
|
|
221
|
+
geometry.setIndex(new BufferAttribute(mesh.indices, 1));
|
|
222
|
+
const material = new MeshBasicMaterial({
|
|
223
|
+
color: 0xffffff * Math.random(),
|
|
224
|
+
wireframe: true,
|
|
225
|
+
visible: this.config.showWireFrame.value,
|
|
226
|
+
});
|
|
227
|
+
if (this.currentMeshes.has(mesh) === false) {
|
|
228
|
+
const threeMesh = new Mesh(geometry, material);
|
|
229
|
+
const meshEntity = this.world.createTransformEntity(threeMesh);
|
|
230
|
+
threeMesh.position.setFromMatrixPosition(this.matrixBuffer);
|
|
231
|
+
threeMesh.quaternion.setFromRotationMatrix(this.matrixBuffer);
|
|
232
|
+
if (mesh.semanticLabel === 'global mesh') {
|
|
233
|
+
meshEntity.addComponent(XRMesh, {
|
|
234
|
+
_mesh: mesh,
|
|
235
|
+
isBounded3D: false,
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
const { minEntry, maxEntry } = this.findMinMaxEntries(this.flatToVec3Array(mesh.vertices));
|
|
240
|
+
meshEntity.addComponent(XRMesh, {
|
|
241
|
+
_mesh: mesh,
|
|
242
|
+
isBounded3D: true,
|
|
243
|
+
semanticLabel: mesh.semanticLabel,
|
|
244
|
+
min: [minEntry.x, minEntry.y, minEntry.z],
|
|
245
|
+
max: [maxEntry.x, maxEntry.y, maxEntry.z],
|
|
246
|
+
dimensions: [
|
|
247
|
+
maxEntry.x - minEntry.x,
|
|
248
|
+
maxEntry.y - minEntry.y,
|
|
249
|
+
maxEntry.z - minEntry.z,
|
|
250
|
+
],
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
else {
|
|
255
|
+
const meshObject = (_a = this.currentMeshes.get(mesh)) === null || _a === void 0 ? void 0 : _a.object3D;
|
|
256
|
+
meshObject === null || meshObject === void 0 ? void 0 : meshObject.position.setFromMatrixPosition(this.matrixBuffer);
|
|
257
|
+
meshObject === null || meshObject === void 0 ? void 0 : meshObject.quaternion.setFromRotationMatrix(this.matrixBuffer);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
updateEnabledFeatures(xrSession) {
|
|
264
|
+
if (!xrSession) {
|
|
265
|
+
console.log('Warning: xrSession is null when trying to query enabled features. Scene understanding features are disabled.');
|
|
266
|
+
return;
|
|
267
|
+
}
|
|
268
|
+
const enabledFeatures = xrSession.enabledFeatures;
|
|
269
|
+
this.planeFeatureEnabled = enabledFeatures === null || enabledFeatures === void 0 ? void 0 : enabledFeatures.includes('plane-detection');
|
|
270
|
+
this.meshFeatureEnabled = enabledFeatures === null || enabledFeatures === void 0 ? void 0 : enabledFeatures.includes('mesh-detection');
|
|
271
|
+
this.anchorFeatureEnabled = enabledFeatures === null || enabledFeatures === void 0 ? void 0 : enabledFeatures.includes('anchor');
|
|
272
|
+
if (!this.planeFeatureEnabled) {
|
|
273
|
+
console.log('Warning: plane-detection feature not enabled for WebXR session. Partial Scene Understanding features are disabled.');
|
|
274
|
+
}
|
|
275
|
+
if (!this.meshFeatureEnabled) {
|
|
276
|
+
console.log('Warning: mesh-detection feature not enabled for WebXR session. Partial Scene Understanding features are disabled.');
|
|
277
|
+
}
|
|
278
|
+
if (!this.anchorFeatureEnabled) {
|
|
279
|
+
console.log('Warning: anchor feature not enabled for WebXR session. Partial Scene Understanding features are disabled.');
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
async createAnchor(referenceSpace) {
|
|
283
|
+
const frame = this.xrManager.getFrame();
|
|
284
|
+
if (!frame.createAnchor) {
|
|
285
|
+
throw 'XRFrame.createAnchor is undefined';
|
|
286
|
+
}
|
|
287
|
+
if (!referenceSpace) {
|
|
288
|
+
throw 'renderer.xr.getReferenceSpace() returned null';
|
|
289
|
+
}
|
|
290
|
+
this.anchorRequested = true;
|
|
291
|
+
this.xrAnchor = await frame.createAnchor(new XRRigidTransform(), referenceSpace);
|
|
292
|
+
if (!this.xrAnchor) {
|
|
293
|
+
this.anchorRequested = false;
|
|
294
|
+
throw 'XRAnchor creation failed';
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
updateAnchoredObject() {
|
|
298
|
+
this.queries.anchoredEntities.entities.forEach((entity) => {
|
|
299
|
+
const object = entity.object3D;
|
|
300
|
+
if (object && !entity.getValue(XRAnchor, 'attached')) {
|
|
301
|
+
this.anchoredGroup.attach(object);
|
|
302
|
+
entity.setValue(XRAnchor, 'attached', true);
|
|
303
|
+
}
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
flatToVec3Array(arr) {
|
|
307
|
+
if (!arr || arr.length % 3 !== 0) {
|
|
308
|
+
throw new Error('Array length must be a multiple of 3.');
|
|
309
|
+
}
|
|
310
|
+
const result = [];
|
|
311
|
+
for (let i = 0; i < arr.length; i += 3) {
|
|
312
|
+
const obj = {
|
|
313
|
+
x: arr[i],
|
|
314
|
+
y: arr[i + 1],
|
|
315
|
+
z: arr[i + 2],
|
|
316
|
+
};
|
|
317
|
+
result.push(obj);
|
|
318
|
+
}
|
|
319
|
+
return result;
|
|
320
|
+
}
|
|
321
|
+
findMinMaxEntries(arr) {
|
|
322
|
+
let minEntry = arr[0];
|
|
323
|
+
let maxEntry = arr[0];
|
|
324
|
+
let minSum = arr[0].x + arr[0].y + arr[0].z;
|
|
325
|
+
let maxSum = arr[0].x + arr[0].y + arr[0].z;
|
|
326
|
+
for (let i = 1; i < arr.length; i++) {
|
|
327
|
+
const currentSum = arr[i].x + arr[i].y + arr[i].z;
|
|
328
|
+
if (currentSum < minSum) {
|
|
329
|
+
minSum = currentSum;
|
|
330
|
+
minEntry = arr[i];
|
|
331
|
+
}
|
|
332
|
+
if (currentSum > maxSum) {
|
|
333
|
+
maxSum = currentSum;
|
|
334
|
+
maxEntry = arr[i];
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
return { minEntry, maxEntry };
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
export { SceneUnderstandingSystem };
|
|
342
|
+
//# sourceMappingURL=scene-understanding-system.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scene-understanding-system.js","sources":["../../src/scene-understanding/scene-understanding-system.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
export * from './transform.js';
|
|
8
|
+
export * from './synced-vector3.js';
|
|
9
|
+
export * from './synced-quaternion.js';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transform/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
import { Quaternion } from '../runtime/three.js';
|
|
8
|
+
/**
|
|
9
|
+
* Quaternion whose internal `_x/_y/_z/_w` are backed by a Float32Array.
|
|
10
|
+
*
|
|
11
|
+
* @remarks
|
|
12
|
+
* - Three.js quaternion math reads/writes the internal fields; by replacing
|
|
13
|
+
* those with array‑backed accessors, all operations become zero‑copy against
|
|
14
|
+
* the ECS component buffer.
|
|
15
|
+
* - When no target is set, it behaves like a normal `Quaternion`.
|
|
16
|
+
*
|
|
17
|
+
* @category Scene
|
|
18
|
+
*/
|
|
19
|
+
export declare class SyncedQuaternion extends Quaternion {
|
|
20
|
+
private target;
|
|
21
|
+
private targetOffset;
|
|
22
|
+
private __x;
|
|
23
|
+
private __y;
|
|
24
|
+
private __z;
|
|
25
|
+
private __w;
|
|
26
|
+
constructor(x?: number, y?: number, z?: number, w?: number);
|
|
27
|
+
private setupProperties;
|
|
28
|
+
/**
|
|
29
|
+
* Bind this quaternion to a packed float array.
|
|
30
|
+
* @param target Float32Array to read/write (xyzw at consecutive indices).
|
|
31
|
+
* @param offset Starting index within the array (x at `offset`).
|
|
32
|
+
*/
|
|
33
|
+
setTarget(target: Float32Array, offset?: number): this;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=synced-quaternion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"synced-quaternion.d.ts","sourceRoot":"","sources":["../../src/transform/synced-quaternion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD;;;;;;;;;;GAUG;AACH,qBAAa,gBAAiB,SAAQ,UAAU;IAC9C,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,GAAG,CAAa;gBAEZ,CAAC,SAAI,EAAE,CAAC,SAAI,EAAE,CAAC,SAAI,EAAE,CAAC,SAAI;IAUtC,OAAO,CAAC,eAAe;IA+EvB;;;;OAIG;IACH,SAAS,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,SAAI,GAAG,IAAI;CAKlD"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import '../runtime/three.js';
|
|
2
|
+
import { Quaternion } from 'three';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
6
|
+
*
|
|
7
|
+
* This source code is licensed under the MIT license found in the
|
|
8
|
+
* LICENSE file in the root directory of this source tree.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Quaternion whose internal `_x/_y/_z/_w` are backed by a Float32Array.
|
|
12
|
+
*
|
|
13
|
+
* @remarks
|
|
14
|
+
* - Three.js quaternion math reads/writes the internal fields; by replacing
|
|
15
|
+
* those with array‑backed accessors, all operations become zero‑copy against
|
|
16
|
+
* the ECS component buffer.
|
|
17
|
+
* - When no target is set, it behaves like a normal `Quaternion`.
|
|
18
|
+
*
|
|
19
|
+
* @category Scene
|
|
20
|
+
*/
|
|
21
|
+
class SyncedQuaternion extends Quaternion {
|
|
22
|
+
constructor(x = 0, y = 0, z = 0, w = 1) {
|
|
23
|
+
super(x, y, z, w);
|
|
24
|
+
this.target = null;
|
|
25
|
+
this.targetOffset = 0;
|
|
26
|
+
this.__x = 0;
|
|
27
|
+
this.__y = 0;
|
|
28
|
+
this.__z = 0;
|
|
29
|
+
this.__w = 1;
|
|
30
|
+
// Preserve the values set by parent constructor before overriding properties
|
|
31
|
+
this.__x = this._x;
|
|
32
|
+
this.__y = this._y;
|
|
33
|
+
this.__z = this._z;
|
|
34
|
+
this.__w = this._w;
|
|
35
|
+
this.setupProperties();
|
|
36
|
+
}
|
|
37
|
+
setupProperties() {
|
|
38
|
+
// Override the internal _x, _y, _z, _w properties to sync with target
|
|
39
|
+
// This approach leverages the existing Three.js getter/setter architecture
|
|
40
|
+
// All Three.js methods will automatically sync because they use these internal properties
|
|
41
|
+
Object.defineProperty(this, '_x', {
|
|
42
|
+
get: () => {
|
|
43
|
+
if (this.target) {
|
|
44
|
+
return this.target[this.targetOffset];
|
|
45
|
+
}
|
|
46
|
+
// Fallback to a private property when no target is set
|
|
47
|
+
return this.__x;
|
|
48
|
+
},
|
|
49
|
+
set: (value) => {
|
|
50
|
+
if (this.target) {
|
|
51
|
+
this.target[this.targetOffset] = value;
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
this.__x = value;
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
enumerable: true,
|
|
58
|
+
configurable: true,
|
|
59
|
+
});
|
|
60
|
+
Object.defineProperty(this, '_y', {
|
|
61
|
+
get: () => {
|
|
62
|
+
if (this.target) {
|
|
63
|
+
return this.target[this.targetOffset + 1];
|
|
64
|
+
}
|
|
65
|
+
return this.__y;
|
|
66
|
+
},
|
|
67
|
+
set: (value) => {
|
|
68
|
+
if (this.target) {
|
|
69
|
+
this.target[this.targetOffset + 1] = value;
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
this.__y = value;
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
enumerable: true,
|
|
76
|
+
configurable: true,
|
|
77
|
+
});
|
|
78
|
+
Object.defineProperty(this, '_z', {
|
|
79
|
+
get: () => {
|
|
80
|
+
if (this.target) {
|
|
81
|
+
return this.target[this.targetOffset + 2];
|
|
82
|
+
}
|
|
83
|
+
return this.__z;
|
|
84
|
+
},
|
|
85
|
+
set: (value) => {
|
|
86
|
+
if (this.target) {
|
|
87
|
+
this.target[this.targetOffset + 2] = value;
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
this.__z = value;
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
enumerable: true,
|
|
94
|
+
configurable: true,
|
|
95
|
+
});
|
|
96
|
+
Object.defineProperty(this, '_w', {
|
|
97
|
+
get: () => {
|
|
98
|
+
if (this.target) {
|
|
99
|
+
return this.target[this.targetOffset + 3];
|
|
100
|
+
}
|
|
101
|
+
return this.__w;
|
|
102
|
+
},
|
|
103
|
+
set: (value) => {
|
|
104
|
+
if (this.target) {
|
|
105
|
+
this.target[this.targetOffset + 3] = value;
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
this.__w = value;
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
enumerable: true,
|
|
112
|
+
configurable: true,
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Bind this quaternion to a packed float array.
|
|
117
|
+
* @param target Float32Array to read/write (xyzw at consecutive indices).
|
|
118
|
+
* @param offset Starting index within the array (x at `offset`).
|
|
119
|
+
*/
|
|
120
|
+
setTarget(target, offset = 0) {
|
|
121
|
+
this.target = target;
|
|
122
|
+
this.targetOffset = offset;
|
|
123
|
+
return this;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
export { SyncedQuaternion };
|
|
128
|
+
//# sourceMappingURL=synced-quaternion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"synced-quaternion.js","sources":["../../src/transform/synced-quaternion.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
import { Vector3 } from '../runtime/three.js';
|
|
8
|
+
/**
|
|
9
|
+
* Vector3 whose x/y/z accessors read from and write to a target Float32Array.
|
|
10
|
+
*
|
|
11
|
+
* @remarks
|
|
12
|
+
* - Used by {@link TransformSystem} to bind Object3D.position/scale directly to
|
|
13
|
+
* ECS component storage for zero‑copy updates.
|
|
14
|
+
* - When no target is set, falls back to internal fields so it behaves like a
|
|
15
|
+
* normal `Vector3`.
|
|
16
|
+
*
|
|
17
|
+
* @category Scene
|
|
18
|
+
*/
|
|
19
|
+
export declare class SyncedVector3 extends Vector3 {
|
|
20
|
+
private target;
|
|
21
|
+
private targetOffset;
|
|
22
|
+
private __x;
|
|
23
|
+
private __y;
|
|
24
|
+
private __z;
|
|
25
|
+
constructor(x?: number, y?: number, z?: number);
|
|
26
|
+
private setupProperties;
|
|
27
|
+
/**
|
|
28
|
+
* Bind this vector to a packed float array.
|
|
29
|
+
* @param target Float32Array to read/write.
|
|
30
|
+
* @param offset Starting index within the array (x at `offset`).
|
|
31
|
+
*/
|
|
32
|
+
setTarget(target: Float32Array, offset?: number): this;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=synced-vector3.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"synced-vector3.d.ts","sourceRoot":"","sources":["../../src/transform/synced-vector3.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C;;;;;;;;;;GAUG;AACH,qBAAa,aAAc,SAAQ,OAAO;IACxC,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,GAAG,CAAa;gBAEZ,CAAC,SAAI,EAAE,CAAC,SAAI,EAAE,CAAC,SAAI;IAS/B,OAAO,CAAC,eAAe;IA0DvB;;;;OAIG;IACH,SAAS,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,SAAI,GAAG,IAAI;CAKlD"}
|