私はTHREE.JSrev49を使用しています。
私のプログラムは、メッシュのジオメトリを変更してメッシュを更新する必要があります。残念ながら、表示は更新されていないようです。
これが私のコードです:
// 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
私が正しく理解していれば、ここで頂点を更新しています:
_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{}
_にあるメッシュに設定する必要があります。
ジオメトリ全体を変更する場合、最も簡単な方法は、古いものを削除して(scene.remove(geometry))、新しいものを追加する(scene.add(geometry))ことだと思います。メッシュとジオメトリのパラメータを変更するコストがかかると思います。プロパティは新しいものを追加するのと同じですが、追加する方がはるかに簡単で、多くの頭痛の種を節約できます。