2013-03-13 5 views
11

Ich verwende THREE.JS rev 49.Aktualisieren einer Geometrie in einem Netz tut nichts

Mein Programm muss ein Mesh durch Ändern der Geometrie aktualisieren. Leider scheint das Display nicht zu aktualisieren.

Hier ist mein Code:

// 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; 

} 

Muss ich etwas anderes hinzufügen müssen?

/Oragon

Antwort

13

Wenn ich das richtig verstanden Eckpunkten Sie aktualisieren, hier:

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

Versuchen diesen Code zu ändern:

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

In if(){} Sie ein Netz schaffen und in else{} Sie aktualisieren so dynamic = true und verticesNeedUpdate = true Sie müssen auf Mesh, die in else{} ist.

+1

Vielen Dank Uhura. Ich obwohl "VerticesNeedUpdate" war eine dauerhafte Option. :) –

2

Wenn ich die gesamte Geometrie ändere, denke ich, dass es am einfachsten ist, die alte zu entfernen (scene.remove (geometry) und dann die neue hinzuzufügen (scene.add (geometry)) Mesh und Geometrie Parameter und Eigenschaften ist das gleiche wie das Hinzufügen eines neuen, obwohl das Hinzufügen ist viel einfacher und spart eine Menge Kopfschmerzen!

+0

arbeitete für mich - danke – bernhardrusch

+0

vergewissere dich, dass du 'scene.remove (mesh)' '' 'mesh.geometry.dispose()', 'mesh.material.dispose()' und 'mesh.texture.dispose()' else auch nennst Sie werden Speicherlecks bekommen, denke ich (r71) – JoeRocc

+0

mesh.geometry.dispose ist keine Funktion –