2016-01-28 15 views
9

Come ho capito using buffer geometries aumenterà le prestazioni e diminuirà l'utilizzo della memoria perché riduce il costo del passaggio di tutti questi dati alla GPU.Three.js - Domande su (l'uso di) THREE.BufferGeometry

E come ho capito from @WestLangley his post qui:

THREE.BufferGeometry sta sostituendo lentamente THREE.Geometry come è computazionalmente più efficiente.

Attualmente sto usando Three.js - R72.
Quando disegno le mie geometrie per creare mesh e aggiungerle alla scena, vedo che ci sono due proprietà all'interno dei miei geomtries e _bufferGeometry.

Qui in un THREE.BoxGeometry:

enter image description here

Qui in un THREE.Geometry:

enter image description here

Qui in un THREE.ShapeGeometry:

enter image description here

Le mie domande:

  1. che cosa è un THREE.DirectGeometry e che cosa fa? (Non riesco a trovare alcuna documentazione su questo)
  2. È già in uso questo THREE.BufferGeometry memorizzato in _bufferGeometry? In caso contrario, posso semplicemente usarlo al posto della mia geometria per aumentare le prestazioni?
  3. Esistono metodi di conversione: THREE.BufferGeometry ha toGeometry e THREE.Geometry ha toBufferGeometry. Se converto tutte le mie normali geometrie in geometrie tampone usando questo metodo, mi darà lo stesso aumento di prestazioni rispetto a disegnarle come THREE.BufferGeometry dall'inizio?
  4. Come e quando dovrei usare THREE.BufferGeometry?
  5. Quando tre.js smetterà di supportare THREE.Geometry in favore di THREE.BufferGeometry?

NOTA: non riuscivo a trovare le informazioni dettagliate su quando e come utilizzare le geometrie del buffer o quando sta per essere la sostituzione THREE.Geometry. Ma se qualcuno ha una buona fonte o referenza per favore lascia un commento.

risposta

7
  1. __directGeometry è una struttura dati interna usata per la transizione tra THREE.Geometry e THREE.BufferGeometry. Non scherzare.
  2. THREE.BufferGeometry.toGeometry() e THREE.Geometry.toBufferGeometry() sono metodi di convenienza.Il primo è utile se il tuo modello viene caricato come BufferGeometry e ti senti più a tuo agio nel manipolare Geometry. Se vuoi risposte riguardanti le prestazioni, devi fare un test. Le geometrie del buffer si caricano decisamente più velocemente.
  3. Ci sono molti esempi che mostrano l'uso di BufferGeometry. Sarebbe saggio se capissi la differenza tra "indicizzato" e "non indicizzato" BufferGeometry. BufferGeometry con l'attributo index definito consente la condivisione dei vertici. Non indicizzato BufferGeometry è ciò che chiamiamo "zuppa a triangolo".
  4. THREE.Geometry rimarrà per il prossimo futuro.

Three.js r.73

+0

Grazie per la risposta. Potresti ancora elaborare un po 'su questa parte: * Se converto tutte le mie normali geometrie in geometrie tampone usando questo metodo, mi darà lo stesso aumento di prestazioni rispetto a disegnarle come un THREE.BufferGeometry dall'inizio? * Perché sono ancora Non sono sicuro se dovrei ridisegnare le mie geometrie come geometrie del buffer per ottenere prestazioni massime ... – Wilt

+0

Un altro ... Esiste una differenza di prestazioni tra le geometrie del buffer indicizzate e non indicizzate? – Wilt

+2

(1) Come ho detto al punto # 3. in alto, se vuoi risposte riguardanti le prestazioni, devi fare un test della tua specifica applicazione. (2) Il renderer converte comunque le geometrie normali in geometria del buffer, quindi non ci dovrebbe essere alcun motivo per effettuare la conversione manualmente. Potrebbe essere una buona esperienza di apprendimento, tuttavia. (3) La "BufferGeometry" indicizzata e non indicizzata può o non può avere differenze di rendimento significative. Dipenderebbe dalla geometria. – WestLangley