2012-09-10 59 views
5

我正在尝试创建一个管和与管相互作用的能力,例如拖动鼠标以更改管的起点/终点。为此,我直接修改顶点位置值和我想在现场更新对象Three.js更新TubeGeometry对象的网格

但是,我遇到了一个问题,我正在使用的管对象:当我更新路径点时,网格对象不会在屏幕上更新,所以它看起来像创建后我无法对其进行修改。

我的3D对象的创建大致是这样的:

var curve = new THREE.SplineCurve3([new THREE.Vector3(x, y, z), new THREE.Vector3(x2, y2, z2)]); 
var geometry = new THREE.TubeGeometry(curve, segments, 2, radiusSegments, closed); 
geometry.dynamic = true; 
var tubeMesh = THREE.SceneUtils.createMultiMaterialObject(geometry, [new THREE.MeshBasicMaterial({color: 0xffffff, opacity: 1, transparent: true})]); 
scene.add(tubeMesh);  

而当我想以更新的点。我这样做:

tubeMesh.children[0].geometry.path.points[0] = new THREE.Vector3(x4, y4, z4)); 
tubeMesh.children[0].geometry.path.points[1] = new THREE.Vector3(x3, y3, z3)); 
tubeMesh.children[0].geometry.verticesNeedUpdate = true; 

但是,当我进行更改时,对象似乎不会在屏幕上更新。是否可以用Tube来做到这一点?

回答

5

你只是提供的代码片段,但你可能需要

geometry.verticesNeedUpdate = true; 

geometry.dynamic = true; 

你可以找到更多的细节和例子,如何用WebGLRenderer更新的东西three.js所维基。

https://github.com/mrdoob/three.js/wiki/Updates

+0

我没有读过那篇文章前,在我上面的代码也包括你提到的代码。似乎verticeNeedUpdate仅在顶点属性发生更改时才应用。在这里我正在更改地理位置的路径属性。这里的人有像我一样的问题https://github.com/mrdoob/three.js/issues/1965 – user1533481

+0

如何创建一个简单的jsfiddle? – WestLangley

+0

我在这里创建了一个:http://jsfiddle.net/drsagitn/dC5KA/2/。这些点在mouseup事件中更新。谢谢。 – user1533481