@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.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/src/index.js +33 -3
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@preference-sl/pref-viewer",
3
- "version": "2.10.0-beta.1",
3
+ "version": "2.10.0-beta.2",
4
4
  "description": "Web Component to preview GLTF models with Babylon.js",
5
5
  "author": "Alex Moreno Palacio <amoreno@preference.es>",
6
6
  "scripts": {
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());