Ho creato una semplice applicazione Panorama 3D WebGL utilizzando un , PerspectiveCamera
e un CanvasTexture
. Ora, sto cercando di dare vita alla scena aggiungendo "HotSpots" su alcune parti dello SphereGeometry
. Il problema che sto riscontrando è capire come aggiornare i vari DOMElements
in modo che la loro posizione rifletta la posizione aggiornata di Camera
.THREE.js SphereGeometry Hotspot Panorama con DOMElements
Fondamentalmente, mentre il Camera
ruota, i vari DOMElements
si spostano dentro e fuori dalla vista rispetto alla direzione della rotazione della videocamera. Ho provato il posizionamento di una <div>
absolute
al <canvas>
e translating
la posizione X
e Y
utilizzando il restituita PerspectiveCamera
camera.rotation
ma non funzionava; ecco la mia JS & implentation CSS:
CSS
#TestHotSpot {
/* not sure if using margins is the best method to position hotspot */
margin-top: 50px;
margin-left: 50px;
width: 50px;
height: 50px;
background: red;
position: absolute;
}
JavaScript
/**
CONFIG is my stored object variable; it contains the PerspectiveCamera instance
code is being called inside of my RequestAnimationFrame
**/
config.camera.updateProjectionMatrix();
config.controls.update(delta);
document.getElementById("TestHotSpot").style.transform = "translate("+ config.camera.rotation.x +"px, "+ config.camera.rotation.y +"px)";
Here è anche un esempio dal vivo l'effetto desiderato.
Quale sarebbe la soluzione migliore per risolvere questo problema? Quello che ho notato durante l'esecuzione è che lo DOMElements
si sposta solo leggermente; Ho anche notato che non avrebbero davvero prendere in considerazione dove lungo la SphereGeometry
sono stati collocati (per esempio, essere posizionato "dietro" il Camera
;! Molto complesso
Sono felice di utilizzare alcun plugin per il motore THREE.js
così come seguire dei tutorial. Grazie mille per la risposta in anticipo!
Ciao @serious_s, grazie mille per la tua risposta! Ho provato a trovare alcuni documenti su come questi 'cssObject' ma sono stati visualizzati a mani vuote. Avete un esempio di frammento di codice che spiega come usarlo? Sono ancora un po 'confuso - scusa! – lindsay
Ciao di nuovo! Dopo aver fatto qualche altra ricerca, capisco la tua risposta ora - grazie per il tuo aiuto! Upvoted. – lindsay
Se non ti dispiace, per favore condividi la tua ricerca, quali tuts o letture hai fatto, cos'altro hai trovato, hai dei buoni link che potrebbero anche permettermi di capire l'intero processo. Grazie per eventuali informazioni correlate che potrebbero essere richieste alla condivisione. – lowtechsun