Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl glColorPointer试图提高fps_Opengl_Pyopengl - Fatal编程技术网

Opengl glColorPointer试图提高fps

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,

我终于到了可以给顶点添加颜色的地步。但现在我想提高我的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中实现这一点。这可行吗?有没有关于如何做到这一点的建议?

我认为您应该认真研究着色器。您不必每次都重新创建缓冲区。着色器将使用您的缓冲区执行颜色和几何体中的各种操作。

类应设置1D纹理坐标,而不是更改庞大的数据集,您只需替换部分纹理。要避免纹理采样插值,请将纹理设置为GL_最近过滤模式,并在顶点着色器中逐顶点采样纹理(即,不进行通常的逐片段纹理采样)。

感谢您的输入。我会试试你的建议。