即时更新THREE.TubeGeometry路径

时间:2018-03-13 21:54:25

标签: three.js

我想知道是否可以在创建后更新THREE.tubeGeometry的路径

基本代码是:

var extrudeBend = new THREE.SplineCurve3([
// Initial Vector and Final Vector
    new THREE.Vector3(-0.043019063220379364, -0.7286175255425879, 0.32197394147509184),
    new THREE.Vector3(-0.21509537768074327, -0.7286180853596855, 2.5424840106551216)]);

var material = new THREE.MeshBasicMaterial({ color: 0xff0000, transparent: false });
var segments = 40;
var radius = 0;
var radiusSegments = 18;
var closed = false;

var tubeGeometry = new THREE.TubeGeometry(extrudeBend, segments, radius, radiusSegments, closed);

var tubeMesh = new THREE.Mesh(tubeGeometry, new THREE.MeshLambertMaterial({
    color: 0xff00ff,
    wireframe: true
}));

scene.add(tubeMesh);

由于操作原因,我需要用不同的坐标修改那些初始和最终坐标,并在运行中再次刷新整个管。

修改网格椎体不是我想要的。

tubeMesh.geometry.vertices[0].set(geoBoxPose.position.x, geoBoxPose.position.y, geoBoxPose.position.z).multiplyScalar(6);

它只修改一个顶点,我想要所有的管。

删除tubeGeometry并从零创建它消耗了大量内存,并且它是一个每隔几秒钟引用的过程,具有许多几何形状。

有人知道怎么做吗?

1 个答案:

答案 0 :(得分:0)

不重新创建几何图形就无法更改这些参数。将这些初始和最终坐标转换为样条管的形状是一个复杂的数学过程,该过程在创建新几何图形时执行。这样就不能跳过这一步。

在高度受限的情况下,样条曲线全部是原始样条曲线的旋转,您只需旋转网格即可,这要快得多。