我的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 ......
任何提高性能的教程或建议(我听说过显示列表,但我认为它们只适用于静态内容)
答案 0 :(得分:3)
你的意思是'静态'在非动画的意义上?不。
应避免GL“显示列表”;它们被Vertex Buffer Objects取代,适合绘制MD2动画帧。
将所有MD2帧放入GL_STATIC_DRAW
个VBO中,并且每帧只绘制相应的VBO。
此外,MD2甚至可以在顶点着色器中 插值 ,使得动画更加流畅,同时速度极快。
的问题答案 1 :(得分:0)
显示列表不仅适用于“静态内容”。很有用,可以加快你的代码速度。用它。 在没有显示列表的情况下渲染网格时实现性能目标是不太可能的。 定义显示列表后,您可以在调用显示列表之前始终执行调用相关矩阵的转换。
另外将所有可能的计算放在glBegin / glEnd调用之外(之前)。