2012-12-13 56 views
0

我每次渲染的GLUT基元越來越多。爲了加快速度,我決定不要每次都清楚,只是放入新的基元。這是錯的嗎?opengl不要在渲染中調用glClear()

當我這樣做時,我眨了眨眼睛。睡覺()表明一個框架是好的,第二個是空的,依此類推。

編輯: 簡碼的呈現(顯示)被執行一次(我用Java的JOGL):

gl.glPushMatrix(); 
gl.glColor3f(1, 1, 0); 
gl.glTranslatef(0, 0, 0); 
glut.glutSolidCube(10); 
gl.glPopMatrix(); 
drawable.swapBuffers(); 
+0

你可以在這裏發佈你正在使用的代碼嗎? –

回答

1

確定它是空的。當清除時,清除前緩衝區框架。然後,當調用後緩衝區框架的swapBuffers()變爲前端時,同時將您的東西繪製到前緩衝區框架中,它只是成爲了後緩衝幀。然後,當後緩衝幀完成時,緩衝區交換完成(由調用swapBuffers()觸發。這就是雙緩衝的工作方式。如果你不清除幀的顏色,你會隨着時間的推移累積在前端緩衝區中的繪圖,我不確定是否是需要的結果 在每個渲染循環開始時清除前端緩衝區並不是一個很大的性能問題。當您經常調用glClear() ,就像在每個對象繪圖之前調用它一樣,這也是沒有意義的,因爲在這種情況下,您將只看到最後繪製的對象。 對於閃爍 - 你應該更全面地描述你是如何做到的。從你的例子來看,它不清楚它爲什麼會發生。

+0

非常感謝。我做了兩次繪圖,沒有更多的閃爍。但是,似乎沒有glClear(),gluLookAt()不能正常工作,所以我打算使用glClear(),因爲它是最簡單的方法。 – avrilfanomar

+0

gluLookAt()不應該與glClear()相關。glClear清除pixels.gluLookAt的數學運算。如果你在這裏發佈更多的代碼,那麼可能是我們可以幫助你... ... –

0
gl.glDisable(GL_DEPTH_TEST); 

很難說沒有看到更多的代碼。

當過我得到在OpenGL代碼意想不到的效果,我精神上經歷的狀態的可能性列表,並將它們設置啓用或禁用:

  • 深度測試
  • 紋理
  • 照明
  • 融合
  • 剔除
  • 幀緩存
  • 個着色器
0

Swapbuffers(HDC)實際上並沒有複製緩衝區的內容,而只是交換前後緩衝區,這就是爲什麼你看到的每奇數幀,而不是甚至是那些。