Подтвердить что ты не робот

Обновление геометрии внутри сетки ничего не делает

Я использую 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

4b9b3361

Ответ 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)). Я думаю, что стоимость модификации сетки и параметры и свойства геометрии такие же, как и добавление нового, хотя добавление намного проще и сэкономит много головной боли!