【发布时间】:2010-09-21 01:49:57
【问题描述】:
我目前正在编写一个交互式模拟器,它显示粒子系统的演变。我正在使用 Visual Studio 在 Windows 7 32 位上进行开发。
目前,我有一个函数可以在屏幕上绘制所有粒子,看起来像这样:
void Simulator::draw()
{
glColor4f(255, 255, 255, 0);
glBegin();
for (size_t i = 0; i < numParticles; i++)
glVertex3dv(p[i].pos);
glEnd();
}
这很好用,而且全部用于测试,但速度慢得离谱。如果我在屏幕上有 200 个粒子,不做任何其他计算(只是重复调用 draw()),我会得到大约 60 fps。但如果我使用 1000 个粒子,则运行速度仅为 15 - 20 fps。
我的问题是:如何更快地绘制粒子?我的模拟以相当不错的速度运行,并且在某个点上它实际上被绘图阻止(!)。
【问题讨论】:
-
我设法找到了过度缓慢的根源。在错误的地方调用了一个耗时的方法。它随着粒子数量的二次方缩放,并在每帧更新时被调用。修复后,可以毫无问题地绘制 5000 个粒子。
标签: c++ performance opengl 3d