问题 更新网格内的几何图形不会做任何事情


我正在使用THREE.JS rev 49。

我的程序需要通过更改它的几何来更新网格。 不幸的是,显示器似乎没有更新。

这是我的代码:

// 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


6861
2018-03-13 11:31


起源



答案:


如果我理解正确,你在这里更新顶点:

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{}


13
2018-03-13 12:27



谢谢Uhura。我虽然 verticesNeedUpdate 是一个永久的选择。 :) - Oragon Efreet
注意,因为r67, geometry.dynamic=true 不再需要了: threejs.org/docs/#manual/introduction/How-to-update-things - Vortexfive


答案:


如果我理解正确,你在这里更新顶点:

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{}


13
2018-03-13 12:27



谢谢Uhura。我虽然 verticesNeedUpdate 是一个永久的选择。 :) - Oragon Efreet
注意,因为r67, geometry.dynamic=true 不再需要了: threejs.org/docs/#manual/introduction/How-to-update-things - Vortexfive


在更改整个几何体时,我认为最简单的方法是删除旧的几何体(scene.remove(几何体),然后添加新的几何体(scene.add(几何体))。我认为修改网格和几何参数的成本和属性与添加新属性相同,虽然添加更容易并且节省了很多头痛!


2
2018-06-11 15:24



为我工作 - 谢谢 - bernhardrusch
确保你使用 scene.remove(mesh),你也打电话 mesh.geometry.dispose(), mesh.material.dispose() 和 mesh.texture.dispose() 否则你会得到内存泄漏我认为(r71) - Joe
mesh.geometry.dispose不是一个函数 - Hitesh Sahu