我目前有一个用C ++编写的粒子系统,用于创建每个都有500个粒子的Fireworks。我现在通过使用以下代码为每个粒子在两个数字之间提供随机速度来使它们爆炸:
vel = new glm::vec3[numParticles];
for (int i = 0; i < numParticles; i++){
vel[i] = glm::vec3((rand() % 1500 - 750) / 10000.0f, (rand() % 1500 - 750) / 10000.0f, (rand() % 1500 - 750) / 10000.0f);
}
这使它们以矩形形状爆炸,但我希望它们以真实烟花爆炸的方式爆炸成圆形。我似乎无法弄清楚如何计算圆形爆炸的每个X,Y和Z.有什么公式吗?
谢谢,Conor
答案 0 :(得分:0)
将其标准化。这使得粒子速度单位长度,这意味着它们将以大致圆形图案爆炸。
vel = new glm::vec3[numParticles];
for (int i = 0; i < numParticles; i++){
vel[i] = glm::normalize(glm::vec3((rand() % 1500 - 750) / 10000.0f, (rand() % 1500 - 750) / 10000.0f, (rand() % 1500 - 750) / 10000.0f));
}
答案 1 :(得分:0)
我会使用球面坐标给它们一个随机的量级,theta和omega。然后你可以将它们转换为XYZ。该网站应该包含您需要的所有公式