我有一个系统可以从源中生成粒子并更新它们的位置。目前,我在 OpenGL 中编写了一个程序,它调用我的 GenerateParticles(...)
和 UpdateParticles(...)
并显示我的输出。我希望我的系统具备的一项功能是能够每秒生成 n
个粒子。在我的 GenerateParticles(...)
和 UpdateParticles(...)
函数中,我接受了 2 个重要参数:current_time
和 delta_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/