【问题标题】:threejs moving one object moves the second toothreejs 移动一个对象也会移动第二个对象
【发布时间】:2023-03-10 06:51:01
【问题描述】:

我是 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();

 });

【问题讨论】:

  • 能否也包括您如何加载对象?

标签: three.js


【解决方案1】:

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

【讨论】:

  • 我在 EDIT 1 上编辑我的问题,如果我在加载后克隆我的 mash 或者我在最后克隆我的云,它们都会变得更加艰难
猜你喜欢
  • 2018-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多