我在Three.JS中使用CanvasRenderer
和Particle
。我使用这种方法生成一些随机粒子:
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
但得到了相同的结果。
当然,一种可能性是拥有一系列具有不同不透明度的材料。但我不确定是否有更简单的方法可以做到这一点?
非常感谢!
答案 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;
如果有人有任何其他建议,我将非常感谢他们。但至少这似乎给了我现在想要的行为。