Javascript 用于摄影机动画的three.js几何体位置更改

Javascript 用于摄影机动画的three.js几何体位置更改,javascript,three.js,buffer-geometry,Javascript,Three.js,Buffer Geometry,我正在尝试更改TubeBufferGeometry.parameters.path的位置/动态平移,我将使用该路径进行摄影机动画 (全部基于此示例:) 到目前为止,这是我的代码和平 完整代码: 代码的重要部分: function init(){ // initial scene render etc. for full code take a look at codesanbox // tube var extrudePath = new Curves.GrannyKn

我正在尝试更改TubeBufferGeometry.parameters.path的位置/动态平移,我将使用该路径进行摄影机动画 (全部基于此示例:)

到目前为止,这是我的代码和平 完整代码:

代码的重要部分:

function init(){
    // initial scene render etc. for full code take a look at codesanbox

    // tube
    var extrudePath = new Curves.GrannyKnot();

    tubeGeometry = new THREE.TubeBufferGeometry( extrudePath, 50, 2, 1, true );
    tubeGeometry.dynamic = true;

//unsuccessful approach to change the parameters of position
    tubeGeometry.translate(100, 0, 0)
    tubeGeometry.attributes.position.needsUpdate = true;
}

function animate() {
    requestAnimationFrame( animate );
    render();
}

function render() {
    // animate camera along spline
    var time = Date.now();
    var looptime = 20 * 1000;
    var t = ( time % looptime ) / looptime;

    var pos = tubeGeometry.parameters.path.getPointAt( t );
    pos.multiplyScalar( 1 );

    splineCamera.position.copy( pos );
    renderer.render( scene, splineCamera );
}

结果是相机在默认位置绕GrannyKnot曲线移动时没有平移

我所期望的是动态地改变TubeBufferGeometry.parameters.path在某个方向上的位置/平移(例如位置X+100),这会影响我的相机移动

编辑 我刚刚意识到我可以通过添加

function render() {
    // animate camera along spline
    var time = Date.now();
    var looptime = 20 * 1000;
    var t = ( time % looptime ) / looptime;

    var pos = tubeGeometry.parameters.path.getPointAt( t );
    pos.x += 100; //<----this line added
    pos.multiplyScalar( 1 );

    splineCamera.position.copy( pos );
    renderer.render( scene, splineCamera );
}
function render(){
//沿样条线设置摄影机动画
var time=Date.now();
var looptime=20*1000;
var t=(时间%looptime)/looptime;
var pos=tubeGeometry.parameters.path.getPointAt(t);

pos.x+=100;//将3个浮点数作为参数,而不是
THREE.Vector3()
,如果您想在x轴上以10个单位移动几何体,则可以这样做:
geometry.translate(10,0,0);
。这一行您希望得到什么:
tubeGeometry.setAttribute('position',new THREE.BufferAttribute(extruptePath,3,1));
?为什么不更改网格的位置,而不是移动几何体?@prisoner849感谢您的重播。我再次检查了文档,您是对的:translate接受浮动参数,但当我像您编写的那样应用时,仍然不会发生任何事情。使用第二件事
tubeGeometry.setAttribute('position',new THREE.BufferAttribute(extrudePath,3,1));
我真的不知道我在这里期望的是什么(可以忽略)。我正在使用TubeBufferGeometry作为动画摄影机,就像我写的那样(请查看codesandobx的完整代码)因此,改变网格的位置也不会影响。很可能是错误地形成了我的问题寻求帮助。我将编辑此内容。您可能会在usefulWow的底部找到示例。哇,这真的很好。我对此表示感谢,但不幸的是,它并没有解决我描述的问题。