@preference-sl/pref-viewer 2.10.0-beta.1 → 2.10.0-beta.2
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/package.json +1 -1
- package/src/index.js +33 -3
package/package.json
CHANGED
package/src/index.js
CHANGED
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
* </pref-viewer>
|
|
40
40
|
* ```
|
|
41
41
|
*/
|
|
42
|
-
import { Engine, Scene, ArcRotateCamera, Vector3, Color4, HemisphericLight, DirectionalLight, PointLight, ShadowGenerator, LoadAssetContainerAsync, Tools } from "@babylonjs/core";
|
|
42
|
+
import { Engine, Scene, ArcRotateCamera, Vector3, Color4, HemisphericLight, DirectionalLight, PointLight, ShadowGenerator, LoadAssetContainerAsync, Tools, WebXRSessionManager, WebXRDefaultExperience } from "@babylonjs/core";
|
|
43
43
|
import "@babylonjs/loaders";
|
|
44
44
|
import { USDZExportAsync, GLTF2Export } from "@babylonjs/serializers";
|
|
45
45
|
import "@babylonjs/loaders/glTF/2.0/Extensions/KHR_draco_mesh_compression";
|
|
@@ -73,6 +73,7 @@ class PrefViewer extends HTMLElement {
|
|
|
73
73
|
#dirLight = null;
|
|
74
74
|
#cameraLight = null;
|
|
75
75
|
#shadowGen = null;
|
|
76
|
+
#XRExperience = null;
|
|
76
77
|
|
|
77
78
|
constructor() {
|
|
78
79
|
super();
|
|
@@ -171,10 +172,9 @@ class PrefViewer extends HTMLElement {
|
|
|
171
172
|
wrapper.appendChild(this.#canvas);
|
|
172
173
|
this.shadowRoot.append(wrapper);
|
|
173
174
|
}
|
|
174
|
-
|
|
175
175
|
|
|
176
176
|
// Bbylon.js
|
|
177
|
-
#initializeBabylon() {
|
|
177
|
+
async #initializeBabylon() {
|
|
178
178
|
this.#engine = new Engine(this.#canvas, true, { alpha: true });
|
|
179
179
|
this.#scene = new Scene(this.#engine);
|
|
180
180
|
this.#scene.clearColor = new Color4(1, 1, 1, 1);
|
|
@@ -184,6 +184,36 @@ class PrefViewer extends HTMLElement {
|
|
|
184
184
|
|
|
185
185
|
this.#engine.runRenderLoop(() => this.#scene && this.#scene.render());
|
|
186
186
|
this.#canvasResizeObserver.observe(this.#canvas);
|
|
187
|
+
|
|
188
|
+
await this.#createXRExperience();
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
async #createXRExperience() {
|
|
192
|
+
if (this.#XRExperience) {
|
|
193
|
+
return true;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
const sessionMode = "immersive-ar";
|
|
197
|
+
const sessionSupported = await WebXRSessionManager.IsSessionSupportedAsync(sessionMode);
|
|
198
|
+
if (!sessionSupported) {
|
|
199
|
+
console.info("PrefViewer: WebXR in mode AR is not supported");
|
|
200
|
+
return false;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
const options = {
|
|
204
|
+
uiOptions: {
|
|
205
|
+
sessionMode: sessionMode,
|
|
206
|
+
renderTarget: "xrLayer",
|
|
207
|
+
referenceSpaceType: "local",
|
|
208
|
+
},
|
|
209
|
+
};
|
|
210
|
+
|
|
211
|
+
try {
|
|
212
|
+
this.#XRExperience = await WebXRDefaultExperience.CreateAsync(this.#scene, options);
|
|
213
|
+
} catch (error) {
|
|
214
|
+
console.warn("PrefViewer: failed to create WebXR experience", error);
|
|
215
|
+
this.#XRExperience = null;
|
|
216
|
+
}
|
|
187
217
|
}
|
|
188
218
|
|
|
189
219
|
#canvasResizeObserver = new ResizeObserver(() => this.#engine && this.#engine.resize());
|