@needle-tools/engine 3.2.15-alpha → 3.4.0-alpha

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.
Files changed (151) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/dist/needle-engine.js +44005 -36382
  3. package/dist/needle-engine.min.js +706 -513
  4. package/dist/needle-engine.umd.cjs +685 -492
  5. package/lib/engine/codegen/register_types.js +54 -4
  6. package/lib/engine/codegen/register_types.js.map +1 -1
  7. package/lib/engine/engine_addressables.d.ts +3 -3
  8. package/lib/engine/engine_addressables.js +30 -9
  9. package/lib/engine/engine_addressables.js.map +1 -1
  10. package/lib/engine/engine_element.js +1 -1
  11. package/lib/engine/engine_element.js.map +1 -1
  12. package/lib/engine/engine_gameobject.d.ts +2 -1
  13. package/lib/engine/engine_gameobject.js +19 -0
  14. package/lib/engine/engine_gameobject.js.map +1 -1
  15. package/lib/engine/engine_input.js +10 -0
  16. package/lib/engine/engine_input.js.map +1 -1
  17. package/lib/engine/engine_math.d.ts +4 -0
  18. package/lib/engine/engine_math.js +6 -0
  19. package/lib/engine/engine_math.js.map +1 -1
  20. package/lib/engine/engine_three_utils.js +2 -2
  21. package/lib/engine/engine_three_utils.js.map +1 -1
  22. package/lib/engine-components/Animation.js +4 -0
  23. package/lib/engine-components/Animation.js.map +1 -1
  24. package/lib/engine-components/AnimatorController.js +7 -2
  25. package/lib/engine-components/AnimatorController.js.map +1 -1
  26. package/lib/engine-components/OrbitControls.js +13 -4
  27. package/lib/engine-components/OrbitControls.js.map +1 -1
  28. package/lib/engine-components/TransformGizmo.d.ts +8 -4
  29. package/lib/engine-components/TransformGizmo.js +62 -63
  30. package/lib/engine-components/TransformGizmo.js.map +1 -1
  31. package/lib/engine-components/codegen/components.d.ts +27 -2
  32. package/lib/engine-components/codegen/components.js +27 -2
  33. package/lib/engine-components/codegen/components.js.map +1 -1
  34. package/lib/engine-components/export/usdz/Extension.d.ts +4 -4
  35. package/lib/engine-components/export/usdz/ThreeUSDZExporter.d.ts +86 -0
  36. package/lib/engine-components/export/usdz/ThreeUSDZExporter.js +830 -0
  37. package/lib/engine-components/export/usdz/ThreeUSDZExporter.js.map +1 -0
  38. package/lib/engine-components/export/usdz/USDZExporter.d.ts +6 -3
  39. package/lib/engine-components/export/usdz/USDZExporter.js +34 -11
  40. package/lib/engine-components/export/usdz/USDZExporter.js.map +1 -1
  41. package/lib/engine-components/export/usdz/extensions/Animation.d.ts +15 -15
  42. package/lib/engine-components/export/usdz/extensions/Animation.js +24 -29
  43. package/lib/engine-components/export/usdz/extensions/Animation.js.map +1 -1
  44. package/lib/engine-components/export/usdz/extensions/DocumentExtension.d.ts +5 -0
  45. package/lib/engine-components/export/usdz/extensions/DocumentExtension.js +7 -0
  46. package/lib/engine-components/export/usdz/extensions/DocumentExtension.js.map +1 -0
  47. package/lib/engine-components/export/usdz/extensions/USDZText.d.ts +47 -0
  48. package/lib/engine-components/export/usdz/extensions/USDZText.js +114 -0
  49. package/lib/engine-components/export/usdz/extensions/USDZText.js.map +1 -0
  50. package/lib/engine-components/export/usdz/extensions/behavior/Actions.d.ts +30 -0
  51. package/lib/engine-components/export/usdz/extensions/behavior/Actions.js +89 -0
  52. package/lib/engine-components/export/usdz/extensions/behavior/Actions.js.map +1 -0
  53. package/lib/engine-components/export/usdz/extensions/behavior/Behaviour.d.ts +23 -0
  54. package/lib/engine-components/export/usdz/extensions/behavior/Behaviour.js +114 -0
  55. package/lib/engine-components/export/usdz/extensions/behavior/Behaviour.js.map +1 -0
  56. package/lib/engine-components/export/usdz/extensions/behavior/BehaviourComponents.d.ts +96 -0
  57. package/lib/engine-components/export/usdz/extensions/behavior/BehaviourComponents.js +421 -0
  58. package/lib/engine-components/export/usdz/extensions/behavior/BehaviourComponents.js.map +1 -0
  59. package/lib/engine-components/export/usdz/extensions/behavior/BehavioursBuilder.d.ts +111 -0
  60. package/lib/engine-components/export/usdz/extensions/behavior/BehavioursBuilder.js +409 -0
  61. package/lib/engine-components/export/usdz/extensions/behavior/BehavioursBuilder.js.map +1 -0
  62. package/lib/engine-components/postprocessing/PostProcessingHandler.js.map +1 -1
  63. package/lib/engine-components/ui/BaseUIComponent.d.ts +2 -0
  64. package/lib/engine-components/ui/BaseUIComponent.js +6 -0
  65. package/lib/engine-components/ui/BaseUIComponent.js.map +1 -1
  66. package/lib/engine-components/ui/Button.js +9 -5
  67. package/lib/engine-components/ui/Button.js.map +1 -1
  68. package/lib/engine-components/ui/Canvas.d.ts +23 -6
  69. package/lib/engine-components/ui/Canvas.js +167 -34
  70. package/lib/engine-components/ui/Canvas.js.map +1 -1
  71. package/lib/engine-components/ui/EventSystem.d.ts +6 -0
  72. package/lib/engine-components/ui/EventSystem.js +4 -4
  73. package/lib/engine-components/ui/EventSystem.js.map +1 -1
  74. package/lib/engine-components/ui/Graphic.d.ts +5 -2
  75. package/lib/engine-components/ui/Graphic.js +38 -7
  76. package/lib/engine-components/ui/Graphic.js.map +1 -1
  77. package/lib/engine-components/ui/Image.d.ts +1 -0
  78. package/lib/engine-components/ui/Image.js +14 -5
  79. package/lib/engine-components/ui/Image.js.map +1 -1
  80. package/lib/engine-components/ui/InputField.d.ts +1 -0
  81. package/lib/engine-components/ui/InputField.js +8 -0
  82. package/lib/engine-components/ui/InputField.js.map +1 -1
  83. package/lib/engine-components/ui/Interfaces.d.ts +19 -0
  84. package/lib/engine-components/ui/Interfaces.js +11 -0
  85. package/lib/engine-components/ui/Interfaces.js.map +1 -1
  86. package/lib/engine-components/ui/Layout.d.ts +65 -3
  87. package/lib/engine-components/ui/Layout.js +304 -3
  88. package/lib/engine-components/ui/Layout.js.map +1 -1
  89. package/lib/engine-components/ui/Outline.d.ts +7 -0
  90. package/lib/engine-components/ui/Outline.js +21 -0
  91. package/lib/engine-components/ui/Outline.js.map +1 -0
  92. package/lib/engine-components/ui/RectTransform.d.ts +32 -13
  93. package/lib/engine-components/ui/RectTransform.js +216 -56
  94. package/lib/engine-components/ui/RectTransform.js.map +1 -1
  95. package/lib/engine-components/ui/Text.d.ts +13 -10
  96. package/lib/engine-components/ui/Text.js +177 -246
  97. package/lib/engine-components/ui/Text.js.map +1 -1
  98. package/lib/engine-components/utils/LookAt.d.ts +13 -0
  99. package/lib/engine-components/utils/LookAt.js +66 -0
  100. package/lib/engine-components/utils/LookAt.js.map +1 -0
  101. package/lib/engine-components/webxr/WebXRImageTracking.d.ts +12 -3
  102. package/lib/engine-components/webxr/WebXRImageTracking.js +156 -24
  103. package/lib/engine-components/webxr/WebXRImageTracking.js.map +1 -1
  104. package/lib/tsconfig.tsbuildinfo +1 -1
  105. package/package.json +2 -2
  106. package/plugins/vite/reload.js +13 -2
  107. package/src/engine/codegen/register_types.js +56 -6
  108. package/src/engine/engine_addressables.ts +28 -10
  109. package/src/engine/engine_element.ts +1 -1
  110. package/src/engine/engine_gameobject.ts +19 -1
  111. package/src/engine/engine_input.ts +11 -0
  112. package/src/engine/engine_math.ts +10 -0
  113. package/src/engine/engine_three_utils.ts +2 -2
  114. package/src/engine-components/Animation.ts +4 -0
  115. package/src/engine-components/AnimatorController.ts +7 -1
  116. package/src/engine-components/OrbitControls.ts +14 -6
  117. package/src/engine-components/TransformGizmo.ts +64 -70
  118. package/src/engine-components/codegen/components.ts +27 -2
  119. package/src/engine-components/export/usdz/Extension.ts +4 -5
  120. package/src/engine-components/export/usdz/ThreeUSDZExporter.ts +1280 -0
  121. package/src/engine-components/export/usdz/USDZExporter.ts +39 -17
  122. package/src/engine-components/export/usdz/extensions/Animation.ts +37 -45
  123. package/src/engine-components/export/usdz/extensions/DocumentExtension.ts +10 -0
  124. package/src/engine-components/export/usdz/extensions/USDZText.ts +142 -0
  125. package/src/engine-components/export/usdz/extensions/behavior/Actions.ts +99 -0
  126. package/src/engine-components/export/usdz/extensions/behavior/Behaviour.ts +181 -0
  127. package/src/engine-components/export/usdz/extensions/behavior/BehaviourComponents.ts +503 -0
  128. package/src/engine-components/export/usdz/extensions/behavior/BehavioursBuilder.ts +459 -0
  129. package/src/engine-components/postprocessing/PostProcessingHandler.ts +1 -1
  130. package/src/engine-components/ui/BaseUIComponent.ts +7 -1
  131. package/src/engine-components/ui/Button.ts +14 -9
  132. package/src/engine-components/ui/Canvas.ts +178 -39
  133. package/src/engine-components/ui/EventSystem.ts +16 -9
  134. package/src/engine-components/ui/Graphic.ts +46 -8
  135. package/src/engine-components/ui/Image.ts +13 -4
  136. package/src/engine-components/ui/InputField.ts +9 -1
  137. package/src/engine-components/ui/Interfaces.ts +39 -3
  138. package/src/engine-components/ui/Layout.ts +303 -4
  139. package/src/engine-components/ui/Outline.ts +13 -0
  140. package/src/engine-components/ui/RectTransform.ts +236 -68
  141. package/src/engine-components/ui/Text.ts +284 -265
  142. package/src/engine-components/utils/LookAt.ts +74 -0
  143. package/src/engine-components/webxr/WebXRImageTracking.ts +179 -31
  144. package/lib/engine-components/export/usdz/types.d.ts +0 -34
  145. package/lib/engine-components/export/usdz/types.js +0 -2
  146. package/lib/engine-components/export/usdz/types.js.map +0 -1
  147. package/lib/engine-components/ui/Keyboard.d.ts +0 -31
  148. package/lib/engine-components/ui/Keyboard.js +0 -178
  149. package/lib/engine-components/ui/Keyboard.js.map +0 -1
  150. package/src/engine-components/export/usdz/types.ts +0 -39
  151. package/src/engine-components/ui/Keyboard.ts +0 -204
@@ -0,0 +1,13 @@
1
+ import { Behaviour } from "../Component";
2
+ import { Object3D } from "three";
3
+ import { USDObject } from "../../engine-components/export/usdz/ThreeUSDZExporter";
4
+ import { UsdzBehaviour } from "../../engine-components/export/usdz/extensions/behavior/Behaviour";
5
+ export declare class LookAt extends Behaviour implements UsdzBehaviour {
6
+ target?: Object3D;
7
+ invertForward: boolean;
8
+ keepUpDirection: boolean;
9
+ copyTargetRotation: boolean;
10
+ private static flipYQuat;
11
+ onBeforeRender(): void;
12
+ createBehaviours(ext: any, model: USDObject, _context: any): void;
13
+ }
@@ -0,0 +1,66 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { serializable } from "../../engine/engine_serialization";
8
+ import { Behaviour } from "../Component";
9
+ import { Matrix4, Object3D, Quaternion, Vector3 } from "three";
10
+ import { getWorldPosition, getWorldQuaternion, setWorldQuaternion } from "../../engine/engine_three_utils";
11
+ import { USDObject } from "../../engine-components/export/usdz/ThreeUSDZExporter";
12
+ import { ActionBuilder, BehaviorModel, TriggerBuilder, USDVec3 } from "../../engine-components/export/usdz/extensions/behavior/BehavioursBuilder";
13
+ export class LookAt extends Behaviour {
14
+ target;
15
+ invertForward = false;
16
+ keepUpDirection = true;
17
+ copyTargetRotation = false;
18
+ static flipYQuat = new Quaternion().setFromAxisAngle(new Vector3(0, 1, 0), Math.PI);
19
+ onBeforeRender() {
20
+ let target = this.target;
21
+ if (!target)
22
+ target = this.context.mainCamera;
23
+ if (!target)
24
+ return;
25
+ const lookTarget = getWorldPosition(target);
26
+ const lookFrom = getWorldPosition(this.gameObject);
27
+ if (this.keepUpDirection)
28
+ lookTarget.y = lookFrom.y;
29
+ if (this.copyTargetRotation)
30
+ setWorldQuaternion(this.gameObject, getWorldQuaternion(target));
31
+ else
32
+ this.gameObject.lookAt(lookTarget);
33
+ if (this.invertForward)
34
+ this.gameObject.quaternion.multiply(LookAt.flipYQuat);
35
+ }
36
+ createBehaviours(ext, model, _context) {
37
+ if (model.uuid === this.gameObject.uuid) {
38
+ let alignmentTarget = model;
39
+ // not entirely sure why we need to do this - looks like LookAt with up vector doesn't work properly in
40
+ // QuickLook, so we need to introduce an empty parent and rotate the model by 90° around Y
41
+ if (this.keepUpDirection) {
42
+ const parent = USDObject.createEmptyParent(model);
43
+ alignmentTarget = parent;
44
+ // rotate by 90° - counter-rotation on the parent makes sure
45
+ // that without Preliminary Behaviours it still looks right
46
+ parent.matrix.multiply(new Matrix4().makeRotationZ(Math.PI / 2));
47
+ model.matrix.multiply(new Matrix4().makeRotationZ(-Math.PI / 2));
48
+ }
49
+ const lookAt = new BehaviorModel("lookat " + this.name, TriggerBuilder.sceneStartTrigger(), ActionBuilder.lookAtCameraAction(alignmentTarget, undefined, this.invertForward ? USDVec3.back : USDVec3.forward, this.keepUpDirection ? USDVec3.up : USDVec3.zero));
50
+ ext.addBehavior(lookAt);
51
+ }
52
+ }
53
+ }
54
+ __decorate([
55
+ serializable(Object3D)
56
+ ], LookAt.prototype, "target", void 0);
57
+ __decorate([
58
+ serializable()
59
+ ], LookAt.prototype, "invertForward", void 0);
60
+ __decorate([
61
+ serializable()
62
+ ], LookAt.prototype, "keepUpDirection", void 0);
63
+ __decorate([
64
+ serializable()
65
+ ], LookAt.prototype, "copyTargetRotation", void 0);
66
+ //# sourceMappingURL=LookAt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LookAt.js","sourceRoot":"","sources":["../../../src/engine-components/utils/LookAt.ts"],"names":[],"mappings":"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"}
@@ -1,17 +1,19 @@
1
- /// <reference types="webxr" />
2
1
  import { Behaviour } from "../Component";
3
2
  import { Object3D, Quaternion, Vector3 } from "three";
3
+ import { AssetReference } from "../../engine/engine_addressables";
4
4
  export declare class WebXRTrackedImage {
5
5
  get url(): string;
6
6
  get widthInMeters(): number;
7
7
  get bitmap(): ImageBitmap;
8
+ get model(): WebXRImageTrackingModel;
8
9
  readonly measuredSize: number;
9
10
  readonly state: "tracked" | "emulated";
10
11
  /** Copy the image position to a vector */
11
12
  getPosition(vec: Vector3): Vector3;
12
13
  /** Copy the image rotation to a quaternion */
13
14
  getQuaternion(quat: Quaternion): Quaternion;
14
- applyToObject(object: Object3D): void;
15
+ private static y180;
16
+ applyToObject(object: Object3D, t01?: number | undefined): void;
15
17
  private static _positionBuffer;
16
18
  private static _rotationBuffer;
17
19
  private _position;
@@ -26,14 +28,21 @@ export declare class WebXRTrackedImage {
26
28
  export declare class WebXRImageTrackingModel {
27
29
  image?: string;
28
30
  widthInMeters: number;
31
+ object?: AssetReference;
32
+ createObjectInstance: boolean;
33
+ imageDoesNotMove: boolean;
29
34
  }
30
35
  export declare class WebXRImageTracking extends Behaviour {
31
36
  trackedImages: WebXRImageTrackingModel[];
32
37
  private readonly trackedImageIndexMap;
33
38
  private static _imageElements;
34
39
  awake(): void;
40
+ private xr;
35
41
  onEnable(): void;
36
42
  onDisable(): void;
37
43
  private onModifyAROptions;
38
- onBeforeRender(frame: XRFrame | null): void;
44
+ private imageToObjectMap;
45
+ private onImageTrackingUpdate;
46
+ private onXRStarted;
47
+ private onXRUpdate;
39
48
  }
@@ -4,29 +4,24 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
- import { WebXR } from "./WebXR";
7
+ import { WebXR, WebXREvent } from "./WebXR";
8
8
  import { serializable } from "../../engine/engine_serialization";
9
- import { Behaviour } from "../Component";
9
+ import { Behaviour, GameObject } from "../Component";
10
10
  import { Quaternion, Vector3 } from "three";
11
11
  import { CircularBuffer, getParam } from "../../engine/engine_utils";
12
+ import { AssetReference } from "../../engine/engine_addressables";
13
+ import { showBalloonWarning } from "../../engine/debug";
14
+ import { USDZExporter } from "../../engine-components/export/usdz/USDZExporter";
15
+ import { imageToCanvas } from "../../engine-components/export/usdz/ThreeUSDZExporter";
12
16
  // https://github.com/immersive-web/marker-tracking/blob/main/explainer.md
13
17
  const debug = getParam("debugimagetracking");
14
- const _scaleTemp = new Vector3();
15
18
  export class WebXRTrackedImage {
16
19
  get url() { return this._trackedImage.image ?? ""; }
17
20
  get widthInMeters() { return this._trackedImage.widthInMeters ?? undefined; }
18
21
  get bitmap() { return this._bitmap; }
22
+ get model() { return this._trackedImage; }
19
23
  measuredSize;
20
24
  state;
21
- // private _matrix: Matrix4 | null = null;
22
- // private get matrix(): Matrix4 {
23
- // if (!this._matrix) {
24
- // // this._matrix = WebXRTrackedImage._matrixBuffer.get();
25
- // // const matrix = this._pose.transform.matrix;
26
- // // this._matrix.fromArray(matrix);
27
- // }
28
- // return this._matrix!;
29
- // }
30
25
  /** Copy the image position to a vector */
31
26
  getPosition(vec) {
32
27
  this.ensureTransformData();
@@ -39,12 +34,22 @@ export class WebXRTrackedImage {
39
34
  quat.copy(this._rotation);
40
35
  return quat;
41
36
  }
42
- applyToObject(object) {
37
+ static y180 = new Quaternion().setFromAxisAngle(new Vector3(0, 1, 0), Math.PI);
38
+ applyToObject(object, t01 = undefined) {
43
39
  this.ensureTransformData();
44
- object.position.copy(this._position);
45
- object.quaternion.copy(this._rotation);
40
+ // check if position/_position or rotation/_rotation changed more than just a little bit
41
+ const haveChanged = object.position.distanceToSquared(this._position) > 0.05 || object.quaternion.angleTo(this._rotation) > 0.05;
42
+ if (t01 === undefined || t01 >= 1 || haveChanged) {
43
+ object.position.copy(this._position);
44
+ object.quaternion.copy(this._rotation);
45
+ }
46
+ else {
47
+ t01 = Math.max(0, Math.min(1, t01));
48
+ object.position.lerp(this._position, t01);
49
+ object.quaternion.slerp(this._rotation, t01);
50
+ }
51
+ object.quaternion.multiply(WebXRTrackedImage.y180);
46
52
  }
47
- // private static _matrixBuffer: CircularBuffer<Matrix4> = new CircularBuffer(() => new Matrix4(), 20);
48
53
  static _positionBuffer = new CircularBuffer(() => new Vector3(), 20);
49
54
  static _rotationBuffer = new CircularBuffer(() => new Quaternion(), 20);
50
55
  _position;
@@ -54,12 +59,15 @@ export class WebXRTrackedImage {
54
59
  this._position = WebXRTrackedImage._positionBuffer.get();
55
60
  this._rotation = WebXRTrackedImage._rotationBuffer.get();
56
61
  const t = this._pose.transform;
57
- this._position.set(-t.position.x, t.position.y, -t.position.z);
58
- this._rotation.set(-t.orientation.x, t.orientation.y, -t.orientation.z, t.orientation.w);
62
+ // when parented to the world, we need to flip data here
63
+ //this._position.set(-t.position.x, t.position.y, -t.position.z);
64
+ // this._rotation.set(-t.orientation.x, t.orientation.y, -t.orientation.z, t.orientation.w);
65
+ // for some reason when parented to the XRRig, we need the original data
66
+ this._position.set(t.position.x, t.position.y, t.position.z);
67
+ this._rotation.set(t.orientation.x, t.orientation.y, t.orientation.z, t.orientation.w);
59
68
  }
60
69
  }
61
70
  _trackingComponent;
62
- ;
63
71
  _trackedImage;
64
72
  _bitmap;
65
73
  _pose;
@@ -76,6 +84,9 @@ export class WebXRTrackedImage {
76
84
  export class WebXRImageTrackingModel {
77
85
  image;
78
86
  widthInMeters;
87
+ object;
88
+ createObjectInstance = false;
89
+ imageDoesNotMove = false;
79
90
  }
80
91
  __decorate([
81
92
  serializable(URL)
@@ -83,6 +94,35 @@ __decorate([
83
94
  __decorate([
84
95
  serializable()
85
96
  ], WebXRImageTrackingModel.prototype, "widthInMeters", void 0);
97
+ __decorate([
98
+ serializable(AssetReference)
99
+ ], WebXRImageTrackingModel.prototype, "object", void 0);
100
+ __decorate([
101
+ serializable()
102
+ ], WebXRImageTrackingModel.prototype, "createObjectInstance", void 0);
103
+ __decorate([
104
+ serializable()
105
+ ], WebXRImageTrackingModel.prototype, "imageDoesNotMove", void 0);
106
+ class ImageTrackingExtension {
107
+ get extensionName() { return "image-tracking"; }
108
+ filename;
109
+ widthInMeters;
110
+ imageData;
111
+ constructor(filename, imageData, widthInMeters) {
112
+ this.filename = filename;
113
+ this.imageData = imageData;
114
+ this.widthInMeters = widthInMeters;
115
+ }
116
+ onAfterHierarchy(_context, writer) {
117
+ writer.beginBlock(`def Preliminary_ReferenceImage "AnchoringReferenceImage"`);
118
+ writer.appendLine(`uniform asset image = @tracker/` + this.filename + `@`);
119
+ writer.appendLine(`uniform double physicalWidth = ` + (this.widthInMeters * 100).toFixed(8));
120
+ writer.closeBlock();
121
+ }
122
+ onAfterSerialize(context) {
123
+ context.files['tracker/' + this.filename] = this.imageData;
124
+ }
125
+ }
86
126
  export class WebXRImageTracking extends Behaviour {
87
127
  trackedImages;
88
128
  trackedImageIndexMap = new Map();
@@ -100,16 +140,36 @@ export class WebXRImageTracking extends Behaviour {
100
140
  imageElement.addEventListener("load", async () => {
101
141
  const img = await createImageBitmap(imageElement);
102
142
  WebXRImageTracking._imageElements.set(url, img);
143
+ // read back Uint8Array to use in USDZ -
144
+ // TODO better would be to do that once we actually need it
145
+ const canvas = await imageToCanvas(img);
146
+ if (canvas) {
147
+ const blob = await new Promise(resolve => canvas.toBlob(resolve, 'image/png', 1));
148
+ const arrayBuffer = await blob.arrayBuffer();
149
+ const exporter = GameObject.findObjectOfType(USDZExporter);
150
+ if (exporter) {
151
+ exporter.extensions.push(new ImageTrackingExtension("marker.png", new Uint8Array(arrayBuffer), this.trackedImages[0].widthInMeters));
152
+ exporter.anchoringType = "image";
153
+ }
154
+ }
103
155
  });
104
156
  }
105
157
  }
106
158
  }
107
159
  }
160
+ xr = null;
108
161
  onEnable() {
109
- WebXR.addEventListener("modify-ar-options", this.onModifyAROptions);
162
+ this.xr = GameObject.findObjectOfType(WebXR);
163
+ WebXR.addEventListener(WebXREvent.ModifyAROptions, this.onModifyAROptions);
164
+ WebXR.addEventListener(WebXREvent.XRStarted, this.onXRStarted);
165
+ WebXR.addEventListener(WebXREvent.XRUpdate, this.onXRUpdate);
166
+ this.addEventListener("image-tracking", this.onImageTrackingUpdate);
110
167
  }
111
168
  onDisable() {
112
- WebXR.removeEventListener("modify-ar-options", this.onModifyAROptions);
169
+ WebXR.removeEventListener(WebXREvent.ModifyAROptions, this.onModifyAROptions);
170
+ WebXR.removeEventListener(WebXREvent.XRStarted, this.onXRStarted);
171
+ WebXR.removeEventListener(WebXREvent.XRUpdate, this.onXRUpdate);
172
+ this.removeEventListener("image-tracking", this.onImageTrackingUpdate);
113
173
  }
114
174
  onModifyAROptions = (event) => {
115
175
  const options = event.detail;
@@ -131,9 +191,81 @@ export class WebXRImageTracking extends Behaviour {
131
191
  }
132
192
  }
133
193
  };
134
- onBeforeRender(frame) {
194
+ imageToObjectMap = new Map();
195
+ onImageTrackingUpdate = (event) => {
196
+ const images = event.detail;
197
+ // disable any objects that are no longer tracked
198
+ for (const [model, object] of this.imageToObjectMap) {
199
+ if (!object.object || !model)
200
+ continue;
201
+ let found = false;
202
+ for (const trackedImage of images) {
203
+ if (trackedImage.model === model) {
204
+ found = true;
205
+ break;
206
+ }
207
+ }
208
+ if (!found) {
209
+ GameObject.setActive(object.object, false);
210
+ }
211
+ }
212
+ for (const image of images) {
213
+ const model = image.model;
214
+ // don't do anything if we don't have an object to track - can be handled externally through events
215
+ if (!model.object)
216
+ continue;
217
+ let trackedData = this.imageToObjectMap.get(model);
218
+ if (trackedData === undefined) {
219
+ trackedData = { object: null, frames: 0 };
220
+ this.imageToObjectMap.set(model, trackedData);
221
+ model.object.loadAssetAsync().then((asset) => {
222
+ if (model.createObjectInstance)
223
+ asset = GameObject.instantiate(asset);
224
+ if (asset) {
225
+ trackedData.object = asset;
226
+ // make sure to parent to the WebXR.rig
227
+ if (this.xr) {
228
+ this.xr.Rig.add(asset);
229
+ }
230
+ image.applyToObject(asset);
231
+ if (!asset.activeSelf)
232
+ GameObject.setActive(asset, true);
233
+ }
234
+ });
235
+ }
236
+ else {
237
+ trackedData.frames++;
238
+ // TODO we could do a bit more here: e.g. sample for the first 1s or so of getting pose data
239
+ // to improve the tracking quality a bit.
240
+ if (model.imageDoesNotMove && trackedData.frames > 10)
241
+ continue;
242
+ if (!trackedData.object)
243
+ continue;
244
+ if (this.xr) {
245
+ this.xr.Rig.add(trackedData.object);
246
+ }
247
+ image.applyToObject(trackedData.object);
248
+ if (!trackedData.object.activeSelf)
249
+ GameObject.setActive(trackedData.object, true);
250
+ }
251
+ }
252
+ };
253
+ onXRStarted = (_) => {
254
+ // clear out all frame counters for tracking
255
+ for (const trackedData of this.imageToObjectMap.values()) {
256
+ trackedData.frames = 0;
257
+ }
258
+ };
259
+ onXRUpdate = (evt) => {
260
+ const frame = evt.frame;
261
+ if (!frame)
262
+ return;
263
+ if (frame.session && !("getImageTrackingResults" in frame)) {
264
+ showBalloonWarning("Image tracking is currently not supported on this device. On Chrome for Android, you can enable the <a href=\"chrome://flags/#webxr-incubations\">chrome://flags/#webxr-incubations</a> flag.");
265
+ return;
266
+ }
135
267
  //@ts-ignore
136
- if (frame?.session && typeof frame.getImageTrackingResults === "function") {
268
+ if (frame.session && typeof frame.getImageTrackingResults === "function") {
137
269
  //@ts-ignore
138
270
  const results = frame.getImageTrackingResults();
139
271
  if (results.length) {
@@ -166,7 +298,7 @@ export class WebXRImageTracking extends Behaviour {
166
298
  }
167
299
  }
168
300
  }
169
- }
301
+ };
170
302
  }
171
303
  __decorate([
172
304
  serializable(WebXRImageTrackingModel)
@@ -1 +1 @@
1
- {"version":3,"file":"WebXRImageTracking.js","sourceRoot":"","sources":["../../../src/engine-components/webxr/WebXRImageTracking.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"WebXRImageTracking.js","sourceRoot":"","sources":["../../../src/engine-components/webxr/WebXRImageTracking.ts"],"names":[],"mappings":"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"}