问题
I am using THREE.JS rev 49.
My program needs to update a mesh by changing it's geometry. Unfortunately the display does not seem to update.
Here is my 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;
}
Do I have to add something else ?
/Oragon
回答1:
If I understood correctly you are updating vertices here:
else{
theObjects[i].mesh.geometry.vertices = theObjects[i].geo.vertices;
}
Try to change this code to :
else{
theObjects[i].mesh.geometry.dynamic = true;
theObjects[i].mesh.geometry.vertices = theObjects[i].geo.vertices;
theObjects[i].mesh.geometry.verticesNeedUpdate = true;
}
In if(){}
you create a mesh and in else{}
you update so dynamic = true
and verticesNeedUpdate = true
you need to set to mesh which is in else{}
.
回答2:
When changing the entire geometry, I think the easiest way is to remove the old one (scene.remove(geometry), then add the new one (scene.add(geometry)). I think the cost of modifying the mesh and geometry parameters and properties is the same as adding a new one, although adding is much easier and saves a lot of headache!
来源:https://stackoverflow.com/questions/15384078/updating-a-geometry-inside-a-mesh-does-nothing