Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
import { VRButton } from "/jsm/webxr/VRButton";renderer.xr.enabled = true;
document.body.appendChild(VRButton.createButton(renderer));
import { GLTFLoader } from '/jsm/loaders/GLTFLoader.js';
//Model loader
const manager = new LoadingManager();
const loader = new GLTFLoader(manager).setPath("/assets/models/AyaSofia/");
let modelLoaded = false;function onSelect() {
if (reticle.visible && !modelLoaded) {
loader.load(
"GM_poly.gltf",
function (gltf) {
gltf.scene.children[0].position.setFromMatrixPosition(reticle.matrix);
scene.add(gltf.scene);
modelLoaded = true;
},
undefined,
function (error) {
console.error(error);
}
);
}
}manager.onStart = function (url, itemsLoaded, itemsTotal) {
console.log("Started loading file: " + url + ".\nLoaded " + itemsLoaded + " of " + itemsTotal + " files.");
};
manager.onLoad = function () {
console.log("Loading complete!");
};
manager.onProgress = function (url, itemsLoaded, itemsTotal) {
console.log("Loading file: " + url + ".\nLoaded " + itemsLoaded + " of " + itemsTotal + " files.");
};
manager.onError = function (url) {
console.log("There was an error loading " + url);
};


If you are running into issues, check out the scenarios below that might be causing the problem.
import { ARButton } from "/jsm/webxr/ARButton";
document.body.appendChild(ARButton.createButton(renderer, { requiredFeatures: ["hit-test"] })); controller = renderer.xr.getController(0);
controller.addEventListener("select", onSelect);
scene.add(controller); //Hit-test indicator
reticle = new Mesh(new RingBufferGeometry(0.15, 0.2, 32).rotateX(-Math.PI / 2), new MeshBasicMaterial());
reticle.matrixAutoUpdate = false;
reticle.visible = false;
scene.add(reticle);function onSelect() {
if (reticle.visible) {
const mesh = new Mesh(geometry, phongMaterial);
mesh.position.setFromMatrixPosition(reticle.matrix);
mesh.scale.y = Math.random() * 2 + 1;
scene.add(mesh);
}
}function render(timestamp: number, frame: any) {
if (frame) {
earth.visible = false;
const referenceSpace = renderer.xr.getReferenceSpace();
const session = renderer.xr.getSession();
if (hitTestSourceRequested === false) {
session.requestReferenceSpace("viewer").then((referenceSpace) => {
session.requestHitTestSource({ space: referenceSpace }).then((source) => {
hitTestSource = source;
});
});
session.addEventListener("end", () => {
hitTestSourceRequested = false;
hitTestSource = null;
});
hitTestSourceRequested = true;
}
if (hitTestSource) {
const hitTestResults = frame.getHitTestResults(hitTestSource);
if (hitTestResults.length) {
const hit = hitTestResults[0];
reticle.visible = true;
reticle.matrix.fromArray(hit.getPose(referenceSpace).transform.matrix);
} else {
reticle.visible = false;
}
}
}
renderer.render(scene, camera);
}