我有点像一个粒子的喷泉,但我想让它们''爆炸''使它们更多地点击我点燃的烟花。
var nFireworks = 10000;
function initParticleSystem() {
var particlesData = [];
for (var i= 0; i < nFireworks; i++) {
// angulos del cono
var theta = Math.PI / 6.0 * Math.random();
var phi = 5.0 * Math.PI * Math.random();
// direccion
var x1 = Math.sin(theta) * Math.cos(phi) ;
var y1 = velocity;
var z1 = 0.0;
// velocidad
var alpha = Math.random();
var velocity = (1.4 * alpha) + (0.80 * (1.0 - alpha));
particlesData[i * 4 + 0] = x1 * velocity;
particlesData[i * 4 + 1] = y1 * velocity;
particlesData[i * 4 + 2] = z1 * velocity;
particlesData[i * 4 + 3] = i * 0.095;
}
}
答案 0 :(得分:0)
你的代码有点奇怪,它在定义它之前使用了速度,而你实际上并没有显示阶梯函数或其他任何东西,但是,嘿,我会试一试。
你的代码(可能)生成一个粒子锥体,它们都以恒定的速度沿y移动,x速度随机扩散到PI / 6宽锥体中。如果你想让你的粒子随机向各个方向展开,我建议你先改变它:
在你的for循环之前,首先将速度设置为常量而不是所有的废话:
var velocity = 5;
然后,您希望粒子在所有同等随机x和y方向上从点向外移动,因此将x和y值更改为:
var x1 = ((Math.random() - 0.5) * velocity) * 2;
var y1 = ((Math.random() - 0.5) * velocity) * 2;
形成粒子,其中x和y速度在速度和速度之间是随机的
然后,我不知道为什么你的代码在单个数组中生成粒子数据,我会这样做
particleData.push([x1,y1,z1,i]);
然后以这种方式引用每个粒子,或者可能性能较差但更具可读性:
particleData.push({x: x1, y: y1, z: z1, brightness: i]};
(我只是想猜测那里的亮度)。
好运伙计,这不是一个真正的WebGL问题,只是你问别人如何为你编写代码,但希望这有帮助。