使用Opengl绘制50k以上球体时如何提高速度

How to improve speed when drawing over 50k sphere with Opengl

本文关键字:何提 高速度 Opengl 绘制 50k 使用      更新时间:2023-10-16

现在,我使用glutSolidSphere绘制了多个球体,即50k+球体速度非常低。

有什么提高速度的方法或建议吗?

下面是我的代码。。。

void COpenGlWnd::OnPaint()
{
    CPaintDC dc(this);
    ::wglMakeCurrent(m_hDC, m_hRC);
    for(int k = 0; k < m_nCountZ; k++)
    {   
        for(int j = 0; j < m_nCountY; j ++)
        {   
            for(int i = 0; i < m_nCountX; i ++)
            {
            ::glPushMatrix();
            ........
            ::glutSolidSphere(Size[i][j][k], 36, 36);
            ........
            ::glPopMatrix();
            }
        }
    }
    ::SwapBuffers(m_hDC);
}

有关详细信息:球体将始终位于特定位置,但用户可以使用鼠标旋转并从差异视图中查看所有球体。

这里有几个建议:

  1. 创建一个包含球体的顶点缓冲区对象(VBO)并渲染它,而不是使用glutSolidSphere
  2. 看看实例化,就是用一个绘图调用绘制许多球体

以下文章几乎完全符合您的要求:http://sol.gfxile.net/instancing.html

如果你真的想要效率并且只处理球体,你实际上可以只使用一个四边形和一个着色器来绘制一个具有无限分辨率的球体。基本上用数学来计算球体。从一个没有纹理的圆圈开始。添加深度、法线、照明、纹理等。

这将计算每个像素的球体,使其具有所需的高分辨率。