如何有效地绘制数千个顶点?

Mik*_*ley 4 c++ opengl 3d performance

我目前正在编写一个交互式模拟器,它显示了粒子系统的演变.我正在使用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();       
}
Run Code Online (Sandbox Code Playgroud)

这非常有效并且全部用于测试,但它的速度非常慢.如果我在屏幕上有200个粒子,没有做任何其他计算(只是重复调用draw()),我得到大约60 fps.但是,如果我使用1000个粒子,它的运行速度只有15 - 20 fps左右.

我的问题是:我怎样才能更快地绘制粒子?我的模拟以相当不错的速度运行,并且在某个点上它实际上被图画阻止(!).

Mat*_*gro 9

您应该做的第一个优化是放弃glBegin/glEnd(立即模式)并移动到顶点阵列(VAs)和顶点缓冲区对象(VBO).

您可能还想查看Point Sprites来绘制粒子.