2013-03-13 17 views
11

Używam TRÓJ.JS rev 49.Aktualizacja geometrii wewnątrz siatki nic nie robi

Mój program musi zaktualizować siatkę, zmieniając jej geometrię. Niestety wyświetlacz nie wydaje się aktualizować.

Oto mój kod:

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

} 

Czy muszę dodawać coś innego?

/Oragon

Odpowiedz

13

Jeśli dobrze zrozumiałem aktualizujesz wierzchołki tutaj:

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

próbować zmienić ten kod do:

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

W if(){} utworzyć siatkę iw else{} aktualizujesz tak dynamic = true i verticesNeedUpdate = true musisz ustawić na siatkę, która jest w else{}.

+1

Dziękuję Uhura, bo 'verticesNeedUpdate' był stałą opcją. :) –

2

Podczas zmiany całej geometrii, myślę, że najłatwiej jest usunąć starą (scene.remove (geometria), a następnie dodać nową (scene.add (geometria)). Myślę, że koszt modyfikacji Parametry i właściwości siatki i geometrii są takie same, jak dodawanie nowych, chociaż dodawanie jest znacznie łatwiejsze i oszczędza dużo bólu głowy!

+0

pracował dla mnie - dzięki – bernhardrusch

+0

upewnij się, że używasz 'scene.remove (mesh)', to także nazywasz 'mesh.geometry.dispose()', 'mesh.material.dispose()' oraz 'mesh.texture.dispose()' else dostaniesz wycieki pamięci, myślę, że (r71) – JoeRocc

+0

mesh.geometry.dispose nie jest funkcją –

Powiązane problemy