(我正在使用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不同的格式?
答案 0 :(得分:0)
obj格式不支持三角形条带。不要使用GL_POLYGON或显示列表,因为它们已被有效弃用。除非你有令人信服的性能原因,否则不要打扰三角形剥离。
假设您可以在混合器中对所有内容进行三角测量,请将三角形加载到VBO中并通过glDrawElements进行索引。如果您要绘制大量模型,请尝试将模型合并为一个大型VBO。