1

PythonOpenGLプログラムの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) 

これで、displayTypeがGL_POINTSとGL_TRIANGLESの間で変更されます。現在、ポイントの場合は約28FPS、三角形の場合は約5〜6FPSしか取得していません。私はこの違いは正常ですか?FPSを改善するために何ができますか?

4

1 に答える 1

0

頂点バッファオブジェクトを使用しているため、CPUの制限はありません。つまり、ジオメトリがたくさんあるか、実際にはハードウェアアクセラレーションが得られていないかのどちらかです。いずれにせよ、より高い充填率の要求により、点から塗りつぶされた三角形へのパフォーマンスの切り替えの低下が予想されます。

于 2011-05-18T12:40:30.677 に答える