Commit 2e4e22e8 authored by Percen's avatar Percen
Browse files

Merge branch '21pesi1bif-master-patch-28194' into 'master'

Update public/index.html

See merge request !73
1 merge request!73Update public/index.html
Pipeline #10561 passed with stage
in 6 seconds
Showing with 29 additions and 36 deletions
+29 -36
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
</head> </head>
<body> <body>
<script> <script>
let selectedModel = 'robot'; // Standardauswahl let selectedModel = 'robot';
let models = {}; let models = {};
let reticle; let reticle;
let currentModel = null; let currentModel = null;
...@@ -43,7 +43,7 @@ ...@@ -43,7 +43,7 @@
camera = new THREE.PerspectiveCamera(); camera = new THREE.PerspectiveCamera();
camera.matrixAutoUpdate = false; camera.matrixAutoUpdate = false;
// Licht hinzufügen // Licht
const light = new THREE.DirectionalLight(0xffffff, 1); const light = new THREE.DirectionalLight(0xffffff, 1);
light.position.set(10, 10, 10); light.position.set(10, 10, 10);
scene.add(light); scene.add(light);
...@@ -56,7 +56,7 @@ ...@@ -56,7 +56,7 @@
scene.add(reticle); scene.add(reticle);
}); });
// Modelle laden // Modelle
loader.load("https://threejs.org/examples/models/gltf/RobotExpressive/RobotExpressive.glb", (gltf) => { loader.load("https://threejs.org/examples/models/gltf/RobotExpressive/RobotExpressive.glb", (gltf) => {
models.robot = gltf.scene; models.robot = gltf.scene;
}); });
...@@ -64,15 +64,13 @@ ...@@ -64,15 +64,13 @@
models.flower = gltf.scene; models.flower = gltf.scene;
}); });
// AR-Session starten // XR-Session
const session = await navigator.xr.requestSession('immersive-ar', { requiredFeatures: ['hit-test'] }); const session = await navigator.xr.requestSession('immersive-ar', { requiredFeatures: ['hit-test'] });
session.updateRenderState({ baseLayer: new XRWebGLLayer(session, gl) }); session.updateRenderState({ baseLayer: new XRWebGLLayer(session, gl) });
const referenceSpace = await session.requestReferenceSpace('local'); const referenceSpace = await session.requestReferenceSpace('local');
const viewerSpace = await session.requestReferenceSpace('viewer'); const viewerSpace = await session.requestReferenceSpace('viewer');
hitTestSource = await session.requestHitTestSource({ space: viewerSpace }); hitTestSource = await session.requestHitTestSource({ space: viewerSpace });
session.addEventListener('select', onPlaceModel);
session.requestAnimationFrame(onXRFrame); session.requestAnimationFrame(onXRFrame);
function onXRFrame(time, frame) { function onXRFrame(time, frame) {
...@@ -102,51 +100,46 @@ ...@@ -102,51 +100,46 @@
} }
} }
function onPlaceModel() { // Touch-Logik zur Unterscheidung zwischen Swipe und Tap
if (isSwipe) return; // Verhindere Platzieren bei Swipe let startX = 0, endX = 0, isSwiping = false;
const threshold = 50;
if (reticle && reticle.visible && models[selectedModel]) {
const newModel = models[selectedModel].clone();
newModel.position.copy(reticle.position);
scene.add(newModel);
}
}
// Swipe-Logik
let startX = 0, endX = 0;
const threshold = 50; // Mindestdistanz für Swipe
document.body.addEventListener('touchstart', (e) => { document.body.addEventListener('touchstart', (e) => {
startX = e.touches[0].clientX; startX = e.touches[0].clientX;
isSwipe = false; isSwiping = false;
}); });
document.body.addEventListener('touchend', (e) => { document.body.addEventListener('touchmove', (e) => {
endX = e.changedTouches[0].clientX; const moveX = e.touches[0].clientX;
const deltaX = endX - startX; if (Math.abs(moveX - startX) > threshold) {
isSwiping = true;
if (Math.abs(deltaX) > threshold) { if (moveX > startX) {
isSwipe = true; // Swipe erkannt
if (deltaX > 0) {
switchModel('next'); switchModel('next');
} else { } else {
switchModel('previous'); switchModel('previous');
} }
startX = moveX; // Verhindert mehrfaches Swipen bei einem langen Touchmove
} }
}); });
function switchModel(direction) { document.body.addEventListener('touchend', () => {
if (currentModel) scene.remove(currentModel); if (!isSwiping) {
placeModel();
}
});
if (direction === 'next') { function placeModel() {
selectedModel = selectedModel === 'robot' ? 'flower' : 'robot'; if (reticle && reticle.visible && models[selectedModel]) {
} else if (direction === 'previous') { const newModel = models[selectedModel].clone();
selectedModel = selectedModel === 'robot' ? 'flower' : 'robot'; newModel.position.copy(reticle.position);
scene.add(newModel);
} }
}
currentModel = models[selectedModel].clone(); function switchModel(direction) {
currentModel.position.copy(reticle.position); selectedModel = direction === 'next' ?
scene.add(currentModel); (selectedModel === 'robot' ? 'flower' : 'robot') :
(selectedModel === 'robot' ? 'flower' : 'robot');
} }
if (navigator.xr) { if (navigator.xr) {
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment