From d6805d72f290a2e1d36ac60200718ecd73e88e2b Mon Sep 17 00:00:00 2001 From: Percen <21pesi1bif@hft-stuttgart.de> Date: Sat, 14 Dec 2024 15:45:31 +0000 Subject: [PATCH] Update public/index.html --- public/index.html | 85 +++++++++++++++++------------------------------ 1 file changed, 30 insertions(+), 55 deletions(-) diff --git a/public/index.html b/public/index.html index 1582b18..f87fbde 100644 --- a/public/index.html +++ b/public/index.html @@ -28,10 +28,8 @@ let models = {}; let reticle; let currentModel = null; - let scene; - let camera; - let hitTestSource; - let hitTestResults = []; + let scene, camera, hitTestSource; + let placedModels = []; // Array für platzierte Modelle async function activateXR() { const canvas = document.createElement('canvas'); @@ -72,6 +70,7 @@ const viewerSpace = await session.requestReferenceSpace('viewer'); hitTestSource = await session.requestHitTestSource({ space: viewerSpace }); + session.addEventListener('select', placeModel); // Platzieren des Modells beim Tippen session.requestAnimationFrame(onXRFrame); // AR-Rendering @@ -89,17 +88,14 @@ camera.projectionMatrix.fromArray(view.projectionMatrix); camera.updateMatrixWorld(true); - hitTestResults = frame.getHitTestResults(hitTestSource); + const hitTestResults = frame.getHitTestResults(hitTestSource); if (hitTestResults.length > 0) { const hitPose = hitTestResults[0].getPose(referenceSpace); reticle.visible = true; reticle.position.set(hitPose.transform.position.x, hitPose.transform.position.y, hitPose.transform.position.z); reticle.updateMatrixWorld(true); - - // Das Modell an der Reticle-Position platzieren - if (currentModel) { - currentModel.position.set(hitPose.transform.position.x, hitPose.transform.position.y, hitPose.transform.position.z); - } + } else { + reticle.visible = false; } renderer.render(scene, camera); @@ -107,57 +103,36 @@ } } - // Touch Events für Swipe-Geste - let startX = 0; - let startY = 0; - let endX = 0; - let endY = 0; - const threshold = 50; // Mindestdistanz für die Swipe-Erkennung - - // Event Listener für Touch-Ereignisse - document.body.addEventListener('touchstart', (event) => { - // Die Startposition der Geste speichern - startX = event.touches[0].clientX; - startY = event.touches[0].clientY; - }); - - document.body.addEventListener('touchend', (event) => { - // Berechne die Distanz in der X- und Y-Richtung - endX = event.changedTouches[0].clientX; - endY = event.changedTouches[0].clientY; - - let deltaX = endX - startX; - let deltaY = endY - startY; - - // Wenn der Swipe horizontal ist (Links oder Rechts) - if (Math.abs(deltaX) > Math.abs(deltaY) && Math.abs(deltaX) > threshold) { - if (deltaX > 0) { - // Swipe nach rechts -> Wechseln zum nächsten Modell - switchModel('next'); - } else { - // Swipe nach links -> Wechseln zum vorherigen Modell - switchModel('previous'); + // Modell platzieren + function placeModel() { + if (reticle.visible) { + const model = models[selectedModel]?.clone(); + if (model) { + model.position.copy(reticle.position); + model.scale.set(0.5, 0.5, 0.5); // Optional: Größe anpassen + scene.add(model); + placedModels.push(model); // Zum Array hinzufügen } } - }); + } - // Funktion zum Modellwechsel - function switchModel(direction) { - // Entferne das aktuelle Modell nur, wenn es bereits in der Szene ist - if (currentModel) { - scene.remove(currentModel); - } + // Swipe-Gesten + let startX = 0, endX = 0; + const threshold = 50; // Mindestdistanz für Swipe - // Bestimmen, welches Modell ausgewählt wird - if (direction === 'next') { - selectedModel = selectedModel === 'robot' ? 'flower' : 'robot'; - } else if (direction === 'previous') { - selectedModel = selectedModel === 'robot' ? 'flower' : 'robot'; + document.body.addEventListener('touchstart', (e) => startX = e.touches[0].clientX); + document.body.addEventListener('touchend', (e) => { + endX = e.changedTouches[0].clientX; + if (Math.abs(endX - startX) > threshold) { + if (endX > startX) switchModel('next'); // Swipe rechts + else switchModel('previous'); // Swipe links } + }); - // Das ausgewählte Modell hinzufügen - currentModel = models[selectedModel].clone(); // Erstelle eine Kopie des Modells - scene.add(currentModel); + function switchModel(direction) { + if (direction === 'next') selectedModel = selectedModel === 'robot' ? 'flower' : 'robot'; + else if (direction === 'previous') selectedModel = selectedModel === 'robot' ? 'flower' : 'robot'; + console.log("Modell gewechselt zu:", selectedModel); } // AR starten -- GitLab