更改three.js对象's的几何形状
Changing a three.js object's geometry
我正在尝试更改three.js场景中某些对象的几何体。我有一段几乎可以工作的代码,其中鼠标单击会触发更改,但出现了以下问题:(渲染的)形状只有在第一次鼠标单击时才会更改,尽管每次单击都会成功修改几何体。使用three.js库的v66或v68(如果相关)。
我读过Three.js:彻底改变对象';s几何体和更新网格内的几何体没有任何作用,但到目前为止我的代码无法运行。
我的代码的相关部分:
var count = 0, item, geometry;
var geoms = [new THREE.SphereGeometry(2), new THREE.BoxGeometry(3, 3, 3)];
function init() {
geometry = geoms[count];
item = new THREE.Mesh(geometry, material);
scene.add(item);
}
// Mouse click listener.
function handleClick(event) {
count = 1 - count;
geometry = geoms[count];
item.geometry = geometry;
/* With that next line, on the first click, the sphere
* becomes a cube (as intended), but further clicks don't
* change the view anymore, even though item.geometry is
* modified.
*/
item.geometry.buffersNeedUpdate = true;
/* If I try next line instead, I got the following error:
* "TypeError: l.geometryGroupsList is undefined"
* from three.js.
*/
// item.geometry.verticesNeedUpdate = true;
}
下面是一个(非)工作示例的jsfiddle。屏幕上有一个球体,点击一下就会变成一个立方体。进一步的点击应该在球体和立方体之间切换,但屏幕上没有任何变化。
我不知道为什么会发生这种情况。一旦使用几何体对象,它就无法更新网格的几何体。
.clone()
在这种情况下起作用。
item.geometry.dispose();
item.geometry = geometry.clone();
dispose()
以前的几何体对象,以防止内存泄漏。
会有更好的解决方案。
我发现这段代码运行得最快:
item.geometry.computeFaceNormals();
item.geometry.computeVertexNormals();
item.geometry.normalsNeedUpdate = true;
item.geometry.verticesNeedUpdate = true;
item.geometry.dynamic = true;
相关文章:
- 在Three.js中导出网格会提高性能吗
- 如何在three.js上添加两个向量
- Three.js Points Rotation
- 无法读取属性'材料'未定义的Three.js
- Potree/Three.js测量问题
- Three.JS OBJ模型未显示
- 有没有一种方法可以获得three.js的最小/lite版本
- Node.js中的谷歌地图几何库
- JS和three.JS,在浏览器中进行参数测试
- Highchart Js柱形图堆叠和分组
- 如何使用three.js链接两个几何对象
- 使用Three.js更新地形几何
- 更改three.js对象's的几何形状
- Three.js r68 -不能使用OBJMTLLoader获取几何形状的质心
- 在3上设置顶点后.几何对象,THREE.Shape.Utils.triangulateShape失败,TypeError
- 创建大炮.RigidBody from THREE.网格或三维几何
- Three.js错误与多个画布和JSON加载几何
- 在three.js中解析json几何数据
- 如何在three.js中动态更改几何网格的尺寸
- 重复使用几何会导致间歇性的THREE.JS纹理错误