Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Three.js 动态更新THREE.Tube几何体路径_Three.js - Fatal编程技术网

Three.js 动态更新THREE.Tube几何体路径

Three.js 动态更新THREE.Tube几何体路径,three.js,Three.js,我想知道是否有可能在创建三维几何体后更新其路径 基本准则是: 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.728618

我想知道是否有可能在创建三维几何体后更新其路径

基本准则是:

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并从零开始创建它会消耗大量内存,而且这是一个每隔几秒钟就引用一次的过程,有许多几何图形


有人知道怎么做吗?

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


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

您可以更新曲线的点,但如果您这样做,您必须重新构建几何体并动态更改它。我正在寻找类似于修改三点线(lineGeometry,lineMaterial)的东西:lineGeometry.顶点[0].x=10;(实时)但使用TubeGeometry。