我有一个粒子模拟程序,我目前正致力于生成矩形的随机粒子位置。这现在适用,但它不是最好的解决方案,通常是粒子重叠,矩形中有小孔。我如何初始化矩形形状的粒子?
我目前的循环:
for(auto i=0; i<MAXPARTICLES; i++){
int particleIndex = FindUnusedParticle(); //grab the index to give a particle life
ParticlesContainer[particleIndex].life = 100.0f; //Long particle life
//generate random positions for particles in the shape of a box with random patterns
ParticlesContainer[particleIndex].pos = glm::vec3((rand()%50)/5.0,(rand()%50)/5.0,-50.0);
// Very bad way to generate a random color
ParticlesContainer[particleIndex].r = 255;
ParticlesContainer[particleIndex].g = 0;
ParticlesContainer[particleIndex].b = 0;
ParticlesContainer[particleIndex].a = 255;
ParticlesContainer[particleIndex].size = .2f;
}
答案 0 :(得分:1)
这比单独使用两个维度的均匀分布更复杂。如果你的“均匀度”是两个最接近的粒子之间的距离,那么有两种方法可以达到:等边三角形和正方形(如果计算六边形,则为三个)。唯一随机的东西就是一颗种子的位置以及将要进入的“方向”。
参考图片:
但是,这会给你一个非常规则的网格状外观。您可以尝试对以这种方式分发的粒子应用随机的微小变化,并看看它是如何工作的。