Opengl glColorPointer试图提高fps
我终于到了可以给顶点添加颜色的地步。但现在我想提高我的FPS率。这是目前的情况。我有大量的顶点(~200000个),每个顶点都可以是~150个类中的一个。每一类的颜色不同。我当前正在绘制顶点,如下所示:Opengl glColorPointer试图提高fps,opengl,pyopengl,Opengl,Pyopengl,我终于到了可以给顶点添加颜色的地步。但现在我想提高我的FPS率。这是目前的情况。我有大量的顶点(~200000个),每个顶点都可以是~150个类中的一个。每一类的颜色不同。我当前正在绘制顶点,如下所示: glEnableClientState(GL_VERTEX_ARRAY) glBindBufferARB(GL_ARRAY_BUFFER_ARB, self.bufferVertices) glVertexPointer(3, GL_FLOAT, 0,
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中实现这一点。这可行吗?有没有关于如何做到这一点的建议?我认为您应该认真研究着色器。您不必每次都重新创建缓冲区。着色器将使用您的缓冲区执行颜色和几何体中的各种操作。类应设置1D纹理坐标,而不是更改庞大的数据集,您只需替换部分纹理。要避免纹理采样插值,请将纹理设置为GL_最近过滤模式,并在顶点着色器中逐顶点采样纹理(即,不进行通常的逐片段纹理采样)。感谢您的输入。我会试试你的建议。