【发布时间】:2016-04-06 22:30:58
【问题描述】:
(我使用的是 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 不同的格式?
【问题讨论】:
-
有点迂腐,但是:OpenGL 绘制三角形的速度并不快于多边形,因为它是一种规范;它只定义发生了什么 API 调用做什么,并没有实现任何东西。也就是说,今天大多数硬件只渲染三角形,更复杂的形状被分解成三角形。如果您使用的是 OpenGL 2+,则应该使用顶点缓冲区而不是显示列表。
-
顶点缓冲区是否包括使用 glDrawArrays? Wikipedia 中的 VBO 示例使用 glDrawArrays 和 glBindBuffer,但我可以单独使用 glDrawArrays。
标签: opengl polygon triangulation wavefront