移动一个物体的三个移动也移动了第二个物体

时间:2016-04-08 16:15:40

标签: three.js

我是three.js的新手,我需要加载一个粒子对象 如果在顶点上添加粒子

,它似乎有效

如果我加载我的Json一次并在load()内部我构建2个不同的THREE.Points当我移动第一个第二个也移动如果我使用2个不同的加载调用并且每个内部我构建一个THREE.Points对象每个对象可以单独移动

这是我在animate中调用的函数

function animateParticles( particleSystem, particleSystemOriginal, deltaTime ) {

    var vertsOriginal = particleSystemOriginal.geometry.vertices;
    var verts = particleSystem.geometry.vertices;       

    for(var i = 0; i < verts.length; i++) {

        var vertOriginal = vertsOriginal[i]; // original position
        var vert = verts[i]; // cloud position

        var vertOriginalY = vertOriginal.y;         
        var vertY = vert.y;

        if (i==1) console.log("vertOriginalY " + vertOriginalY + " vertY " + vertY);

        vert.y = vertY - (10 * deltaTime); // move          

    }

    particleSystemOriginal.geometry.verticesNeedUpdate = true;
    particleSystem.geometry.verticesNeedUpdate = true;

}

我需要加载两次相同的对象来移动其中一个

,这似乎很奇怪

在我的功能中我只是测试和移动云鸽,但我想要的是摇动粒子,所以我需要知道粒子原始位置并设置粒子新位置

编辑1

我像这样加载我的模型

var loader = new THREE.JSONLoader(); 
loader.load('../3d-models/creati/mymodel-001.json', function(geometry, materials) {

    var material = new THREE.MeshNormalMaterial(); 
    var particleModelOriginal = new THREE.Mesh( geometry, material );

    var particleModel = particleModelOriginal.clone();

    /* build particle THREE.Points */

    particleSystemOriginal = new THREE.Points(particlesOriginal, particleMaterial);     
    particleSystem = new THREE.Points(particles, particleMaterial);
    //particleSystem = particleSystemOriginal.clone();

 });

1 个答案:

答案 0 :(得分:0)

如果我正确理解了这个问题,如果要创建多个对象,则可能需要在要加载的网格/几何体上使用.clone()对象。否则它们引用相同的对象,并且如果其中一个被修改,它们都将被修改