我有一个类,它根据传入的堆栈计数、扇区计数和半径生成一个球体。问题是,每当我绘制球体时,我的帧速率从57-60 fps下降到20 fps
这是我绘制球体的方式:
def draw_edges(self):
"""Draws the sphere's edges"""
glPushMatrix()
glTranslate(self.position[0], self.position[1], self.position[2])
glRotate(self.rotation[3],self.rotation[0],self.rotation[1],self.rotation[2])
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE)
glBegin(GL_TRIANGLES)
for edge in self.edges:
for vertex in edge:
glVertex3fv(self.vertices[vertex])
glEnd()
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL)
glPopMatrix()
有人知道我怎样才能加快速度吗
尝试摆脱嵌套循环。有关使用Vertex Buffer Object和Vertex Array Object绘制网格的现代方法,请参见Vertex Specification
另一种(不推荐使用的)可能性是使用固定的函数属性
OpenGL 4.6 API Compatibility Profile Specification; 10.3.3 Specifying Arrays for Fixed-Function Attributes; page 402
使用类的构造函数中的顶点属性数据创建列表:
使用阵列指定顶点并绘制网格:
这是使用VBO和VAO实现现代解决方案的第一步(很小)
通过使用Vertex Buffer Object可以进一步提高性能:
相关问题 更多 >
编程相关推荐