2012-09-10 8 views
5

Estoy tratando de crear un tubo y la capacidad de interactuar con ese tubo como arrastrar el mouse para cambiar el punto de inicio/final del tubo. Para eso modifico directamente los valores de posición de los vértices y Me gustaría actualizar el objeto en la escenaThree.js Actualización de malla del objeto TubeGeometry

Sin embargo, he encontrado un problema con el objeto de tubo que estoy usando: cuando actualizo los puntos de ruta el objeto de malla no se actualiza en la pantalla, por lo que parece No puedo modificarlo después de que ha sido creado.

Mi creación de objetos 3D es más o menos así:

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);  

Y cuando quiero actualizar los puntos. Lo estoy haciendo así:

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; 

Sin embargo, cuando realizo cambios, el objeto no parece actualizarse en la pantalla. ¿Es posible hacer esto con un tubo?

Respuesta

5

Sólo se han proporcionado fragmentos de código, pero es probable que tenga

geometry.verticesNeedUpdate = true; 

y

geometry.dynamic = true; 

Puede encontrar más detalles y ejemplos en el Three.js wiki sobre cómo actualizar las cosas con WebGLRenderer .

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

+0

leí ese artículo antes y en mi código anterior también incluía el código que usted ha mencionado. Parece que el verticeNeedUpdate solo se aplica cuando se cambia la propiedad vertices. Mientras estoy aquí, estoy cambiando la propiedad del camino del geo. Los chicos aquí tienen el mismo problema que yo https://github.com/mrdoob/three.js/issues/1965 – user1533481

+0

¿Qué tal crear un jsfiddle simple? – WestLangley

+0

He creado uno aquí: http://jsfiddle.net/drsagitn/dC5KA/2/. Los puntos se actualizan en el evento mouseup. Gracias. – user1533481