2013-03-13 18 views
11

Sto usando Three.js rev 49.Aggiornamento una geometria all'interno di una rete non fa nulla

Il mio programma ha bisogno di aggiornare una maglia cambiando è la geometria. Sfortunatamente il display non sembra aggiornato.

Ecco il mio codice:

// theObject is an array of associatives : 

// { 
//  object1: {mesh: undefined/THREE.mesh, mat: THREE.Material, geo: THREE.Geometry} 
//  object2: {mesh: undefined/THREE.mesh, mat: THREE.Material, geo: THREE.Geometry} 
//  ... 
// } 

// In my function, theObject[i].mesh geometry must change to be theObject[i].geo. 


for(i in theObjects) { 

    //* 
    if (theObjects[i].mesh == undefined) { 
     theObjects[i].mesh = new THREE.Mesh(theObjects[i].geo, theObjects[i].mat); 

     theObjects[i].mesh.geometry.dynamic = true; 
     theObjects[i].geo.verticesNeedUpdate = true; 

     scenePostsurgery.add(theObjects[i].mesh); 
    } else 
     theObjects[i].mesh.geometry.vertices = theObjects[i].geo.vertices; 

} 

Devo aggiungere qualcos'altro?

/Oragon

risposta

13

se ho capito bene si sta aggiornando i vertici qui:

else{ 
     theObjects[i].mesh.geometry.vertices = theObjects[i].geo.vertices; 
} 

tenta di modificare il codice per:

else{ 
     theObjects[i].mesh.geometry.dynamic = true; 
     theObjects[i].mesh.geometry.vertices = theObjects[i].geo.vertices; 
     theObjects[i].mesh.geometry.verticesNeedUpdate = true; 
    } 

In if(){} si crea una maglia ed in else{} si aggiorna in tal modo dynamic = true e verticesNeedUpdate = true è necessario impostare la mesh che si trova in else{}.

+1

Grazie Uhura, anche se 'verticesNeedUpdate' era un'opzione permanente. :) –

2

Quando si modifica l'intera geometria, penso che il modo più semplice sia rimuovere quello vecchio (scene.remove (geometria), quindi aggiungere quello nuovo (scene.add (geometria)). Penso che il costo di modificare il i parametri e le proprietà di mesh e geometria sono gli stessi di quelli nuovi, anche se l'aggiunta è molto più semplice e consente di risparmiare un sacco di mal di testa!

+0

ha funzionato per me - grazie – bernhardrusch

+0

assicurati di usare 'scene.remove (mesh)', puoi anche chiamare 'mesh.geometry.dispose()', 'mesh.material.dispose()' e 'mesh.texture.dispose()' else si otterrà perdite di memoria credo (r71) – JoeRocc

+0

mesh.geometry.dispose non è una funzione –

Problemi correlati