Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
GeoVistoogsi
AR
Commits
d6805d72
Commit
d6805d72
authored
4 months ago
by
Percen
Browse files
Options
Download
Email Patches
Plain Diff
Update public/index.html
parent
bf5c9f33
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
public/index.html
+30
-55
public/index.html
with
30 additions
and
55 deletions
+30
-55
public/index.html
+
30
-
55
View file @
d6805d72
...
@@ -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
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment