我正在尝试更改three.js场景中某些对象的几何图形。我有一个几乎可以工作的代码片段,点击鼠标触发更改,但出现以下问题:只在第一个鼠标单击时更改了(呈现的)形状,即使几何图形也被以下各项成功修改点击。使用three.js库的v66或v68,如果相关。更改three.js对象的几何图形
我看过Three.js: Completely change object's Geometry和Updating a geometry inside a mesh does nothing,但无法让我的代码工作到目前为止。
的我的代码相关部分:
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;
}
Here是一个(非)工作实施例的一个的jsfiddle。屏幕上有一个球体,点击将使其成为一个立方体。更多的点击应该在球体和立方体之间切换,但屏幕上没有任何变化。
谢谢你的回答。那么它是否是图书馆中的一个错误(如果是这样,是否值得报告)? – Saters 2014-09-11 07:29:11
这应该不是一个错误。渲染开始之前,几何图形必须转换为ArrayBuffers,这个操作非常昂贵。这就是为什么你必须更新几何。 – 2014-12-03 07:21:55