所以我有一个几何(这段代码的范围是 THREE.Geometry.prototype),我正在动态编辑。newData 是 { faces: [array of face Indexes], vertices: [array of vertice index]} 的对象。(这些数组保持原点面的长度和顶点数组的长度并保持形式 [null, null, null, "4", "5", null, null... ])
使用这些数组,我剥离所有面和顶点并将它们应用到 2 个新数组中的 1 个,有效地将所有数据分成 2 组。我还更新了脸上的指针!
最后我知道我已经更新了几何并且它是正确的,但是我所做的更改没有显示出来。我试过 .elementsNeedUpdate 导致错误。(在 InitWebGlObjects 中没有未定义的属性“a”...我看了看,看不到对 a 的引用)
我试过顶点需要更新,它什么也没做。
我还尝试将 updateCentroids 与之前的工具结合使用。它什么也不做。
我听说无法调整缓冲区的大小。缓冲区和缓冲区的长度是多少?我给模型的verticies数量?
我已经看到“您可以通过预先分配更大的缓冲区然后保持不需要的顶点折叠/隐藏来模拟调整大小。” 听起来这可能是我在做什么?如何折叠/隐藏顶点?我没有看到任何参考。
谢谢你的时间!
var oldVertices = this.vertices
var oldFaces = this.faces;
var newVertices = []
var newFaces = [];
var verticeChanges = [];
this.vertices = [];
this.faces = [];
for(var i in oldVertices){
var curAr = ((newData.vertices[i]) ? (newVertices):(this.vertices));
curAr.push(oldVertices[i]);
verticeChanges[i] = curAr.length-1;
}
for(var i in oldFaces){
var curAr = ((newData.faces[i]) ? (newFaces):(this.faces));
oldFaces[i].a = verticeChanges[oldFaces[i].a];
oldFaces[i].b = verticeChanges[oldFaces[i].b];
oldFaces[i].c = verticeChanges[oldFaces[i].c];
}
console.log('Vertices Cut from', oldVertices.length, "to:", newVertices.length, 'and', this.vertices.length);
console.log('Faces Cut from', oldFaces.length, "to:", newFaces.length, 'and', this.faces.length);