Three.js更新TubeGeometry对象的网格

use*_*481 5 three.js

我正在尝试创建一个管和能够与该管交互,就像拖动鼠标来改变管的起点/终点.为此,我直接修改顶点位置值,我想在场景中更新对象

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

我的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);    
Run Code Online (Sandbox Code Playgroud)

当我想更新积分时.我是这样做的:

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;
Run Code Online (Sandbox Code Playgroud)

但是,当我进行更改时,对象似乎不会在屏幕上更新.是否可以使用Tube进行此操作?

Wes*_*ley 5

您只提供了代码片段,但您可能需要

geometry.verticesNeedUpdate = true;
Run Code Online (Sandbox Code Playgroud)

geometry.dynamic = true;
Run Code Online (Sandbox Code Playgroud)

您可以在Three.js wiki中找到有关如何更新内容的更多详细信息和示例WebGLRenderer.

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

  • 这是一个工作小提琴.http://jsfiddle.net/kWw68/3/.拉伸路径仅用于构造几何体.您必须更新网格几何本身,而不是路径.(命名路径`管'引起了一些混乱.)我_hope_你可以接受这个作为你的问题的答案. (3认同)