我想在屏幕上绘制许多多边形,但我很快注意到它会很快减速.作为测试,我这样做:
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();
}
Run Code Online (Sandbox Code Playgroud)
这只有50个多边形,而且已经很慢了.我无法将它们直接上传到卡片中,因为我的程序将允许用户重新整形顶点.
我的问题是,我怎样才能加快速度.我没有使用深度.我也知道这不是我的GetCamera()函数,因为如果我创建500,000个多边形分开t很好,它只是在视图中显示它们有困难.如果显卡每秒可以支持500,000,000个屏幕多边形,这应该很容易吗?
谢谢
Kor*_*icz 15
这些解决方案按照您将获得多少速度的顺序排序,并且反过来支持它们的宽度.也就是说,任何现代显卡都支持所有这些 - 在编写嵌入式OpenGL系统时只需要小心.
当代游戏(达到你引用的500kk限制的游戏)都至少使用VBO(如果不是几何着色器,但这甚至超过了一步).为了有效地学习所提到的技术,我诚实地建议他们一步一步 - 例如首先学习显示列表,然后是顶点数组,然后是VBO,因为在实践中每个都建立在前者之上.
立即模式(以每个对象使用GL命令为特征)非常慢,甚至在当前的GL标准中被弃用 - 这是一个很长的理论简称,因为最昂贵的图形操作之一(除了纹理操作)是绘制调用 - - 显卡和处理器之间的通话 - 所以在实践中最好事先做好准备,然后一次通话(或尽可能少)将其提交给GPU.
祝好运!