@needle-tools/engine 4.8.6-next.f3ce848 → 4.8.7-next.3c34e8b
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 +4 -0
- package/components.needle.json +1 -1
- package/dist/{gltf-progressive-DXRy9EQz.js → gltf-progressive-BcHT3Nyo.js} +1 -1
- package/dist/{gltf-progressive-C-U_onhf.umd.cjs → gltf-progressive-CH3Q4H06.umd.cjs} +1 -1
- package/dist/{gltf-progressive-DViD_J_l.min.js → gltf-progressive-DR6HqF_h.min.js} +1 -1
- package/dist/{needle-engine.bundle-C4N-adas.umd.cjs → needle-engine.bundle-BgFqEj5W.umd.cjs} +134 -134
- package/dist/{needle-engine.bundle-CJSl-mXb.min.js → needle-engine.bundle-BthqMTPI.min.js} +124 -124
- package/dist/{needle-engine.bundle-fXDFH_oR.js → needle-engine.bundle-Fj5SzBaF.js} +3850 -3812
- package/dist/needle-engine.js +394 -393
- package/dist/needle-engine.min.js +1 -1
- package/dist/needle-engine.umd.cjs +1 -1
- package/dist/{postprocessing-61aXdqNz.umd.cjs → postprocessing-CVb_x9YY.umd.cjs} +1 -1
- package/dist/{postprocessing-D9jDHD0U.js → postprocessing-ORx-0eCx.js} +1 -1
- package/dist/{postprocessing-Be9Ds4NK.min.js → postprocessing-Ywv5oKkX.min.js} +1 -1
- package/dist/three-examples-BX_Sktc9.min.js +501 -0
- package/dist/{three-examples-BihZ_R96.js → three-examples-CNexix3E.js} +2436 -2781
- package/dist/{three-examples-Ce6Th3bv.umd.cjs → three-examples-DWxXVnws.umd.cjs} +21 -21
- package/dist/{vendor-BRpzuoJE.min.js → vendor-C43vobGc.min.js} +37 -37
- package/dist/{vendor-p_xp9KuJ.js → vendor-Z4SPrTcP.js} +2402 -2047
- package/dist/vendor-xfQ8tKF3.umd.cjs +1121 -0
- package/lib/engine/api.d.ts +1 -0
- package/lib/engine/api.js +1 -0
- package/lib/engine/api.js.map +1 -1
- package/lib/engine/engine_addressables.d.ts +12 -12
- package/lib/engine/engine_addressables.js +30 -23
- package/lib/engine/engine_addressables.js.map +1 -1
- package/lib/engine/engine_animation.d.ts +1 -3
- package/lib/engine/engine_animation.js +15 -9
- package/lib/engine/engine_animation.js.map +1 -1
- package/lib/engine/engine_feature_flags.d.ts +3 -0
- package/lib/engine/engine_feature_flags.js +6 -0
- package/lib/engine/engine_feature_flags.js.map +1 -0
- package/lib/engine/engine_loaders.js +15 -11
- package/lib/engine/engine_loaders.js.map +1 -1
- package/lib/engine/engine_mainloop_utils.d.ts +2 -1
- package/lib/engine/engine_mainloop_utils.js +16 -4
- package/lib/engine/engine_mainloop_utils.js.map +1 -1
- package/lib/engine/extensions/extensions.js +2 -2
- package/lib/engine/extensions/extensions.js.map +1 -1
- package/lib/engine/js-extensions/Object3D.js +19 -0
- package/lib/engine/js-extensions/Object3D.js.map +1 -1
- package/lib/engine-components/Animation.js +2 -1
- package/lib/engine-components/Animation.js.map +1 -1
- package/lib/engine-components/AnimationUtilsAutoplay.js +1 -6
- package/lib/engine-components/AnimationUtilsAutoplay.js.map +1 -1
- package/lib/engine-components/DropListener.d.ts +17 -12
- package/lib/engine-components/DropListener.js +34 -31
- package/lib/engine-components/DropListener.js.map +1 -1
- package/lib/engine-components/LookAtConstraint.d.ts +5 -1
- package/lib/engine-components/LookAtConstraint.js +8 -0
- package/lib/engine-components/LookAtConstraint.js.map +1 -1
- package/lib/engine-components/OrbitControls.d.ts +5 -7
- package/lib/engine-components/OrbitControls.js +12 -11
- package/lib/engine-components/OrbitControls.js.map +1 -1
- package/lib/engine-components/webxr/WebXRImageTracking.d.ts +1 -1
- package/lib/engine-components/webxr/WebXRImageTracking.js +12 -10
- package/lib/engine-components/webxr/WebXRImageTracking.js.map +1 -1
- package/package.json +3 -2
- package/plugins/vite/alias.js +45 -23
- package/src/engine/api.ts +2 -1
- package/src/engine/engine_addressables.ts +44 -33
- package/src/engine/engine_animation.ts +17 -9
- package/src/engine/engine_feature_flags.ts +8 -0
- package/src/engine/engine_loaders.ts +18 -13
- package/src/engine/engine_mainloop_utils.ts +21 -6
- package/src/engine/extensions/extensions.ts +2 -2
- package/src/engine/js-extensions/Object3D.ts +25 -2
- package/src/engine-components/Animation.ts +1 -1
- package/src/engine-components/AnimationUtilsAutoplay.ts +1 -6
- package/src/engine-components/DropListener.ts +40 -31
- package/src/engine-components/LookAtConstraint.ts +9 -1
- package/src/engine-components/OrbitControls.ts +19 -16
- package/src/engine-components/webxr/WebXRImageTracking.ts +16 -14
- package/dist/three-examples-DKY9Nfge.min.js +0 -501
- package/dist/vendor-Ja-vKV-a.umd.cjs +0 -1121
|
@@ -649,12 +649,12 @@ export class OrbitControls extends Behaviour implements ICameraController {
|
|
|
649
649
|
if (this._lookTargetLerpActive) {
|
|
650
650
|
this._lookTargetLerp01 += this.context.time.deltaTime / this._lookTargetLerpDuration;
|
|
651
651
|
if (this._lookTargetLerp01 >= 1) {
|
|
652
|
-
this.
|
|
652
|
+
this.lerpLookTarget(this._lookTargetEndPosition, this._lookTargetEndPosition, 1);
|
|
653
653
|
this._lookTargetLerpActive = false;
|
|
654
654
|
this.dispatchEvent(new CameraTargetReachedEvent(this, "lookat"));
|
|
655
655
|
} else {
|
|
656
656
|
const t = Mathf.easeInOutCubic(this._lookTargetLerp01);
|
|
657
|
-
this.
|
|
657
|
+
this.lerpLookTarget(this._lookTargetStartPosition, this._lookTargetEndPosition, t);
|
|
658
658
|
}
|
|
659
659
|
}
|
|
660
660
|
|
|
@@ -729,7 +729,9 @@ export class OrbitControls extends Behaviour implements ICameraController {
|
|
|
729
729
|
|
|
730
730
|
// this._controls.zoomToCursor = this.zoomToCursor;
|
|
731
731
|
if (!this.context.isInXR) {
|
|
732
|
-
if (!freeCam && this.lookAtConstraint?.locked
|
|
732
|
+
if (!freeCam && this.lookAtConstraint?.locked && !this._lookTargetLerpActive) {
|
|
733
|
+
this.setLookTargetFromConstraint(0, this.lookAtConstraint01);
|
|
734
|
+
}
|
|
733
735
|
this._controls.update(this.context.time.deltaTime);
|
|
734
736
|
|
|
735
737
|
if (debug) {
|
|
@@ -910,7 +912,7 @@ export class OrbitControls extends Behaviour implements ICameraController {
|
|
|
910
912
|
}
|
|
911
913
|
|
|
912
914
|
if (immediateOrDuration === true) {
|
|
913
|
-
this.
|
|
915
|
+
this.lerpLookTarget(this._lookTargetEndPosition, this._lookTargetEndPosition, 1);
|
|
914
916
|
}
|
|
915
917
|
else {
|
|
916
918
|
this._lookTargetLerpActive = true;
|
|
@@ -941,20 +943,18 @@ export class OrbitControls extends Behaviour implements ICameraController {
|
|
|
941
943
|
const target = sources[index];
|
|
942
944
|
if (target) {
|
|
943
945
|
target.getWorldPosition(this._lookTargetEndPosition);
|
|
944
|
-
this.lerpLookTarget(this._lookTargetEndPosition, t);
|
|
946
|
+
this.lerpLookTarget(this._controls.target, this._lookTargetEndPosition, t);
|
|
945
947
|
return true;
|
|
946
948
|
}
|
|
947
949
|
}
|
|
948
950
|
return false;
|
|
949
951
|
}
|
|
950
952
|
|
|
951
|
-
|
|
952
|
-
public lerpTarget(position: Vector3, delta: number) { return this.lerpLookTarget(position, delta); }
|
|
953
|
-
|
|
954
|
-
private lerpLookTarget(position: Vector3, delta: number) {
|
|
953
|
+
private lerpLookTarget(start: Vector3, position: Vector3, t: number) {
|
|
955
954
|
if (!this._controls) return;
|
|
956
|
-
if (
|
|
957
|
-
else this._controls.target.
|
|
955
|
+
if (t >= 1) this._controls.target.copy(position);
|
|
956
|
+
else this._controls.target.lerpVectors(start, position, t);
|
|
957
|
+
if (this.lookAtConstraint) this.lookAtConstraint.setConstraintPosition(this._controls.target);
|
|
958
958
|
}
|
|
959
959
|
|
|
960
960
|
private setTargetFromRaycast(ray?: Ray, immediateOrDuration: number | boolean = false): boolean {
|
|
@@ -1063,7 +1063,7 @@ export class OrbitControls extends Behaviour implements ICameraController {
|
|
|
1063
1063
|
return;
|
|
1064
1064
|
}
|
|
1065
1065
|
|
|
1066
|
-
const verticalFov =
|
|
1066
|
+
const verticalFov = fov;
|
|
1067
1067
|
const horizontalFov = 2 * Math.atan(Math.tan(verticalFov * Math.PI / 360 / 2) * camera.aspect) / Math.PI * 360;
|
|
1068
1068
|
const fitHeightDistance = size.y / (2 * Math.atan(Math.PI * verticalFov / 360));
|
|
1069
1069
|
const fitWidthDistance = size.x / (2 * Math.atan(Math.PI * horizontalFov / 360));
|
|
@@ -1161,16 +1161,19 @@ declare type FitCameraOptions = {
|
|
|
1161
1161
|
* The objects to fit the camera to. If not provided the scene children will be used
|
|
1162
1162
|
*/
|
|
1163
1163
|
objects?: Object3D[] | Object3D;
|
|
1164
|
-
/** Fit offset: A factor to multiply the distance to the objects by
|
|
1165
|
-
* @default 1.1
|
|
1166
|
-
*/
|
|
1167
|
-
fitOffset?: number,
|
|
1168
1164
|
/** If true the camera will move immediately to the new position, otherwise it will lerp
|
|
1169
1165
|
* @default false
|
|
1170
1166
|
*/
|
|
1171
1167
|
immediate?: boolean,
|
|
1168
|
+
|
|
1172
1169
|
/** If set to "y" the camera will be centered in the y axis */
|
|
1173
1170
|
centerCamera?: "none" | "y",
|
|
1174
1171
|
cameraNearFar?: "keep" | "auto",
|
|
1172
|
+
|
|
1175
1173
|
fov?: number,
|
|
1174
|
+
|
|
1175
|
+
/** Fit offset: A factor to multiply the distance to the objects by
|
|
1176
|
+
* @default 1.1
|
|
1177
|
+
*/
|
|
1178
|
+
fitOffset?: number,
|
|
1176
1179
|
}
|
|
@@ -12,6 +12,7 @@ import { imageToCanvas, USDObject, USDWriter, USDZExporterContext } from "../../
|
|
|
12
12
|
import { USDZExporter } from "../../engine-components/export/usdz/USDZExporter.js";
|
|
13
13
|
import { Behaviour, GameObject } from "../Component.js";
|
|
14
14
|
import { Renderer } from "../Renderer.js";
|
|
15
|
+
import { Context } from "../../engine/engine_context.js";
|
|
15
16
|
|
|
16
17
|
// https://github.com/immersive-web/marker-tracking/blob/main/explainer.md
|
|
17
18
|
|
|
@@ -159,6 +160,10 @@ class ImageTrackingExtension implements IUSDExporterExtension {
|
|
|
159
160
|
this.widthInMeters = widthInMeters;
|
|
160
161
|
}
|
|
161
162
|
|
|
163
|
+
private getImageTrackingComponents() {
|
|
164
|
+
return GameObject.findObjectsOfType(WebXRImageTracking, Context.Current).filter(c => c.trackedImages && c.trackedImages.length > 0 && c.activeAndEnabled);
|
|
165
|
+
}
|
|
166
|
+
|
|
162
167
|
onAfterHierarchy(_context: USDZExporterContext, writer: USDWriter) {
|
|
163
168
|
const iOSVersion = DeviceUtilities.getiOSVersion();
|
|
164
169
|
const majorVersion = iOSVersion ? parseInt(iOSVersion.split(".")[0]) : 18;
|
|
@@ -171,12 +176,10 @@ class ImageTrackingExtension implements IUSDExporterExtension {
|
|
|
171
176
|
}
|
|
172
177
|
|
|
173
178
|
onBeforeBuildDocument(_context: USDZExporterContext) {
|
|
174
|
-
const imageTracking =
|
|
175
|
-
if (!imageTracking || !imageTracking.trackedImages) return;
|
|
179
|
+
const imageTracking = this.getImageTrackingComponents()[0];
|
|
176
180
|
|
|
177
181
|
// Warn if more than one tracked image is used for USDZ; that's not supported at the moment.
|
|
178
|
-
if (imageTracking.trackedImages
|
|
179
|
-
{
|
|
182
|
+
if (imageTracking && imageTracking.trackedImages?.length > 1) {
|
|
180
183
|
if (isDevEnvironment()) showBalloonWarning("USDZ: Only one tracked image is supported.");
|
|
181
184
|
console.warn("USDZ: Only one tracked image is supported.");
|
|
182
185
|
}
|
|
@@ -187,15 +190,14 @@ class ImageTrackingExtension implements IUSDExporterExtension {
|
|
|
187
190
|
}
|
|
188
191
|
|
|
189
192
|
onExportObject(object: Object3D<Object3DEventMap>, model: USDObject, _context: USDZExporterContext) {
|
|
190
|
-
const imageTracking =
|
|
191
|
-
if (!imageTracking || !imageTracking.trackedImages) return;
|
|
193
|
+
const imageTracking = this.getImageTrackingComponents()[0];
|
|
194
|
+
if (!imageTracking || !imageTracking.trackedImages?.length) return;
|
|
192
195
|
|
|
196
|
+
const exporter = GameObject.findObjectOfType(USDZExporter);
|
|
197
|
+
if (!exporter) return;
|
|
193
198
|
|
|
194
199
|
for (const trackedImage of imageTracking.trackedImages) {
|
|
195
200
|
if (trackedImage.object?.asset === object) {
|
|
196
|
-
const exporter = GameObject.findObjectOfType(USDZExporter);
|
|
197
|
-
if (!exporter) continue;
|
|
198
|
-
|
|
199
201
|
const { scale, target } = exporter.getARScaleAndTarget();
|
|
200
202
|
|
|
201
203
|
// We have to reset the image tracking object's position and rotation, because QuickLook applies them.
|
|
@@ -220,8 +222,8 @@ class ImageTrackingExtension implements IUSDExporterExtension {
|
|
|
220
222
|
// Thus, we can't have separate transforms for "regularly placing content" and "placing content with an image marker".
|
|
221
223
|
// model.extraSchemas.push("Preliminary_AnchoringAPI");
|
|
222
224
|
// model.addEventListener("serialize", (_writer: USDWriter, _context: USDZExporterContext) => {
|
|
223
|
-
|
|
224
|
-
|
|
225
|
+
// writer.appendLine( `token preliminary:anchoring:type = "image"` );
|
|
226
|
+
// writer.appendLine( `rel preliminary:imageAnchoring:referenceImage = </${context.document.name}/Scenes/Scene/AnchoringReferenceImage>` );
|
|
225
227
|
// });
|
|
226
228
|
|
|
227
229
|
// We can only apply this to the first tracked image, more are not supported by QuickLook.
|
|
@@ -238,7 +240,7 @@ class ImageTrackingExtension implements IUSDExporterExtension {
|
|
|
238
240
|
export class WebXRImageTracking extends Behaviour {
|
|
239
241
|
|
|
240
242
|
@serializable(WebXRImageTrackingModel)
|
|
241
|
-
trackedImages
|
|
243
|
+
trackedImages: WebXRImageTrackingModel[] = [];
|
|
242
244
|
|
|
243
245
|
/** Applies smoothing based on detected jitter to the tracked image. */
|
|
244
246
|
@serializable()
|
|
@@ -337,7 +339,7 @@ export class WebXRImageTracking extends Behaviour {
|
|
|
337
339
|
|
|
338
340
|
onLeaveXR(_args: NeedleXREventArgs): void {
|
|
339
341
|
|
|
340
|
-
if(!this.supported && DeviceUtilities.isAndroidDevice()) {
|
|
342
|
+
if (!this.supported && DeviceUtilities.isAndroidDevice()) {
|
|
341
343
|
showBalloonWarning(this.webXRIncubationsWarning);
|
|
342
344
|
}
|
|
343
345
|
|
|
@@ -364,7 +366,7 @@ export class WebXRImageTracking extends Behaviour {
|
|
|
364
366
|
private readonly imageToObjectMap = new Map<WebXRImageTrackingModel, { object: Object3D | null, frames: number, lastTrackingTime: number }>();
|
|
365
367
|
private readonly currentImages: WebXRTrackedImage[] = [];
|
|
366
368
|
|
|
367
|
-
|
|
369
|
+
|
|
368
370
|
private readonly webXRIncubationsWarning = "Image tracking is currently not supported on this device. On Chrome for Android, you can enable the <a target=\"_blank\" href=\"#\" onclick=\"() => console.log('I')\">chrome://flags/#webxr-incubations</a> flag.";
|
|
369
371
|
|
|
370
372
|
onUpdateXR(args: NeedleXREventArgs): void {
|