2014-11-29 14 views

risposta

18

PlaneBufferGeometry un'alternativa a memoria ridotta per PlaneGeometry. l'oggetto stesso differisce in molti modi. per esempio, i vertici si trovano in PlaneBufferGeometry si trovano in PlaneBufferGeometry.attributes.position invece di PlaneGeometry.vertices

si può prendere un rapido sguardo nella console del browser di capire più differenze, ma per quanto ho capito, dal momento che i vertici sono di solito distanziate su una distanza uniforme (X e Y) l'una dall'altra, solo le altezze (Z) devono essere date per posizionare un vertice.

+0

Anche se le coordinate x, y sono già fornite con un PlaneGeometry o un PlaneBufferGeometry, esse sono ancora parte della rappresentazione dei dati per vertice e possono comunque essere modificate. –

0

Le differenze principali sono comprese tra Geometry e BufferGeometry.

La geometria è una struttura dati "user-friendly", orientata agli oggetti, mentre BufferGeometry è una struttura dati che mappa più direttamente il modo in cui i dati vengono utilizzati nel programma shader. BufferGeometry è più veloce e richiede meno memoria, ma Geometry è in qualche modo più flessibile e alcune operazioni possono essere eseguite con maggiore facilità.

Ho poca esperienza con Geometry, in quanto ho trovato che BufferGeometry fa il lavoro nella maggior parte dei casi. È utile apprendere e lavorare con le strutture dati effettive utilizzate dagli shader.

Nel caso di un PlaneBufferGeometry, è possibile accedere alle posizioni di vertice simili:

let pos = geometry.getAttribute("position"); 
let pa = pos.array; 

quindi impostare valori z simili:

for (let j = 0; j < geometry.heightSegments+1; j++) { 
    for (let i = 0; i < geometry.widthSegments+1; i++) { 
          //+0 is x, +1 is y. 
     pa[3*(j*(geometry.widthSegments+1)+i)+2] = Math.random(); 
    } 
} 
pos.needsUpdate = true; 
geometry.computeVertexNormals(); 

casualità è solo un esempio. Potresti anche (un altro, ad esempio) tracciare una funzione di x, y, se calcoli x, y da i, j, geometry.widthSegments, geometry.heightSegment e geometry.width, geometry.height.