我想在屏幕上绘制许多多边形,但是我很快注意到它的速度很快。作为测试,我这样做:

for(int i = 0; i < 50; ++i)
{
        glBegin( GL_POLYGON);
        glColor3f( 0.0f, 1, 0.0f ); glVertex2f( 500.0 + frameGL.GetCameraX(), 0.0f + frameGL.GetCameraY());
        glColor3f( 0.0f, 1.0f, 0.0f ); glVertex2f( 900.0 + frameGL.GetCameraX(), 0.0f + frameGL.GetCameraY());
        glColor3f( 0.0f, 0.0f, 0.5 ); glVertex2f(900.0 + frameGL.GetCameraX(), 500.0f + frameGL.GetCameraY() + (150));
        glColor3f( 0.0f, 1.0f, 0.0f ); glVertex2f( 500 + frameGL.GetCameraX(), 500.0f + frameGL.GetCameraY());
        glColor3f( 1.0f, 1.0f, 0.0f ); glVertex2f( 300 + frameGL.GetCameraX(), 200.0f + frameGL.GetCameraY());
        glEnd();
}

这只有50个多边形,而且填充速度很慢。我无法将它们直接上传到卡中,因为我的程序将允许用户重塑顶点。

我的问题是,我该如何加快速度。我没有用深度。我也知道这不是我的GetCamera()函数,因为如果我创建500,000个多边形,它们分散开来t很好,那么就很难在 View 中显示它们。如果图形卡每秒可以在屏幕上支持500,000,000个多边形,这应该很容易吗?

谢谢

最佳答案

如前所述,

  • 在循环中不执行glBegin和glEnd,但是在
  • 之外
  • 以获得更好的性能,请使用vertex arrays
  • 为获得最佳性能,请使用vertex buffer objects

  • 解决方案的顺序是,您将获得多少速度增益,反之则是它们所支持的范围。也就是说,任何现代图形卡都支持所有这些图形卡-在为嵌入式OpenGL系统进行编码时,您只需要小心即可。

    当代游戏(达到您引用的500kk限制的游戏)都至少使用了VBO(如果不是Geometry Shaders,但这甚至超出了一步)。为了有效地学习所提到的技术,老实说,我建议一次采取一些措施-例如首先学习显示列表,然后学习顶点数组,然后学习VBO,因为实际上每个人都建立在前者的基础上。

    即时模式(通过每个对象使用GL命令来表征)非常慢,甚至在当前的GL标准中也不推荐使用-从理论上讲很长,这是因为最昂贵的图形操作之一(除了纹理操作)是绘画调用- -在图形卡和处理器之间进行调用-因此在实践中,最好事先准备好一切,然后一次调用(或尽可能少地)将其提交给GPU。

    祝你好运!

    关于c++ - 用OpenGL创建许多多边形的速度很慢?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2892294/

    10-15 22:21