OpenGl:MD2动画性能问题

时间:2011-04-10 19:55:08

标签: opengl

我的renderMd2函数出现问题(只是代码不好)。

它只是用

绘制模型的每个顶点(保存在floatarrays中)
 glBegin(GL_TRIANGLES);
 for(i = 0; i < numTriangles; i++)
 {
      CalculateNormal(vList[triIndex[i].meshIndex[0]].point,
           vList[triIndex[i].meshIndex[2]].point,
           vList[triIndex[i].meshIndex[1]].point);

    if (modelTex != NULL)
        glTexCoord2f(st[triIndex[i].stIndex[0]].s,
            st[triIndex[i].stIndex[0]].t);

      glVertex3fv(vList[triIndex[i].meshIndex[0]].point);

    if (modelTex != NULL)
        glTexCoord2f(st[triIndex[i].stIndex[2]].s ,
            st[triIndex[i].stIndex[2]].t);

      glVertex3fv(vList[triIndex[i].meshIndex[2]].point);

    if (modelTex != NULL)
        glTexCoord2f(st[triIndex[i].stIndex[1]].s,
            st[triIndex[i].stIndex[1]].t);

      glVertex3fv(vList[triIndex[i].meshIndex[1]].point);
 }
 glEnd();

只需一个型号,帧时间从1.852ms增加到2.128ms ......

任何提高性能的教程或建议(我听说过显示列表,但我认为它们只适用于静态内容)

2 个答案:

答案 0 :(得分:3)

你的意思是'静态'在非动画的意义上?不。

应避免GL“显示列表”;它们被Vertex Buffer Objects取代,适合绘制MD2动画帧。

将所有MD2帧放入GL_STATIC_DRAW个VBO中,并且每帧只绘制相应的VBO。

此外,MD2甚至可以在顶点着色器中 插值 ,使得动画更加流畅,同时速度极快。

有代码执行here和相应的着色器here

关于gamedev.stackoverflow.com

的问题

答案 1 :(得分:0)

显示列表不仅适用于“静态内容”。很有用,可以加快你的代码速度。用它。 在没有显示列表的情况下渲染网格时实现性能目标是不太可能的。 定义显示列表后,您可以在调用显示列表之前始终执行调用相关矩阵的转换。

另外将所有可能的计算放在glBegin / glEnd调用之外(之前)。