【发布时间】:2015-02-16 04:53:16
【问题描述】:
所以我有一个 Geometry(这段代码的范围是 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 与之前的工具结合使用。它什么也不做。
我听说无法调整缓冲区大小。缓冲区和缓冲区的长度是多少?我给模型的顶点数量?
我已经看到“您可以通过预先分配更大的缓冲区然后保持不需要的顶点折叠/隐藏来模拟调整大小。”听起来这可能是我在做什么?如何折叠/隐藏顶点?我没有看到任何相关的参考。
感谢您的宝贵时间!
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);
【问题讨论】:
-
你用的是哪个版本的three.js?
-
我想我正在使用修订版 52,无论是最新的
-
你能设置一个jsfiddle吗?
-
您可能需要重新渲染几何图形。我认为不支持动态添加顶点。
标签: javascript three.js webgl