c++ - 粒子系统 : particle generation

标签 c++ opengl particles

我有一个系统可以从源中生成粒子并更新它们的位置。目前,我在 OpenGL 中编写了一个程序,它调用我的 GenerateParticles(...)UpdateParticles(...) 并显示我的输出。我希望我的系统具备的一项功能是能够每秒生成 n 个粒子。在我的 GenerateParticles(...)UpdateParticles(...) 函数中,我接受了 2 个重要参数:current_timedelta_time 。在 UpdateParticles(...) 中,我根据以下公式更新粒子的位置:new_pos = curr_pos + delta_time*particle_vector。我如何使用这些参数和全局变量(或其他机制)每秒产生 n 个粒子?

最佳答案

你需要小心,创建粒子的天真方法会让你为较低的 n 值创建分数粒子(可能不是你想要的)。而是创建一个累加器变量,该变量每帧与您的 delta_time 值相加。每帧检查它以查看创建该帧需要多少粒子并减去适当的数量:

void GenerateParticles(double delta_time) {
  accumulator += delta_time;
  while (accumulator > 1.0 / particles_per_second) {
    CreateParticle(...);
    accumulator -= 1.0 / particles_per_second;
  }  
}

确保设置一些限制,这样如果时间增量很大,您就不会同时创建一百万个粒子。

关于c++ - 粒子系统 : particle generation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2670727/

相关文章:

c++ - 检查类/结构是否有特定的运算符

c++ - 尝试在 C++ OpenGL 中打印但返回一个整数?

opengl - 与 GL_MAX_TEXTURE_SIZE 混淆

c++ - Visual Studio 2010 C++ native Debug模式资源

c++ - 如何将 Blitz++ 子数组作为过程的输入/输出参数传递

c - 从C中的缓冲区分配

arrays - 在二维网格上的同一单元格中查找粒子

python - pygame - 粒子效果

c++ - 这段c++代码是怎么回事? (继承的解析运算符?!?)

c++ - OpenGL 纹理无法正确加载