Jac*_*zen 7 javascript webgl three.js
所以我有一个Geometry(这段代码的范围是THREE.Geometry.prototype),我正在动态编辑.newData是{faces:[数组面索引],顶点:[顶点索引数组]}的对象.(这些数组保持原始面的长度和顶点数组的长度并保持形式[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);
Run Code Online (Sandbox Code Playgroud)
小智 0
也许与本教程中的这一点有关:
“我只是想快速指出 Three.js 的一个快速问题,例如,如果您修改网格的顶点,您会注意到渲染循环中没有任何变化。为什么?因为 Three.js (据我所知)缓存网格数据作为一种优化。您实际上需要做的是向 Three.js 标记某些内容已更改,以便它可以重新计算所需的任何内容。您可以使用下列:
// 将几何图形设置为动态以便允许更新
球体.几何.动态 = true;
// 顶点的变化
sphere.geometry.__dirtyVertices = true;
// 改变法线
sphere.geometry.__dirtyNormals = true;”