在Three.js(NOT ParticleSystem)中更改Particle对象的不透明度?

时间:2013-12-18 22:59:18

标签: three.js

我在Three.JS中使用CanvasRendererParticle。我使用这种方法生成一些随机粒子:

texture = THREE.ImageUtils.loadTexture("img.png");

material = new THREE.ParticleBasicMaterial({

    map : texture,
    transparent : true,

});

for (var i = 0; i < pointCount; i++) {

    var particle = new THREE.Particle(material);

    particle.position.x = Math.random() * (max - min) + min;
    particle.position.y = Math.random() * (max - min) + min;
    particle.position.z = Math.random() * (max - min) + min;

    // Set the size of the particle
    particle.scale.x = particle.scale.y = particle.scale.z =  Math.floor(Math.random() * 6) + 2;

    particles.push(particle);
    scatterPlot.add(particle);

}

我想(如果可能的话)能够改变单个Particles的不透明度,因为我在我的绘图中使用透明度作为维度(即,粒子的透明度反映了变量的大小) 。我知道我可以使用particle.material.opacity,但这会改变所有粒子的不透明度。我尝试了particles[i].material.opacity但得到了相同的结果。

当然,一种可能性是拥有一系列具有不同不透明度的材料。但我不确定是否有更简单的方法可以做到这一点?

非常感谢!

1 个答案:

答案 0 :(得分:2)

我想我可能已经想到了这一点 - 并且比我想的要简单。它至少似乎对我有用。我将material声明移到for循环中。我认为这会为每个ParticleBasicMaterial生成不同的Particle,但我认为这没关系。

然后,我可以使用Particle's访问单个particles[i].material素材,这样我就可以更改特定粒子的不透明度。

这是我更新的代码:

texture = THREE.ImageUtils.loadTexture("img.png");

for (var i = 0; i < pointCount; i++) {

    material = new THREE.ParticleBasicMaterial({

        map : texture,
        transparent : true,

    });

    var particle = new THREE.Particle(material);

    particle.position.x = Math.random() * (max - min) + min;
    particle.position.y = Math.random() * (max - min) + min;
    particle.position.z = Math.random() * (max - min) + min;

    // Set the size of the particle
    particle.scale.x = particle.scale.y = particle.scale.z =  Math.floor(Math.random() * 6) + 2;

    particles.push(particle);
    scatterPlot.add(particle);

}

// Example opacity change
particles[0].material.opacity = 0.5;

如果有人有任何其他建议,我将非常感谢他们。但至少这似乎给了我现在想要的行为。