2011-05-27 63 views
0

我已經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中實現的。這是可行的嗎?如何做到這一點的任何指針?

回答

2

而不是顏色的類應該設置一維紋理座標,然後而不是改變那個龐大的數據集,你只需要替換紋理的一部分。爲避免紋理採樣插值,將紋理設置爲GL_NEAREST過濾模式,並在頂點着色器中對每個頂點的紋理進行採樣(即,通常不會按照片段紋理採樣進行採樣)。

+0

感謝您輸入的人。將嘗試您的建議。 – Bogdan 2011-05-31 08:18:32

0

我認爲你應該認真看看着色器。您不應該每次都需要重新創建緩衝區。 http://en.wikipedia.org/wiki/GLSL。着色器將使用您的緩衝區來執行各種顏色和幾何操作。