glColorPointer试图提高fps

| 我终于达到了可以为顶点添加颜色的地步。但是现在我想提高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中实现。这可行吗?任何指针如何执行此操作?     
已邀请:
        这些类不应设置颜色,而应设置一维纹理坐标,而不是更改庞大的数据集,而只需替换部分纹理。为避免纹理采样插值,请将纹理设置为GL_NEAREST过滤模式,然后在每个顶点的顶点着色器中对纹理进行采样(即通常不对每个片段进行纹理采样)。     
        我认为您应该认真看一下着色器。您不需要每次都重新创建缓冲区。 http://en.wikipedia.org/wiki/GLSL。着色器将使用您的缓冲区来执行各种颜色和几何形状的操作。     

要回复问题请先登录注册