【问题标题】:Animating Three.js vertices动画 Three.js 顶点
【发布时间】:2018-07-08 04:15:17
【问题描述】:

我正在尝试为 collada 模型中的单个顶点设置动画。 顶点的动画效果很好,但之后就不再动画了。

1:加载我的 collada

// name obj
var orgVerts = false;
var desVerts = false;
var material = new THREE.MeshBasicMaterial({ color:0x1e5679, wireframe:true });
var loader = new THREE.ColladaLoader();
var nameModel = false;

loader.options.convertUpAxis = true;
loader.load( '3d/name.dae', function ( collada ) {
    nameModel = collada.scene.children[0].children[0];
    nameModel.material = material;
    nameModel.geometry.dynamic = true;
    nameModel.position.set(0,0,0);//x,z,y- if you think in blender dimensions ;)
    nameModel.scale.x = .0035;
    nameModel.scale.y = .0035;
    nameModel.scale.z = .0035;
    scene.add(nameModel);
    orgVerts = nameModel.geometry.vertices; // make a backup of all verts
    genVerts(); // create a new array of random verts
});

2:在我的渲染函数中

var render = function () {
    requestAnimationFrame(render);
    // do stuff
    if(nameModel){
        if(window.globalCurrentSlide != 0){
            for(var r=0; r < nameModel.geometry.vertices.length; r++){
                var vert = desVerts[r]; // loop through all the destination verts
                nameModel.geometry.vertices[r].x = nameModel.geometry.vertices[r].x - (nameModel.geometry.vertices[r].x - vert.x)/20;
                nameModel.geometry.vertices[r].y = nameModel.geometry.vertices[r].y - (nameModel.geometry.vertices[r].y - vert.y)/20;
                nameModel.geometry.vertices[r].z = nameModel.geometry.vertices[r].z - (nameModel.geometry.vertices[r].z - vert.z)/20;
            }
        }else{
            for(var t=0; t < nameModel.geometry.vertices.length; t++){
                var vert2 = orgVerts[t]; // loop through all the original verts
                nameModel.geometry.vertices[t].x = nameModel.geometry.vertices[t].x - (nameModel.geometry.vertices[t].x - vert2.x)/20;
                nameModel.geometry.vertices[t].y = nameModel.geometry.vertices[t].y - (nameModel.geometry.vertices[t].y - vert2.y)/20;
                nameModel.geometry.vertices[t].z = nameModel.geometry.vertices[t].z - (nameModel.geometry.vertices[t].z - vert2.z)/20;
            }
        }
        nameModel.geometry.verticesNeedUpdate = true;
        nameModel.rotation.y += .005;
    }
    renderer.render( scene, camera );
}

window.globalCurrentSlide 设置为 0 开始,一切都很好。如果我将 window.globalCurrentSlide 更改为 1,则所有顶点的动画都正确... 但是当我将 window.globalCurrentSlide 更改回 0 时,顶点不会动画回原来的位置。我已经调试了堆,可以 100% 说 BOTH desVertsorgVerts 不会改变,而且它们是正确的。有任何想法吗?快把我逼疯了。

PS:我知道代码可以压缩,我只是在玩ATM

【问题讨论】:

    标签: animation three.js position vertices


    【解决方案1】:

    答案是我的orgVerts 只是参考而不是克隆。使用:

    var geometry = nameModel.geometry.clone();
    orgVerts = geometry.vertices;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-02
      • 2018-06-01
      • 1970-01-01
      相关资源
      最近更新 更多