如何创建WebGL基本烟花

时间:2015-01-13 01:08:23

标签: javascript webgl point

我有点像一个粒子的喷泉,但我想让它们''爆炸''使它们更多地点击我点燃的烟花。

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;

  } 
}

1 个答案:

答案 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问题,只是你问别人如何为你编写代码,但希望这有帮助。