Three.js + Tween.js 补间多个对象的顶点

小树

我使用three.js 来创建多个BoxGeometries 和tween.js 来为几何体的所有顶点设置动画。

首先,所有立方体都应该随机扭曲,直到我调用stopTweens()然后所有的顶点都应该回到它们的默认位置。

我的问题是,只有最后一个立方体在视觉上被重置。其他的也被补间了,但似乎verticesNeedUpdate没有设置为true,所以屏幕上什么也没有发生。

这是我的代码:

var scene_03_TweenArr = [];

创建立方体的函数:

function createCubes(){

for (i = 0; i < 10; i++) {
    var CubeGeometry = new THREE.BoxGeometry( 4, 4, 4, 5, 5, 5 );
    var CubeMaterial = new THREE.MeshPhongMaterial( {color: 0xffffff} );
    var cube = new THREE.Mesh( CubeGeometry, CubeMaterial );
    scene_03.add( cube );
    cube.position.x = -40+5*i;
    tt_animate_vertices(cube);
    }

}

随机动画立方体的函数:

function tt_animate_vertices(object) {

for( j = 0; j < object.geometry.vertices.length; j++ ){

    var previousX = object.geometry.vertices[j].x;
    var previousY = object.geometry.vertices[j].y;
    var previousZ = object.geometry.vertices[j].z;


    var tween = new TWEEN.Tween(object.geometry.vertices[j]);
    tween.to({ x: (0.25*Math.random()+1)*previousX, y: (0.25*Math.random()+1)*previousY, z: (0.25*Math.random()+1)*previousZ }, 5000 + Math.random()*5000);

    var tween2 = new TWEEN.Tween(object.geometry.vertices[j]);
    tween2.to({ x: previousX, y: previousY, z: previousZ }, 5000 + Math.random()*5000);

    tween.onUpdate(function(){
        object.geometry.verticesNeedUpdate = true;
    });

    tween2.onUpdate(function(){
        object.geometry.verticesNeedUpdate = true;
    });

    tween.chain(tween2);
    tween2.chain(tween);

    tween.start();

    var verticeTween = [object, tween, tween2, j, previousX, previousY, previousZ  ];

    scene_03_TweenArr.push(verticeTween);

}
}

停止补间并将立方体顶点重置为默认值的函数:

function stopTweens(){

for (let k = 0; k < scene_03_TweenArr.length; k++) {
    scene_03_TweenArr[k][1].stop();
    scene_03_TweenArr[k][2].stop();

    var object = scene_03_TweenArr[k][0];
    var index = scene_03_TweenArr[k][3];
    var prevX = scene_03_TweenArr[k][4];
    var prevY = scene_03_TweenArr[k][5];
    var prevZ = scene_03_TweenArr[k][6];

    var tween = new TWEEN.Tween(object.geometry.vertices[index]);
    tween.to({x: prevX, y: prevY, z: prevZ }, 300)

    tween.onUpdate(function(){
        object.geometry.verticesNeedUpdate = true;
    });

    tween.start();

    object.geometry.verticesNeedUpdate = true;

}   
}

在这里,我设法使其在 JSFiddle 中以相同的行为运行:

http://jsfiddle.net/gfhyvou3/25/

囚犯849

根据我的经验,let当您使用数组时,最好在循环内使用关键字。

function stopTweens(){

    for (let k = 0; k < scene_03_TweenArr.length; k++) {
        scene_03_TweenArr[k][1].stop();
        scene_03_TweenArr[k][2].stop();

        let object = scene_03_TweenArr[k][0];
        let index = scene_03_TweenArr[k][3];
        let prevX = scene_03_TweenArr[k][4];
        let prevY = scene_03_TweenArr[k][5];
        let prevZ = scene_03_TweenArr[k][6];

        var tween = new TWEEN.Tween(object.geometry.vertices[index]);
        tween.to({x: prevX, y: prevY, z: prevZ }, 300)

        tween.onUpdate(function(){
            object.geometry.verticesNeedUpdate = true;
        });

        tween.start();

        object.geometry.verticesNeedUpdate = true;

    }   
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Three.js | 补间链:如何同时启动多个补间?

来自分类Dev

Three.js | 补间链:如何同时启动多个补间?

来自分类Dev

three.js:结合tween.js绕世界轴旋转对象

来自分类Dev

如何在WebGL和Three.js和Tween.js中创建一个不断增长的对象

来自分类Dev

three.js补间对象到摄像头的前面

来自分类Dev

Three.js OrbitControls 补间动画到目标对象的正面(正面)

来自分类Dev

Three.js补间camera.lookat

来自分类Dev

Three.js Alpha材质和补间

来自分类Dev

Three.js Alpha材质和补间

来自分类Dev

如何在Three.js中将相机补间

来自分类Dev

Three.js:无法补间对象位置var(获取空错误),但对象本身实际上可用

来自分类Dev

使用tween.js和three.js错误地平滑旋转

来自分类Dev

使用Three.js,WebGL显示对象的顶点并旋转对象

来自分类Dev

使用Three.js,WebGL显示对象的顶点并旋转对象

来自分类Dev

使用slerp旋转时补间相机位置-THREE.js

来自分类Dev

如何检测Tween.js动画完成?

来自分类Dev

Tween.js不调用onUpdate函数

来自分类Dev

反转 Tween.js 动画的效果

来自分类Dev

Three.js对象居中

来自分类Dev

Three.JS对象裁剪?

来自分类Dev

Three.js对象居中

来自分类Dev

相机向网格旋转有时会非常困难 - 将 Three.js 和 Tween.js 用于 360° 图片播放器

来自分类Dev

Three.js计算顶点法线

来自分类Dev

在THREE.js的AxisHelper中标记顶点

来自分类Dev

Three.js BufferedGeometry顶点颜色

来自分类Dev

Three.js BufferedGeometry顶点颜色

来自分类Dev

在GSAP补间/重新启动控件后,Three.js FirstPersonControls摄像机旋转跳回

来自分类Dev

使用 Vue 和 Tween JS 有时会重置 tween

来自分类Dev

使用Paper.js补间动画

Related 相关文章

热门标签

归档