Обновление геометрии внутри сетки ничего не делает
Я использую THREE.JS rev 49.
Моя программа должна обновить сетку, изменив ее геометрию.
К сожалению, дисплей не обновляется.
Вот мой код:
// 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;
}
Нужно ли добавлять что-то еще?
/Oragon
Ответы
Ответ 1
Если я правильно понял, вы обновляете вершины здесь:
else{
theObjects[i].mesh.geometry.vertices = theObjects[i].geo.vertices;
}
Попробуйте изменить этот код на:
else{
theObjects[i].mesh.geometry.dynamic = true;
theObjects[i].mesh.geometry.vertices = theObjects[i].geo.vertices;
theObjects[i].mesh.geometry.verticesNeedUpdate = true;
}
В if(){}
вы создаете сетку и в else{}
, которую вы обновляете, поэтому dynamic = true
и verticesNeedUpdate = true
вам нужно установить в ячейку, которая находится в else{}
.
Ответ 2
При изменении всей геометрии я думаю, что самый простой способ - удалить старый (scene.remove(geometry), а затем добавить новый (scene.add(geometry)). Я думаю, что стоимость модификации сетки и параметры и свойства геометрии такие же, как и добавление нового, хотя добавление намного проще и сэкономит много головной боли!