@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.
- package/CHANGELOG.md +23 -0
- package/dist/needle-engine.js +44005 -36382
- package/dist/needle-engine.min.js +706 -513
- package/dist/needle-engine.umd.cjs +685 -492
- package/lib/engine/codegen/register_types.js +54 -4
- package/lib/engine/codegen/register_types.js.map +1 -1
- package/lib/engine/engine_addressables.d.ts +3 -3
- package/lib/engine/engine_addressables.js +30 -9
- package/lib/engine/engine_addressables.js.map +1 -1
- package/lib/engine/engine_element.js +1 -1
- package/lib/engine/engine_element.js.map +1 -1
- package/lib/engine/engine_gameobject.d.ts +2 -1
- package/lib/engine/engine_gameobject.js +19 -0
- package/lib/engine/engine_gameobject.js.map +1 -1
- package/lib/engine/engine_input.js +10 -0
- package/lib/engine/engine_input.js.map +1 -1
- package/lib/engine/engine_math.d.ts +4 -0
- package/lib/engine/engine_math.js +6 -0
- package/lib/engine/engine_math.js.map +1 -1
- package/lib/engine/engine_three_utils.js +2 -2
- package/lib/engine/engine_three_utils.js.map +1 -1
- package/lib/engine-components/Animation.js +4 -0
- package/lib/engine-components/Animation.js.map +1 -1
- package/lib/engine-components/AnimatorController.js +7 -2
- package/lib/engine-components/AnimatorController.js.map +1 -1
- package/lib/engine-components/OrbitControls.js +13 -4
- package/lib/engine-components/OrbitControls.js.map +1 -1
- package/lib/engine-components/TransformGizmo.d.ts +8 -4
- package/lib/engine-components/TransformGizmo.js +62 -63
- package/lib/engine-components/TransformGizmo.js.map +1 -1
- package/lib/engine-components/codegen/components.d.ts +27 -2
- package/lib/engine-components/codegen/components.js +27 -2
- package/lib/engine-components/codegen/components.js.map +1 -1
- package/lib/engine-components/export/usdz/Extension.d.ts +4 -4
- package/lib/engine-components/export/usdz/ThreeUSDZExporter.d.ts +86 -0
- package/lib/engine-components/export/usdz/ThreeUSDZExporter.js +830 -0
- package/lib/engine-components/export/usdz/ThreeUSDZExporter.js.map +1 -0
- package/lib/engine-components/export/usdz/USDZExporter.d.ts +6 -3
- package/lib/engine-components/export/usdz/USDZExporter.js +34 -11
- package/lib/engine-components/export/usdz/USDZExporter.js.map +1 -1
- package/lib/engine-components/export/usdz/extensions/Animation.d.ts +15 -15
- package/lib/engine-components/export/usdz/extensions/Animation.js +24 -29
- package/lib/engine-components/export/usdz/extensions/Animation.js.map +1 -1
- package/lib/engine-components/export/usdz/extensions/DocumentExtension.d.ts +5 -0
- package/lib/engine-components/export/usdz/extensions/DocumentExtension.js +7 -0
- package/lib/engine-components/export/usdz/extensions/DocumentExtension.js.map +1 -0
- package/lib/engine-components/export/usdz/extensions/USDZText.d.ts +47 -0
- package/lib/engine-components/export/usdz/extensions/USDZText.js +114 -0
- package/lib/engine-components/export/usdz/extensions/USDZText.js.map +1 -0
- package/lib/engine-components/export/usdz/extensions/behavior/Actions.d.ts +30 -0
- package/lib/engine-components/export/usdz/extensions/behavior/Actions.js +89 -0
- package/lib/engine-components/export/usdz/extensions/behavior/Actions.js.map +1 -0
- package/lib/engine-components/export/usdz/extensions/behavior/Behaviour.d.ts +23 -0
- package/lib/engine-components/export/usdz/extensions/behavior/Behaviour.js +114 -0
- package/lib/engine-components/export/usdz/extensions/behavior/Behaviour.js.map +1 -0
- package/lib/engine-components/export/usdz/extensions/behavior/BehaviourComponents.d.ts +96 -0
- package/lib/engine-components/export/usdz/extensions/behavior/BehaviourComponents.js +421 -0
- package/lib/engine-components/export/usdz/extensions/behavior/BehaviourComponents.js.map +1 -0
- package/lib/engine-components/export/usdz/extensions/behavior/BehavioursBuilder.d.ts +111 -0
- package/lib/engine-components/export/usdz/extensions/behavior/BehavioursBuilder.js +409 -0
- package/lib/engine-components/export/usdz/extensions/behavior/BehavioursBuilder.js.map +1 -0
- package/lib/engine-components/postprocessing/PostProcessingHandler.js.map +1 -1
- package/lib/engine-components/ui/BaseUIComponent.d.ts +2 -0
- package/lib/engine-components/ui/BaseUIComponent.js +6 -0
- package/lib/engine-components/ui/BaseUIComponent.js.map +1 -1
- package/lib/engine-components/ui/Button.js +9 -5
- package/lib/engine-components/ui/Button.js.map +1 -1
- package/lib/engine-components/ui/Canvas.d.ts +23 -6
- package/lib/engine-components/ui/Canvas.js +167 -34
- package/lib/engine-components/ui/Canvas.js.map +1 -1
- package/lib/engine-components/ui/EventSystem.d.ts +6 -0
- package/lib/engine-components/ui/EventSystem.js +4 -4
- package/lib/engine-components/ui/EventSystem.js.map +1 -1
- package/lib/engine-components/ui/Graphic.d.ts +5 -2
- package/lib/engine-components/ui/Graphic.js +38 -7
- package/lib/engine-components/ui/Graphic.js.map +1 -1
- package/lib/engine-components/ui/Image.d.ts +1 -0
- package/lib/engine-components/ui/Image.js +14 -5
- package/lib/engine-components/ui/Image.js.map +1 -1
- package/lib/engine-components/ui/InputField.d.ts +1 -0
- package/lib/engine-components/ui/InputField.js +8 -0
- package/lib/engine-components/ui/InputField.js.map +1 -1
- package/lib/engine-components/ui/Interfaces.d.ts +19 -0
- package/lib/engine-components/ui/Interfaces.js +11 -0
- package/lib/engine-components/ui/Interfaces.js.map +1 -1
- package/lib/engine-components/ui/Layout.d.ts +65 -3
- package/lib/engine-components/ui/Layout.js +304 -3
- package/lib/engine-components/ui/Layout.js.map +1 -1
- package/lib/engine-components/ui/Outline.d.ts +7 -0
- package/lib/engine-components/ui/Outline.js +21 -0
- package/lib/engine-components/ui/Outline.js.map +1 -0
- package/lib/engine-components/ui/RectTransform.d.ts +32 -13
- package/lib/engine-components/ui/RectTransform.js +216 -56
- package/lib/engine-components/ui/RectTransform.js.map +1 -1
- package/lib/engine-components/ui/Text.d.ts +13 -10
- package/lib/engine-components/ui/Text.js +177 -246
- package/lib/engine-components/ui/Text.js.map +1 -1
- package/lib/engine-components/utils/LookAt.d.ts +13 -0
- package/lib/engine-components/utils/LookAt.js +66 -0
- package/lib/engine-components/utils/LookAt.js.map +1 -0
- package/lib/engine-components/webxr/WebXRImageTracking.d.ts +12 -3
- package/lib/engine-components/webxr/WebXRImageTracking.js +156 -24
- package/lib/engine-components/webxr/WebXRImageTracking.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/plugins/vite/reload.js +13 -2
- package/src/engine/codegen/register_types.js +56 -6
- package/src/engine/engine_addressables.ts +28 -10
- package/src/engine/engine_element.ts +1 -1
- package/src/engine/engine_gameobject.ts +19 -1
- package/src/engine/engine_input.ts +11 -0
- package/src/engine/engine_math.ts +10 -0
- package/src/engine/engine_three_utils.ts +2 -2
- package/src/engine-components/Animation.ts +4 -0
- package/src/engine-components/AnimatorController.ts +7 -1
- package/src/engine-components/OrbitControls.ts +14 -6
- package/src/engine-components/TransformGizmo.ts +64 -70
- package/src/engine-components/codegen/components.ts +27 -2
- package/src/engine-components/export/usdz/Extension.ts +4 -5
- package/src/engine-components/export/usdz/ThreeUSDZExporter.ts +1280 -0
- package/src/engine-components/export/usdz/USDZExporter.ts +39 -17
- package/src/engine-components/export/usdz/extensions/Animation.ts +37 -45
- package/src/engine-components/export/usdz/extensions/DocumentExtension.ts +10 -0
- package/src/engine-components/export/usdz/extensions/USDZText.ts +142 -0
- package/src/engine-components/export/usdz/extensions/behavior/Actions.ts +99 -0
- package/src/engine-components/export/usdz/extensions/behavior/Behaviour.ts +181 -0
- package/src/engine-components/export/usdz/extensions/behavior/BehaviourComponents.ts +503 -0
- package/src/engine-components/export/usdz/extensions/behavior/BehavioursBuilder.ts +459 -0
- package/src/engine-components/postprocessing/PostProcessingHandler.ts +1 -1
- package/src/engine-components/ui/BaseUIComponent.ts +7 -1
- package/src/engine-components/ui/Button.ts +14 -9
- package/src/engine-components/ui/Canvas.ts +178 -39
- package/src/engine-components/ui/EventSystem.ts +16 -9
- package/src/engine-components/ui/Graphic.ts +46 -8
- package/src/engine-components/ui/Image.ts +13 -4
- package/src/engine-components/ui/InputField.ts +9 -1
- package/src/engine-components/ui/Interfaces.ts +39 -3
- package/src/engine-components/ui/Layout.ts +303 -4
- package/src/engine-components/ui/Outline.ts +13 -0
- package/src/engine-components/ui/RectTransform.ts +236 -68
- package/src/engine-components/ui/Text.ts +284 -265
- package/src/engine-components/utils/LookAt.ts +74 -0
- package/src/engine-components/webxr/WebXRImageTracking.ts +179 -31
- package/lib/engine-components/export/usdz/types.d.ts +0 -34
- package/lib/engine-components/export/usdz/types.js +0 -2
- package/lib/engine-components/export/usdz/types.js.map +0 -1
- package/lib/engine-components/ui/Keyboard.d.ts +0 -31
- package/lib/engine-components/ui/Keyboard.js +0 -178
- package/lib/engine-components/ui/Keyboard.js.map +0 -1
- package/src/engine-components/export/usdz/types.ts +0 -39
- package/src/engine-components/ui/Keyboard.ts +0 -204
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { serializable } from "../../engine/engine_serialization";
|
|
2
|
+
import { Behaviour } from "../Component";
|
|
3
|
+
import { Matrix4, Object3D, Quaternion, Vector3 } from "three";
|
|
4
|
+
import { getWorldPosition, getWorldQuaternion, setWorldQuaternion } from "../../engine/engine_three_utils";
|
|
5
|
+
|
|
6
|
+
import { USDObject } from "../../engine-components/export/usdz/ThreeUSDZExporter";
|
|
7
|
+
import { UsdzBehaviour } from "../../engine-components/export/usdz/extensions/behavior/Behaviour";
|
|
8
|
+
import { ActionBuilder, BehaviorModel, TriggerBuilder, USDVec3 } from "../../engine-components/export/usdz/extensions/behavior/BehavioursBuilder";
|
|
9
|
+
|
|
10
|
+
export class LookAt extends Behaviour implements UsdzBehaviour {
|
|
11
|
+
|
|
12
|
+
@serializable(Object3D)
|
|
13
|
+
target?: Object3D;
|
|
14
|
+
|
|
15
|
+
@serializable()
|
|
16
|
+
invertForward: boolean = false;
|
|
17
|
+
|
|
18
|
+
@serializable()
|
|
19
|
+
keepUpDirection: boolean = true;
|
|
20
|
+
|
|
21
|
+
@serializable()
|
|
22
|
+
copyTargetRotation: boolean = false;
|
|
23
|
+
|
|
24
|
+
private static flipYQuat: Quaternion = new Quaternion().setFromAxisAngle(new Vector3(0, 1, 0), Math.PI);
|
|
25
|
+
|
|
26
|
+
onBeforeRender(): void {
|
|
27
|
+
let target: Object3D | null | undefined = this.target;
|
|
28
|
+
if (!target) target = this.context.mainCamera;
|
|
29
|
+
if (!target) return;
|
|
30
|
+
|
|
31
|
+
const lookTarget = getWorldPosition(target);
|
|
32
|
+
const lookFrom = getWorldPosition(this.gameObject);
|
|
33
|
+
|
|
34
|
+
if (this.keepUpDirection)
|
|
35
|
+
lookTarget.y = lookFrom.y;
|
|
36
|
+
|
|
37
|
+
if (this.copyTargetRotation)
|
|
38
|
+
setWorldQuaternion(this.gameObject, getWorldQuaternion(target));
|
|
39
|
+
else
|
|
40
|
+
this.gameObject.lookAt(lookTarget);
|
|
41
|
+
|
|
42
|
+
if (this.invertForward)
|
|
43
|
+
this.gameObject.quaternion.multiply(LookAt.flipYQuat);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
createBehaviours(ext, model: USDObject, _context) {
|
|
47
|
+
if (model.uuid === this.gameObject.uuid) {
|
|
48
|
+
let alignmentTarget = model;
|
|
49
|
+
|
|
50
|
+
// not entirely sure why we need to do this - looks like LookAt with up vector doesn't work properly in
|
|
51
|
+
// QuickLook, so we need to introduce an empty parent and rotate the model by 90° around Y
|
|
52
|
+
if (this.keepUpDirection) {
|
|
53
|
+
const parent = USDObject.createEmptyParent(model);
|
|
54
|
+
alignmentTarget = parent;
|
|
55
|
+
|
|
56
|
+
// rotate by 90° - counter-rotation on the parent makes sure
|
|
57
|
+
// that without Preliminary Behaviours it still looks right
|
|
58
|
+
parent.matrix.multiply(new Matrix4().makeRotationZ(Math.PI / 2));
|
|
59
|
+
model.matrix.multiply(new Matrix4().makeRotationZ(-Math.PI / 2));
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const lookAt = new BehaviorModel("lookat " + this.name,
|
|
63
|
+
TriggerBuilder.sceneStartTrigger(),
|
|
64
|
+
ActionBuilder.lookAtCameraAction(
|
|
65
|
+
alignmentTarget,
|
|
66
|
+
undefined,
|
|
67
|
+
this.invertForward ? USDVec3.back : USDVec3.forward,
|
|
68
|
+
this.keepUpDirection ? USDVec3.up : USDVec3.zero
|
|
69
|
+
),
|
|
70
|
+
);
|
|
71
|
+
ext.addBehavior(lookAt);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
@@ -1,34 +1,27 @@
|
|
|
1
|
-
import { WebXR } from "./WebXR";
|
|
1
|
+
import { WebXR, WebXREvent } from "./WebXR";
|
|
2
2
|
import { serializable } from "../../engine/engine_serialization";
|
|
3
|
-
import { Behaviour } from "../Component";
|
|
4
|
-
import {
|
|
3
|
+
import { Behaviour, GameObject } from "../Component";
|
|
4
|
+
import { Object3D, Quaternion, Vector3 } from "three";
|
|
5
5
|
import { CircularBuffer, getParam } from "../../engine/engine_utils";
|
|
6
|
+
import { AssetReference } from "../../engine/engine_addressables";
|
|
7
|
+
import { showBalloonWarning } from "../../engine/debug";
|
|
8
|
+
|
|
9
|
+
import { USDZExporter } from "../../engine-components/export/usdz/USDZExporter";
|
|
10
|
+
import { USDZExporterContext, USDWriter, imageToCanvas } from "../../engine-components/export/usdz/ThreeUSDZExporter";
|
|
6
11
|
|
|
7
12
|
// https://github.com/immersive-web/marker-tracking/blob/main/explainer.md
|
|
8
13
|
|
|
9
14
|
const debug = getParam("debugimagetracking");
|
|
10
15
|
|
|
11
|
-
const _scaleTemp = new Vector3();
|
|
12
|
-
|
|
13
16
|
export class WebXRTrackedImage {
|
|
14
17
|
|
|
15
|
-
|
|
16
18
|
get url(): string { return this._trackedImage.image ?? ""; }
|
|
17
19
|
get widthInMeters() { return this._trackedImage.widthInMeters ?? undefined; }
|
|
18
20
|
get bitmap(): ImageBitmap { return this._bitmap; }
|
|
21
|
+
get model(): WebXRImageTrackingModel { return this._trackedImage; }
|
|
19
22
|
readonly measuredSize: number;
|
|
20
23
|
readonly state: "tracked" | "emulated";
|
|
21
24
|
|
|
22
|
-
// private _matrix: Matrix4 | null = null;
|
|
23
|
-
// private get matrix(): Matrix4 {
|
|
24
|
-
// if (!this._matrix) {
|
|
25
|
-
// // this._matrix = WebXRTrackedImage._matrixBuffer.get();
|
|
26
|
-
// // const matrix = this._pose.transform.matrix;
|
|
27
|
-
// // this._matrix.fromArray(matrix);
|
|
28
|
-
// }
|
|
29
|
-
// return this._matrix!;
|
|
30
|
-
// }
|
|
31
|
-
|
|
32
25
|
/** Copy the image position to a vector */
|
|
33
26
|
getPosition(vec: Vector3) {
|
|
34
27
|
this.ensureTransformData();
|
|
@@ -43,13 +36,23 @@ export class WebXRTrackedImage {
|
|
|
43
36
|
return quat;
|
|
44
37
|
}
|
|
45
38
|
|
|
46
|
-
|
|
39
|
+
private static y180 = new Quaternion().setFromAxisAngle(new Vector3(0, 1, 0), Math.PI);
|
|
40
|
+
applyToObject(object: Object3D, t01: number | undefined = undefined) {
|
|
47
41
|
this.ensureTransformData();
|
|
48
|
-
|
|
49
|
-
object.quaternion.
|
|
42
|
+
// check if position/_position or rotation/_rotation changed more than just a little bit
|
|
43
|
+
const haveChanged = object.position.distanceToSquared(this._position) > 0.05 || object.quaternion.angleTo(this._rotation) > 0.05;
|
|
44
|
+
if (t01 === undefined || t01 >= 1 || haveChanged) {
|
|
45
|
+
object.position.copy(this._position);
|
|
46
|
+
object.quaternion.copy(this._rotation);
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
t01 = Math.max(0, Math.min(1, t01));
|
|
50
|
+
object.position.lerp(this._position, t01);
|
|
51
|
+
object.quaternion.slerp(this._rotation, t01);
|
|
52
|
+
}
|
|
53
|
+
object.quaternion.multiply(WebXRTrackedImage.y180);
|
|
50
54
|
}
|
|
51
55
|
|
|
52
|
-
// private static _matrixBuffer: CircularBuffer<Matrix4> = new CircularBuffer(() => new Matrix4(), 20);
|
|
53
56
|
private static _positionBuffer: CircularBuffer<Vector3> = new CircularBuffer(() => new Vector3(), 20);
|
|
54
57
|
private static _rotationBuffer: CircularBuffer<Quaternion> = new CircularBuffer(() => new Quaternion(), 20);
|
|
55
58
|
private _position!: Vector3;
|
|
@@ -59,12 +62,18 @@ export class WebXRTrackedImage {
|
|
|
59
62
|
this._position = WebXRTrackedImage._positionBuffer.get();
|
|
60
63
|
this._rotation = WebXRTrackedImage._rotationBuffer.get();
|
|
61
64
|
const t = this._pose.transform;
|
|
62
|
-
|
|
63
|
-
|
|
65
|
+
|
|
66
|
+
// when parented to the world, we need to flip data here
|
|
67
|
+
//this._position.set(-t.position.x, t.position.y, -t.position.z);
|
|
68
|
+
// this._rotation.set(-t.orientation.x, t.orientation.y, -t.orientation.z, t.orientation.w);
|
|
69
|
+
|
|
70
|
+
// for some reason when parented to the XRRig, we need the original data
|
|
71
|
+
this._position.set(t.position.x, t.position.y, t.position.z);
|
|
72
|
+
this._rotation.set(t.orientation.x, t.orientation.y, t.orientation.z, t.orientation.w);
|
|
64
73
|
}
|
|
65
74
|
}
|
|
66
75
|
|
|
67
|
-
private readonly _trackingComponent: WebXRImageTracking
|
|
76
|
+
private readonly _trackingComponent: WebXRImageTracking;
|
|
68
77
|
private readonly _trackedImage: WebXRImageTrackingModel;
|
|
69
78
|
private readonly _bitmap: ImageBitmap;
|
|
70
79
|
private readonly _pose: any;
|
|
@@ -90,15 +99,46 @@ export class WebXRImageTrackingModel {
|
|
|
90
99
|
@serializable()
|
|
91
100
|
widthInMeters!: number;
|
|
92
101
|
|
|
102
|
+
@serializable(AssetReference)
|
|
103
|
+
object?: AssetReference;
|
|
104
|
+
|
|
105
|
+
@serializable()
|
|
106
|
+
createObjectInstance: boolean = false;
|
|
107
|
+
|
|
108
|
+
@serializable()
|
|
109
|
+
imageDoesNotMove: boolean = false;
|
|
93
110
|
}
|
|
94
111
|
|
|
95
|
-
|
|
112
|
+
class ImageTrackingExtension {
|
|
96
113
|
|
|
97
|
-
|
|
98
|
-
trackedImages!: WebXRImageTrackingModel[];
|
|
114
|
+
get extensionName() { return "image-tracking"; }
|
|
99
115
|
|
|
116
|
+
private filename: string;
|
|
117
|
+
private widthInMeters: number;
|
|
118
|
+
private imageData: Uint8Array;
|
|
100
119
|
|
|
120
|
+
constructor(filename: string, imageData: Uint8Array, widthInMeters: number) {
|
|
121
|
+
this.filename = filename;
|
|
122
|
+
this.imageData = imageData;
|
|
123
|
+
this.widthInMeters = widthInMeters;
|
|
124
|
+
}
|
|
101
125
|
|
|
126
|
+
onAfterHierarchy(_context: USDZExporterContext, writer: USDWriter) {
|
|
127
|
+
writer.beginBlock(`def Preliminary_ReferenceImage "AnchoringReferenceImage"`);
|
|
128
|
+
writer.appendLine(`uniform asset image = @tracker/` + this.filename + `@`);
|
|
129
|
+
writer.appendLine(`uniform double physicalWidth = ` + (this.widthInMeters * 100).toFixed(8));
|
|
130
|
+
writer.closeBlock();
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
onAfterSerialize(context: USDZExporterContext) {
|
|
134
|
+
context.files['tracker/' + this.filename] = this.imageData;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
export class WebXRImageTracking extends Behaviour {
|
|
139
|
+
|
|
140
|
+
@serializable(WebXRImageTrackingModel)
|
|
141
|
+
trackedImages!: WebXRImageTrackingModel[];
|
|
102
142
|
|
|
103
143
|
private readonly trackedImageIndexMap: Map<number, WebXRImageTrackingModel> = new Map();
|
|
104
144
|
|
|
@@ -117,21 +157,45 @@ export class WebXRImageTracking extends Behaviour {
|
|
|
117
157
|
imageElement.addEventListener("load", async () => {
|
|
118
158
|
const img = await createImageBitmap(imageElement);
|
|
119
159
|
WebXRImageTracking._imageElements.set(url, img);
|
|
160
|
+
|
|
161
|
+
// read back Uint8Array to use in USDZ -
|
|
162
|
+
// TODO better would be to do that once we actually need it
|
|
163
|
+
const canvas = await imageToCanvas( img );
|
|
164
|
+
if (canvas) {
|
|
165
|
+
const blob = await new Promise( resolve => canvas.toBlob( resolve, 'image/png', 1 ) ) as any;
|
|
166
|
+
const arrayBuffer = await blob.arrayBuffer();
|
|
167
|
+
|
|
168
|
+
const exporter = GameObject.findObjectOfType(USDZExporter);
|
|
169
|
+
if (exporter) {
|
|
170
|
+
exporter.extensions.push(
|
|
171
|
+
new ImageTrackingExtension("marker.png", new Uint8Array(arrayBuffer), this.trackedImages[0].widthInMeters)
|
|
172
|
+
);
|
|
173
|
+
exporter.anchoringType = "image";
|
|
174
|
+
}
|
|
175
|
+
}
|
|
120
176
|
});
|
|
121
177
|
}
|
|
122
178
|
}
|
|
123
179
|
}
|
|
124
180
|
}
|
|
125
181
|
|
|
182
|
+
private xr: WebXR | null = null;
|
|
183
|
+
|
|
126
184
|
onEnable(): void {
|
|
127
|
-
|
|
185
|
+
this.xr = GameObject.findObjectOfType(WebXR);
|
|
186
|
+
WebXR.addEventListener(WebXREvent.ModifyAROptions, this.onModifyAROptions);
|
|
187
|
+
WebXR.addEventListener(WebXREvent.XRStarted, this.onXRStarted);
|
|
188
|
+
WebXR.addEventListener(WebXREvent.XRUpdate, this.onXRUpdate);
|
|
189
|
+
this.addEventListener("image-tracking", this.onImageTrackingUpdate);
|
|
128
190
|
}
|
|
129
191
|
|
|
130
192
|
onDisable(): void {
|
|
131
|
-
WebXR.removeEventListener(
|
|
193
|
+
WebXR.removeEventListener(WebXREvent.ModifyAROptions, this.onModifyAROptions);
|
|
194
|
+
WebXR.removeEventListener(WebXREvent.XRStarted, this.onXRStarted);
|
|
195
|
+
WebXR.removeEventListener(WebXREvent.XRUpdate, this.onXRUpdate);
|
|
196
|
+
this.removeEventListener("image-tracking", this.onImageTrackingUpdate);
|
|
132
197
|
}
|
|
133
198
|
|
|
134
|
-
|
|
135
199
|
private onModifyAROptions = (event: any) => {
|
|
136
200
|
const options = event.detail;
|
|
137
201
|
const features = options.optionalFeatures || [];
|
|
@@ -154,9 +218,93 @@ export class WebXRImageTracking extends Behaviour {
|
|
|
154
218
|
}
|
|
155
219
|
}
|
|
156
220
|
|
|
157
|
-
|
|
221
|
+
private imageToObjectMap: Map<WebXRImageTrackingModel, { object: GameObject | null, frames: number }> = new Map();
|
|
222
|
+
|
|
223
|
+
private onImageTrackingUpdate = (event: any) => {
|
|
224
|
+
const images = event.detail as WebXRTrackedImage[];
|
|
225
|
+
|
|
226
|
+
// disable any objects that are no longer tracked
|
|
227
|
+
for (const [model, object] of this.imageToObjectMap) {
|
|
228
|
+
if (!object.object || !model) continue;
|
|
229
|
+
let found = false;
|
|
230
|
+
for (const trackedImage of images) {
|
|
231
|
+
if (trackedImage.model === model) {
|
|
232
|
+
found = true;
|
|
233
|
+
break;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
if (!found) {
|
|
237
|
+
GameObject.setActive(object.object, false);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
for (const image of images) {
|
|
242
|
+
const model = image.model;
|
|
243
|
+
// don't do anything if we don't have an object to track - can be handled externally through events
|
|
244
|
+
if (!model.object) continue;
|
|
245
|
+
|
|
246
|
+
let trackedData = this.imageToObjectMap.get(model);
|
|
247
|
+
if (trackedData === undefined) {
|
|
248
|
+
trackedData = { object: null, frames: 0 };
|
|
249
|
+
this.imageToObjectMap.set(model, trackedData);
|
|
250
|
+
|
|
251
|
+
model.object.loadAssetAsync().then((asset: GameObject | null) => {
|
|
252
|
+
if (model.createObjectInstance)
|
|
253
|
+
asset = GameObject.instantiate(asset);
|
|
254
|
+
|
|
255
|
+
if (asset) {
|
|
256
|
+
trackedData!.object = asset;
|
|
257
|
+
|
|
258
|
+
// make sure to parent to the WebXR.rig
|
|
259
|
+
if (this.xr) {
|
|
260
|
+
this.xr.Rig.add(asset);
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
image.applyToObject(asset);
|
|
264
|
+
if (!asset.activeSelf)
|
|
265
|
+
GameObject.setActive(asset, true);
|
|
266
|
+
}
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
else {
|
|
270
|
+
trackedData.frames++;
|
|
271
|
+
|
|
272
|
+
// TODO we could do a bit more here: e.g. sample for the first 1s or so of getting pose data
|
|
273
|
+
// to improve the tracking quality a bit.
|
|
274
|
+
if (model.imageDoesNotMove && trackedData.frames > 10)
|
|
275
|
+
continue;
|
|
276
|
+
|
|
277
|
+
if (!trackedData.object) continue;
|
|
278
|
+
|
|
279
|
+
if (this.xr) {
|
|
280
|
+
this.xr.Rig.add(trackedData.object);
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
image.applyToObject(trackedData.object);
|
|
284
|
+
if (!trackedData.object.activeSelf)
|
|
285
|
+
GameObject.setActive(trackedData.object, true);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
private onXRStarted = (_: any) => {
|
|
291
|
+
// clear out all frame counters for tracking
|
|
292
|
+
for (const trackedData of this.imageToObjectMap.values()) {
|
|
293
|
+
trackedData.frames = 0;
|
|
294
|
+
}
|
|
295
|
+
};
|
|
296
|
+
|
|
297
|
+
private onXRUpdate = (evt): void => {
|
|
298
|
+
const frame = evt.frame;
|
|
299
|
+
if (!frame) return;
|
|
300
|
+
|
|
301
|
+
if (frame.session && !("getImageTrackingResults" in frame)) {
|
|
302
|
+
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.");
|
|
303
|
+
return;
|
|
304
|
+
}
|
|
305
|
+
|
|
158
306
|
//@ts-ignore
|
|
159
|
-
if (frame
|
|
307
|
+
if (frame.session && typeof frame.getImageTrackingResults === "function") {
|
|
160
308
|
//@ts-ignore
|
|
161
309
|
const results = frame.getImageTrackingResults();
|
|
162
310
|
if (results.length) {
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { Object3D, Matrix4, Material, BufferGeometry } from "three";
|
|
2
|
-
/** implementation is in three */
|
|
3
|
-
export declare class USDZDocument {
|
|
4
|
-
name: string;
|
|
5
|
-
get isDocumentRoot(): boolean;
|
|
6
|
-
add(obj: USDZObject): any;
|
|
7
|
-
remove(obj: USDZObject): any;
|
|
8
|
-
traverse(callback: (obj: USDZObject) => void): any;
|
|
9
|
-
findById(uuid: string): USDZObject | undefined;
|
|
10
|
-
get isDynamic(): boolean;
|
|
11
|
-
}
|
|
12
|
-
/** implementation is in three */
|
|
13
|
-
export declare class USDZObject {
|
|
14
|
-
static createEmptyParent(parent: USDZObject): any;
|
|
15
|
-
uuid: string;
|
|
16
|
-
name: string;
|
|
17
|
-
matrix: Matrix4;
|
|
18
|
-
material: Material;
|
|
19
|
-
geometry: BufferGeometry;
|
|
20
|
-
parent: USDZObject | USDZDocument | null;
|
|
21
|
-
children: USDZObject[];
|
|
22
|
-
_eventListeners: {
|
|
23
|
-
[event: string]: Function[];
|
|
24
|
-
};
|
|
25
|
-
isDynamic: boolean;
|
|
26
|
-
is(obj: Object3D): boolean;
|
|
27
|
-
isEmpty(): boolean;
|
|
28
|
-
clone(): any;
|
|
29
|
-
getPath(): any;
|
|
30
|
-
add(child: USDZObject): any;
|
|
31
|
-
remove(child: USDZObject): any;
|
|
32
|
-
addEventListener(evt: string, listener: Function): any;
|
|
33
|
-
removeEventListener(evt: string, listener: Function): any;
|
|
34
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/engine-components/export/usdz/types.ts"],"names":[],"mappings":""}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { BaseUIComponent } from './BaseUIComponent';
|
|
2
|
-
import { Text } from './Text';
|
|
3
|
-
declare enum KeymapOption {
|
|
4
|
-
fr = 0,
|
|
5
|
-
ru = 1,
|
|
6
|
-
de = 2,
|
|
7
|
-
es = 3,
|
|
8
|
-
el = 4,
|
|
9
|
-
nord = 5,
|
|
10
|
-
eng = 6
|
|
11
|
-
}
|
|
12
|
-
export declare class Keyboard extends BaseUIComponent {
|
|
13
|
-
font?: string;
|
|
14
|
-
text?: Text;
|
|
15
|
-
keymap?: KeymapOption;
|
|
16
|
-
padding?: number;
|
|
17
|
-
margin?: number;
|
|
18
|
-
fontSize?: number;
|
|
19
|
-
borderRadius?: number;
|
|
20
|
-
private colors;
|
|
21
|
-
awake(): void;
|
|
22
|
-
onEnable(): void;
|
|
23
|
-
onDisable(): void;
|
|
24
|
-
private keyboard;
|
|
25
|
-
private _lastKeyPressed;
|
|
26
|
-
private _lastKeyPressedStartTime;
|
|
27
|
-
private _lastKeyPressedTime;
|
|
28
|
-
private makeKeyboard;
|
|
29
|
-
private tryAppend;
|
|
30
|
-
}
|
|
31
|
-
export {};
|
|
@@ -1,178 +0,0 @@
|
|
|
1
|
-
import * as ThreeMeshUI from 'three-mesh-ui';
|
|
2
|
-
import * as THREE from 'three';
|
|
3
|
-
import { BaseUIComponent, includesDir } from './BaseUIComponent';
|
|
4
|
-
import { RectTransform } from './RectTransform';
|
|
5
|
-
import { GameObject } from '../Component';
|
|
6
|
-
var KeymapOption;
|
|
7
|
-
(function (KeymapOption) {
|
|
8
|
-
KeymapOption[KeymapOption["fr"] = 0] = "fr";
|
|
9
|
-
KeymapOption[KeymapOption["ru"] = 1] = "ru";
|
|
10
|
-
KeymapOption[KeymapOption["de"] = 2] = "de";
|
|
11
|
-
KeymapOption[KeymapOption["es"] = 3] = "es";
|
|
12
|
-
KeymapOption[KeymapOption["el"] = 4] = "el";
|
|
13
|
-
KeymapOption[KeymapOption["nord"] = 5] = "nord";
|
|
14
|
-
KeymapOption[KeymapOption["eng"] = 6] = "eng";
|
|
15
|
-
})(KeymapOption || (KeymapOption = {}));
|
|
16
|
-
// see https://github.com/felixmariotto/three-mesh-ui/blob/master/examples/keyboard.js
|
|
17
|
-
export class Keyboard extends BaseUIComponent {
|
|
18
|
-
font;
|
|
19
|
-
text;
|
|
20
|
-
keymap;
|
|
21
|
-
padding;
|
|
22
|
-
margin;
|
|
23
|
-
fontSize;
|
|
24
|
-
borderRadius;
|
|
25
|
-
colors = {
|
|
26
|
-
keyboardBack: 0x858585,
|
|
27
|
-
panelBack: 0x262626,
|
|
28
|
-
button: 0x363636,
|
|
29
|
-
hovered: 0x1c1c1c,
|
|
30
|
-
selected: 0x109c5d,
|
|
31
|
-
};
|
|
32
|
-
awake() {
|
|
33
|
-
super.awake();
|
|
34
|
-
const langKey = KeymapOption[this.keymap || KeymapOption.eng];
|
|
35
|
-
this.makeKeyboard(langKey);
|
|
36
|
-
}
|
|
37
|
-
onEnable() {
|
|
38
|
-
this.addShadowComponent(this.keyboard);
|
|
39
|
-
}
|
|
40
|
-
onDisable() {
|
|
41
|
-
this.removeShadowComponent();
|
|
42
|
-
}
|
|
43
|
-
keyboard = null;
|
|
44
|
-
_lastKeyPressed;
|
|
45
|
-
_lastKeyPressedStartTime = 0;
|
|
46
|
-
_lastKeyPressedTime = 0;
|
|
47
|
-
makeKeyboard(language) {
|
|
48
|
-
if (!language && !navigator.language) {
|
|
49
|
-
language = "en";
|
|
50
|
-
}
|
|
51
|
-
const fontName = this.font ? this.font : "arial";
|
|
52
|
-
const rt = GameObject.getComponent(this.gameObject, RectTransform);
|
|
53
|
-
if (!rt) {
|
|
54
|
-
console.error("Missing rect transform, please add this component inside a canvas");
|
|
55
|
-
return;
|
|
56
|
-
}
|
|
57
|
-
const opts = {
|
|
58
|
-
...rt.getBasicOptions(),
|
|
59
|
-
margin: this.margin || 0,
|
|
60
|
-
padding: this.padding || 0,
|
|
61
|
-
language: language,
|
|
62
|
-
fontFamily: includesDir + "/" + fontName + "-msdf.json",
|
|
63
|
-
fontTexture: includesDir + "/" + fontName + ".png",
|
|
64
|
-
fontSize: this.fontSize || 6,
|
|
65
|
-
backgroundColor: new THREE.Color(this.colors.keyboardBack),
|
|
66
|
-
backspaceTexture: includesDir + '/backspace.png',
|
|
67
|
-
shiftTexture: includesDir + '/shift.png',
|
|
68
|
-
enterTexture: includesDir + '/enter.png',
|
|
69
|
-
borderRadius: this.borderRadius || 0,
|
|
70
|
-
autoLayout: false,
|
|
71
|
-
};
|
|
72
|
-
// const ws = getWorldScale(this.gameObject);
|
|
73
|
-
const scale = this.gameObject.scale;
|
|
74
|
-
opts.width *= this.gameObject.scale.x;
|
|
75
|
-
opts.height *= this.gameObject.scale.y;
|
|
76
|
-
opts.fontSize *= Math.max(scale.x, scale.y);
|
|
77
|
-
this.keyboard = new ThreeMeshUI.Keyboard(opts);
|
|
78
|
-
// const scale = this.gameObject.scale;
|
|
79
|
-
// const max = Math.max(scale.x, scale.y, scale.z);
|
|
80
|
-
this.gameObject.scale.set(1, 1, 1);
|
|
81
|
-
//@ts-ignore
|
|
82
|
-
this.keyboard.keys.forEach((key) => {
|
|
83
|
-
key.setupState({
|
|
84
|
-
state: 'normal',
|
|
85
|
-
attributes: {
|
|
86
|
-
offset: 0.003,
|
|
87
|
-
backgroundColor: new THREE.Color(this.colors.button),
|
|
88
|
-
backgroundOpacity: 1
|
|
89
|
-
}
|
|
90
|
-
});
|
|
91
|
-
key.setState("normal");
|
|
92
|
-
key.setupState({
|
|
93
|
-
state: 'hovered',
|
|
94
|
-
attributes: {
|
|
95
|
-
offset: 0.3,
|
|
96
|
-
backgroundColor: new THREE.Color(this.colors.hovered),
|
|
97
|
-
backgroundOpacity: 1
|
|
98
|
-
}
|
|
99
|
-
});
|
|
100
|
-
key.setupState({
|
|
101
|
-
state: 'pressed',
|
|
102
|
-
attributes: {
|
|
103
|
-
offset: 0.1,
|
|
104
|
-
backgroundColor: new THREE.Color(this.colors.selected),
|
|
105
|
-
backgroundOpacity: 1
|
|
106
|
-
},
|
|
107
|
-
// triggered when the user clicked on a keyboard's key
|
|
108
|
-
onSet: () => {
|
|
109
|
-
const input = key.info.input;
|
|
110
|
-
const cmd = key.info.command;
|
|
111
|
-
if (this._lastKeyPressed !== input) {
|
|
112
|
-
this._lastKeyPressedStartTime = this.context.time.time;
|
|
113
|
-
}
|
|
114
|
-
else if (this.context.time.time - this._lastKeyPressedTime > .05) {
|
|
115
|
-
// there was probably a key up inbetween
|
|
116
|
-
this._lastKeyPressedStartTime = this.context.time.time;
|
|
117
|
-
}
|
|
118
|
-
else if (this.context.time.time - this._lastKeyPressedStartTime < .5
|
|
119
|
-
|| cmd == "switch"
|
|
120
|
-
|| cmd == "shift"
|
|
121
|
-
|| cmd == "switch-set") {
|
|
122
|
-
this._lastKeyPressedTime = this.context.time.time;
|
|
123
|
-
return;
|
|
124
|
-
}
|
|
125
|
-
this._lastKeyPressedTime = this.context.time.time;
|
|
126
|
-
this._lastKeyPressed = input;
|
|
127
|
-
// if the key have a command (eg: 'backspace', 'switch', 'enter'...)
|
|
128
|
-
// special actions are taken
|
|
129
|
-
if (cmd) {
|
|
130
|
-
switch (cmd) {
|
|
131
|
-
// switch between panels
|
|
132
|
-
case 'switch':
|
|
133
|
-
//@ts-ignore
|
|
134
|
-
this.keyboard.setNextPanel();
|
|
135
|
-
break;
|
|
136
|
-
// switch between panel charsets (eg: russian/english)
|
|
137
|
-
case 'switch-set':
|
|
138
|
-
//@ts-ignore
|
|
139
|
-
this.keyboard.setNextCharset();
|
|
140
|
-
break;
|
|
141
|
-
case 'enter':
|
|
142
|
-
this.tryAppend('\n');
|
|
143
|
-
break;
|
|
144
|
-
case 'space':
|
|
145
|
-
this.tryAppend(' ');
|
|
146
|
-
break;
|
|
147
|
-
case 'backspace':
|
|
148
|
-
//@ts-ignore
|
|
149
|
-
if (!this.text?.text?.length)
|
|
150
|
-
break;
|
|
151
|
-
if (this.text?.text)
|
|
152
|
-
this.text.text = this.text.text.substring(0, this.text.text.length - 1) || "";
|
|
153
|
-
break;
|
|
154
|
-
case 'shift':
|
|
155
|
-
//@ts-ignore
|
|
156
|
-
this.keyboard.toggleCase();
|
|
157
|
-
break;
|
|
158
|
-
}
|
|
159
|
-
;
|
|
160
|
-
// print a glyph, if any
|
|
161
|
-
}
|
|
162
|
-
else if (key.info.input !== undefined) {
|
|
163
|
-
this.tryAppend(key.info.input);
|
|
164
|
-
}
|
|
165
|
-
;
|
|
166
|
-
}
|
|
167
|
-
});
|
|
168
|
-
});
|
|
169
|
-
}
|
|
170
|
-
;
|
|
171
|
-
tryAppend(char) {
|
|
172
|
-
if (this.text) {
|
|
173
|
-
this.text.text += char;
|
|
174
|
-
this.markDirty();
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
//# sourceMappingURL=Keyboard.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Keyboard.js","sourceRoot":"","sources":["../../../src/engine-components/ui/Keyboard.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { Object3D, Matrix4, Material, BufferGeometry } from "three";
|
|
2
|
-
|
|
3
|
-
// keep in sync with USDZExporter.js
|
|
4
|
-
|
|
5
|
-
/** implementation is in three */
|
|
6
|
-
export declare class USDZDocument {
|
|
7
|
-
name: string;
|
|
8
|
-
get isDocumentRoot(): boolean;
|
|
9
|
-
add(obj: USDZObject);
|
|
10
|
-
remove(obj: USDZObject);
|
|
11
|
-
traverse(callback: (obj: USDZObject) => void);
|
|
12
|
-
findById(uuid: string): USDZObject | undefined;
|
|
13
|
-
get isDynamic(): boolean;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
/** implementation is in three */
|
|
19
|
-
export declare class USDZObject {
|
|
20
|
-
static createEmptyParent(parent: USDZObject);
|
|
21
|
-
uuid: string;
|
|
22
|
-
name: string;
|
|
23
|
-
matrix: Matrix4;
|
|
24
|
-
material: Material;
|
|
25
|
-
geometry: BufferGeometry;
|
|
26
|
-
parent: USDZObject | USDZDocument | null;
|
|
27
|
-
children: USDZObject[];
|
|
28
|
-
_eventListeners: { [event: string]: Function[] };
|
|
29
|
-
isDynamic: boolean;
|
|
30
|
-
|
|
31
|
-
is(obj: Object3D): boolean;
|
|
32
|
-
isEmpty(): boolean;
|
|
33
|
-
clone();
|
|
34
|
-
getPath();
|
|
35
|
-
add(child: USDZObject);
|
|
36
|
-
remove(child: USDZObject);
|
|
37
|
-
addEventListener(evt: string, listener: Function);
|
|
38
|
-
removeEventListener(evt: string, listener: Function);
|
|
39
|
-
}
|