glColorPointer试图改善fps

我已经finnaly达到了点,我可以添加一些颜色到我的顶点。但现在我想提高我的FPS率。这是目前的情况。我有大量的顶点(〜200000),并且每个顶点都可以在150个类中的一个中。每班不同颜色。我目前正在绘制我的顶点,如:glColorPointer试图改善fps

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。我的所有缓冲区都只在init时生成。但是现在代表每个类别的颜色将会迅速变化,每毫秒一次。随着颜色也将改变,所以我将不得不重新创建我的颜色缓冲区为每个绘制,并为200000顶点我有一种感觉FPS将接近0.我试图实现的修复是保持一个固定的颜色缓冲区,但不是实际的颜色,而是保留一个指向它表示的类的指针。这样,只有这200个颜色的类会改变。问题是我不知道这是如何在OpenGL中实现的。这是可行的吗?如何做到这一点的任何指针?

回答:

而不是颜色的类应该设置一维纹理坐标,然后而不是改变那个庞大的数据集,你只需要替换纹理的一部分。为避免纹理采样插值,将纹理设置为GL_NEAREST过滤模式,并在顶点着色器中对每个顶点的纹理进行采样(即,通常不会按照片段纹理采样进行采样)。

回答:

我认为你应该认真看看着色器。您不应该每次都需要重新创建缓冲区。 http://en.wikipedia.org/wiki/GLSL。着色器将使用您的缓冲区来执行各种颜色和几何操作。

以上是 glColorPointer试图改善fps 的全部内容, 来源链接: utcz.com/qa/257471.html

回到顶部