我终于达到了可以为我的顶点添加一些颜色的地步。但现在我想提高我的 FPS 速率。这是目前的情况。我有大量的顶点 (~200000) ,每个顶点都可以属于~150个类之一。每个班级的区别在于它的颜色。我目前正在绘制我的顶点,如:
glEnableClientState(GL_VERTEX_ARRAY)
glBindBufferARB(GL_ARRAY_BUFFER_ARB, self.bufferVertices)
glVertexPointer(3, GL_FLOAT, 0, None)
glEnableClientState(GL_NORMAL_ARRAY);
glBindBufferARB(GL_ARRAY_BUFFER_ARB, self.bufferNormals)
glNormalPointer(GL_FLOAT, 0, None)
glEnableClientState(GL_COLOR_ARRAY)
glBindBufferARB(GL_ARRAY_BUFFER_ARB, self.bufferColors)
glColorPointer(3, GL_FLOAT, 0, None)
glDrawArrays( GL_POINTS, 0, len(self.vertices) / 3 )
一切正常,FPS 约为 60。我所有的缓冲区仅在初始化时生成。但是现在代表每个类的颜色会迅速变化,大约每毫秒一次。随着颜色也会改变,所以我必须为每次绘制重新创建颜色缓冲区,对于 200000 个顶点,我感觉 FPS 将接近 0。我试图实现的修复是保持固定颜色缓冲区,但不是实际的颜色,而是保留一个指向它所代表的类的指针。这样,只有类的 200 种颜色会改变。问题是我不知道如何在 OpenGL 中实现。这是可行的吗?有关如何执行此操作的任何指示?