PyOpenGL FPS 提升

1 投票
1 回答
829 浏览
提问于 2025-04-16 17:52

我正在尝试提高我用Python写的OpenGL程序的帧率(FPS)。到目前为止,我的做法是:

    self.bufferVertices = glGenBuffers(1)
    glBindBuffer(GL_ARRAY_BUFFER_ARB, self.bufferVertices)
    glBufferData(GL_ARRAY_BUFFER_ARB, ADT.arrayByteCount(vertices), ADT.voidDataPointer(vertices), GL_STATIC_DRAW_ARB)

    self.bufferNormals = glGenBuffers(1)
    glBindBuffer(GL_ARRAY_BUFFER_ARB, self.bufferNormals)
    glBufferData(GL_ARRAY_BUFFER_ARB, ADT.arrayByteCount(normals), ADT.voidDataPointer(normals), GL_STATIC_DRAW_ARB)

    self.size = len(triangles)
    self.bufferTriangles = glGenBuffers(1)
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER_ARB, self.bufferTriangles)
    glBufferData(GL_ELEMENT_ARRAY_BUFFER_ARB, len(triangles), ADT.voidDataPointer(triangles), GL_STATIC_DRAW_ARB)
-----------------------------------------------------------------
    glEnableClientState(GL_VERTEX_ARRAY) 
    glBindBuffer(GL_ARRAY_BUFFER_ARB, self.bufferVertices)
    glVertexPointer(3, GL_FLOAT, 0, None)
    glBindBuffer(GL_ARRAY_BUFFER_ARB, self.bufferNormals)
    glNormalPointer(GL_FLOAT, 0, None)
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER_ARB, self.bufferTriangles)
    glIndexPointer(GL_INT, 0, None)

    glDrawElements(displayType, self.size, GL_UNSIGNED_INT, 0)

    glDisableClientState(GL_VERTEX_ARRAY) 

现在我在GL_POINTS和GL_TRIANGLES之间切换显示类型。目前,我用点(points)得到大约28帧每秒,而用三角形(triangles)只有大约5到6帧每秒。这种差异正常吗?我该怎么做才能提高帧率呢?

1 个回答

0

因为你在使用顶点缓冲对象,所以你的CPU不会成为瓶颈。这样一来,要么你有很多的几何图形,要么你的硬件加速没有真正起作用。不管是哪种情况,从点切换到填充三角形时,性能下降是可以预料的,因为填充三角形需要更多的处理能力。

撰写回答