opengl polygon vs triangle strip使用显示列表

时间:2016-01-03 00:09:20

标签: opengl polygon triangulation wavefront

(我正在使用PyOpenGL,我的笔记本电脑运行OpenGL 2.1)

我听说OpenGL绘制的三角形比多边形快得多,但是使用显示列表也会减少开销。如果我当前使用多边形(三角形和四边形等)并使用glBegin(GL_TRIANGLE_STRIP)绘制而不是glBegin(GL_POLYGON),如果我使用显示列表,我会通过将模型转换为三角形条来获得任何速度吗?无论如何?显示列表是否会自动对所有内容进行三角测量?

我的模型有大约50个obj格式的面孔,列表是用这个代码制作的:

treelist = glGenLists(1)
glNewList(treelist, GL_COMPILE)
for s in OBJ.treeobjs:
    for face in s.faces:
        verts, normals, texcoords = face

        glBegin(GL_POLYGON)
        for i in range(len(verts)):
            glNormal3fv(s.normals[normals[i]])
            if texcoords[i] > 0:
                glTexCoord2fv(s.texcoords[texcoords[i]])
            glVertex3fv(s.vertices[verts[i]])
        glEnd()
glEndList()

并绘制:

glCalllist(treelist)

但是,如果我想将所有内容转换为三角形条(在混合器中三角测量很容易),我将不得不使用与obj不同的格式?

1 个答案:

答案 0 :(得分:0)

obj格式不支持三角形条带。不要使用GL_POLYGON或显示列表,因为它们已被有效弃用。除非你有令人信服的性能原因,否则不要打扰三角形剥离。

假设您可以在混合器中对所有内容进行三角测量,请将三角形加载到VBO中并通过glDrawElements进行索引。如果您要绘制大量模型,请尝试将模型合并为一个大型VBO。