From 4017d7c2fb16ee4546227122bbe65838fc6ad196 Mon Sep 17 00:00:00 2001 From: Percen <21pesi1bif@hft-stuttgart.de> Date: Sat, 14 Dec 2024 14:11:11 +0000 Subject: [PATCH] Update public/index.html --- public/index.html | 106 +++++++++++----------------------------------- 1 file changed, 24 insertions(+), 82 deletions(-) diff --git a/public/index.html b/public/index.html index 213e5d4..effde1c 100644 --- a/public/index.html +++ b/public/index.html @@ -4,7 +4,7 @@ <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>GeoVis AR Projekt</title> - <style> + <style> body { margin: 0; font-family: Arial, sans-serif; @@ -18,7 +18,6 @@ background-size: cover; background-position: center; } - .container { text-align: center; background-color: rgba(0, 0, 0, 0.5); @@ -28,17 +27,14 @@ max-width: 80%; box-shadow: 0px 0px 15px rgba(0, 0, 0, 0.5); } -//teste h1 { font-size: 3em; margin-bottom: 20px; } - p { font-size: 1.2em; margin-bottom: 30px; } - button { background-color: #4CAF50; color: white; @@ -50,44 +46,21 @@ transition: background-color 0.3s; margin: 10px; } - button:hover { background-color: #45a049; } - button:active { background-color: #387a39; } - - .menu-bar { - position: fixed; - top: 0; - left: 0; - right: 0; - display: flex; - justify-content: center; - background-color: rgba(0, 0, 0, 0.7); - padding: 10px; - z-index: 10; - } - - .menu-bar button { - background-color: #2196F3; - } - - .menu-bar button:hover { - background-color: #1E88E5; - } </style> <script src="https://unpkg.com/three@0.126.0/build/three.js"></script> <script src="https://unpkg.com/three@0.126.0/examples/js/loaders/GLTFLoader.js"></script> </head> <body> <script> - let selectedModel = 'car'; // Standardauswahl + let selectedModel = 'car'; // Standardmodell let models = {}; let reticle; - let menu; async function activateXR() { const canvas = document.createElement('canvas'); @@ -100,7 +73,6 @@ const camera = new THREE.PerspectiveCamera(); camera.matrixAutoUpdate = false; - // Licht hinzufügen const light = new THREE.DirectionalLight(0xffffff, 1); light.position.set(10, 10, 10); scene.add(light); @@ -121,29 +93,24 @@ models.lamp = gltf.scene; }); - // 3D-Menü erstellen - const menuGeometry = new THREE.PlaneGeometry(0.5, 0.2); // Menügröße - const menuMaterial = new THREE.MeshBasicMaterial({ color: 0x333333, opacity: 0.8, transparent: true }); - menu = new THREE.Mesh(menuGeometry, menuMaterial); - menu.position.set(0, -0.5, -1); // Unten im Kamerasichtfeld - scene.add(menu); - - // Menü-Buttons als Flächen - const buttonGeometry = new THREE.PlaneGeometry(0.15, 0.1); - const buttonMaterial1 = new THREE.MeshBasicMaterial({ color: 0x2196F3 }); - const buttonMaterial2 = new THREE.MeshBasicMaterial({ color: 0xFF9800 }); - - const carButton = new THREE.Mesh(buttonGeometry, buttonMaterial1); - carButton.position.set(-0.2, -0.5, -0.99); // Links unten - scene.add(carButton); - - const lampButton = new THREE.Mesh(buttonGeometry, buttonMaterial2); - lampButton.position.set(0.2, -0.5, -0.99); // Rechts unten - scene.add(lampButton); + // Buttons für Auswahl erstellen + const carButton = document.createElement('button'); + carButton.textContent = 'Auto auswählen'; + document.body.appendChild(carButton); + carButton.style.cssText = "position: fixed; bottom: 20px; left: 20px; z-index: 1000;"; + carButton.onclick = () => { + selectedModel = 'car'; + console.log('Auto ausgewählt'); + }; - // Raycaster für Button-Interaktion - const raycaster = new THREE.Raycaster(); - const pointer = new THREE.Vector2(); + const lampButton = document.createElement('button'); + lampButton.textContent = 'Lampe auswählen'; + document.body.appendChild(lampButton); + lampButton.style.cssText = "position: fixed; bottom: 20px; right: 20px; z-index: 1000;"; + lampButton.onclick = () => { + selectedModel = 'lamp'; + console.log('Lampe ausgewählt'); + }; // AR-Session starten const session = await navigator.xr.requestSession('immersive-ar', { requiredFeatures: ['hit-test'] }); @@ -154,36 +121,16 @@ session.requestAnimationFrame(onXRFrame); - session.addEventListener("select", (event) => { - if (!reticle) return; - - // Raycaster von der Kameraposition (Mitte des Bildschirms) - raycaster.setFromCamera(pointer, camera); - const intersects = raycaster.intersectObjects([carButton, lampButton]); - - // Prüfen, ob ein Button getroffen wurde - if (intersects.length > 0) { - const clickedButton = intersects[0].object; - - if (clickedButton === carButton) { - selectedModel = 'car'; - console.log('Auto ausgewählt'); - } else if (clickedButton === lampButton) { - selectedModel = 'lamp'; - console.log('Laterne ausgewählt'); - } - } - // Kein Button getroffen -> Modell platzieren - else if (models[selectedModel]) { + session.addEventListener("select", () => { + if (reticle && models[selectedModel]) { const clone = models[selectedModel].clone(); clone.position.copy(reticle.position); - clone.scale.set(0.5, 0.5, 0.5); // Größe anpassen + clone.scale.set(0.5, 0.5, 0.5); scene.add(clone); console.log(`${selectedModel} platziert`); } }); - // AR-Rendering function onXRFrame(time, frame) { session.requestAnimationFrame(onXRFrame); gl.bindFramebuffer(gl.FRAMEBUFFER, session.renderState.baseLayer.framebuffer); @@ -198,19 +145,14 @@ camera.projectionMatrix.fromArray(view.projectionMatrix); camera.updateMatrixWorld(true); - // Menü bleibt fixiert vor der Kamera - menu.position.set(0, -0.5, -1); - menu.lookAt(camera.position); - - carButton.position.set(-0.2, -0.5, -0.99); - lampButton.position.set(0.2, -0.5, -0.99); - 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); + } else { + reticle.visible = false; } renderer.render(scene, camera); -- GitLab