手动编辑几何图形后,三个JS没有视觉更新



所以我有一个几何(这段代码的范围是THREE.Geometry.prototype),我正在动态编辑。newData是{faces: [array of face Indexes], vertices: [array of vertex Indexes]}的对象。(这些数组保持原点面和顶点数组的长度,并保持形式[null, null, null, "4", "5", null, null…)

使用这些数组,我剥离所有的面和顶点,并将它们应用于2个新数组中的1个,有效地将所有数据分成2组。我还更新了面部的指针!

最后我知道我已经更新了几何形状,它是正确的,但我所做的更改没有显示。我尝试过。element打喷嚏更新,导致错误。在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);

我最近也遇到了这个问题。我发现,如果我在几何体中添加顶点和面,我需要设置this.groupsNeedUpdate = true,以便告诉渲染器更新它的内部缓冲区。

可能与本教程中的这一点有关:

"我只是想快速指出Three.js的一个小问题比如说,如果你修改一个网格的顶点,你会这样做吗注意,在渲染循环中没有任何变化。为什么?因为js(据我所知)缓存数据为一个网格这是一种优化。你真正需要做的是标记告诉Three.js有些东西已经改变了,所以它可以重新计算任何东西它需要这样做。您可以使用以下命令:

//设置几何图形为动态,允许更新

sphere.geometry。动态= true;

//修改顶点

sphere.geometry。__dirtyVertices = true;

//修改为法线

sphere.geometry。__dirtyNormals = true;"

最新更新