Sto usando un BufferGeometry per disegnare migliaia di cubi che costituiscono il terreno, ma ho difficoltà a trovare come aggiornare la geometria se ho bisogno di cambiare la posizione di uno dei cubi. Per esempio, io ho questo codice per inizializzare la mia geometria: (Sto facendo del mio test su una versione aggiornata di this example)Come aggiornare rapidamente un grande BufferGeometry?
// 12 triangles per cube (6 quads)
var triangles = 12 * 150000;
var geometry = new THREE.BufferGeometry();
geometry.attributes = {
position: {
itemSize: 3,
array: new Float32Array(triangles * 3 * 3),
numItems: triangles * 3 * 3
},
normal: {
itemSize: 3,
array: new Float32Array(triangles * 3 * 3),
numItems: triangles * 3 * 3
},
color: {
itemSize: 3,
array: new Float32Array(triangles * 3 * 3),
numItems: triangles * 3 * 3
}
}
positions = geometry.attributes.position.array;
normals = geometry.attributes.normal.array;
colors = geometry.attributes.color.array;
Se mi muovo un cubo, non comparirà essere spostato fino a quando lo faccio :
geometry.attributes.position.needsUpdate = true;
Ciò causa l'interruzione di FPS durante l'aggiornamento. C'è un altro modo per farlo? Sembra un po 'inutile quando cambio solo un cubo (12 triangoli/36 vertici). Anche se potrebbe essere - Non ho controllato cosa fa effettivamente lo needsUpdate
. Indovinando invia di nuovo la matrice allo shader.
Stavo pensando che potrei dividere la geometria in BufferGeometries separati più piccoli, ma non sono sicuro che ciò aiuterebbe le prestazioni nel complesso. Da quello che ho capito, più geometrie = meno FPS.
Se qualcuno ha qualche idea su come farei questo, sarebbe apprezzato! :) Oltre al problema di aggiornamento, BufferGeometry sembra essere esattamente ciò di cui ho bisogno. Grazie!
sicuro quale versione è stato cambiato, ma come di 'r81' questo è stato unito in (https [BufferAttribute'']: // github.com/mrdoob/three.js/blob/r81/src/core/BufferAttribute.js#L27). – Jay