Commit d6805d72 authored by Percen's avatar Percen
Browse files

Update public/index.html

parent bf5c9f33
Showing with 30 additions and 55 deletions
+30 -55
...@@ -28,10 +28,8 @@ ...@@ -28,10 +28,8 @@
let models = {}; let models = {};
let reticle; let reticle;
let currentModel = null; let currentModel = null;
let scene; let scene, camera, hitTestSource;
let camera; let placedModels = []; // Array für platzierte Modelle
let hitTestSource;
let hitTestResults = [];
async function activateXR() { async function activateXR() {
const canvas = document.createElement('canvas'); const canvas = document.createElement('canvas');
...@@ -72,6 +70,7 @@ ...@@ -72,6 +70,7 @@
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', placeModel); // Platzieren des Modells beim Tippen
session.requestAnimationFrame(onXRFrame); session.requestAnimationFrame(onXRFrame);
// AR-Rendering // AR-Rendering
...@@ -89,17 +88,14 @@ ...@@ -89,17 +88,14 @@
camera.projectionMatrix.fromArray(view.projectionMatrix); camera.projectionMatrix.fromArray(view.projectionMatrix);
camera.updateMatrixWorld(true); camera.updateMatrixWorld(true);
hitTestResults = frame.getHitTestResults(hitTestSource); const hitTestResults = frame.getHitTestResults(hitTestSource);
if (hitTestResults.length > 0) { if (hitTestResults.length > 0) {
const hitPose = hitTestResults[0].getPose(referenceSpace); const hitPose = hitTestResults[0].getPose(referenceSpace);
reticle.visible = true; reticle.visible = true;
reticle.position.set(hitPose.transform.position.x, hitPose.transform.position.y, hitPose.transform.position.z); reticle.position.set(hitPose.transform.position.x, hitPose.transform.position.y, hitPose.transform.position.z);
reticle.updateMatrixWorld(true); reticle.updateMatrixWorld(true);
} else {
// Das Modell an der Reticle-Position platzieren reticle.visible = false;
if (currentModel) {
currentModel.position.set(hitPose.transform.position.x, hitPose.transform.position.y, hitPose.transform.position.z);
}
} }
renderer.render(scene, camera); renderer.render(scene, camera);
...@@ -107,57 +103,36 @@ ...@@ -107,57 +103,36 @@
} }
} }
// Touch Events für Swipe-Geste // Modell platzieren
let startX = 0; function placeModel() {
let startY = 0; if (reticle.visible) {
let endX = 0; const model = models[selectedModel]?.clone();
let endY = 0; if (model) {
const threshold = 50; // Mindestdistanz für die Swipe-Erkennung model.position.copy(reticle.position);
model.scale.set(0.5, 0.5, 0.5); // Optional: Größe anpassen
// Event Listener für Touch-Ereignisse scene.add(model);
document.body.addEventListener('touchstart', (event) => { placedModels.push(model); // Zum Array hinzufügen
// 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');
} }
} }
}); }
// Funktion zum Modellwechsel // Swipe-Gesten
function switchModel(direction) { let startX = 0, endX = 0;
// Entferne das aktuelle Modell nur, wenn es bereits in der Szene ist const threshold = 50; // Mindestdistanz für Swipe
if (currentModel) {
scene.remove(currentModel);
}
// Bestimmen, welches Modell ausgewählt wird document.body.addEventListener('touchstart', (e) => startX = e.touches[0].clientX);
if (direction === 'next') { document.body.addEventListener('touchend', (e) => {
selectedModel = selectedModel === 'robot' ? 'flower' : 'robot'; endX = e.changedTouches[0].clientX;
} else if (direction === 'previous') { if (Math.abs(endX - startX) > threshold) {
selectedModel = selectedModel === 'robot' ? 'flower' : 'robot'; if (endX > startX) switchModel('next'); // Swipe rechts
else switchModel('previous'); // Swipe links
} }
});
// Das ausgewählte Modell hinzufügen function switchModel(direction) {
currentModel = models[selectedModel].clone(); // Erstelle eine Kopie des Modells if (direction === 'next') selectedModel = selectedModel === 'robot' ? 'flower' : 'robot';
scene.add(currentModel); else if (direction === 'previous') selectedModel = selectedModel === 'robot' ? 'flower' : 'robot';
console.log("Modell gewechselt zu:", selectedModel);
} }
// AR starten // AR starten
......
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