2009-11-20 54 views
3

我正在繪製我的3D場景背後的背景,它按預期工作(代碼如下)。我還使用累積緩衝區對場景進行消除鋸齒(紅色書的第10章)。OpenGL AntiAliasing和Background Quad

...多次循環(比方說,n)到代碼信號不穩定值,繪製圖像(抖動移動的圖像,以略微不同的位置),與

glAccum(GL_ACCUM, 1.0/n) 

累積數據最後調用

glAccum(GL_RETURN, 1.0) 

不過,我不想抗混疊的背景。問題是用GL_RETURN調用glAccum會複製(覆蓋)顏色緩衝區中的值(而不是使用深度測試和混合函數等)來屏蔽正在寫入顏色緩衝區的值。

如何在抗鋸齒3D場景之前或之後繪製背景,以便背景看起來就像我繪製3D場景時沒有抗鋸齒一樣?


// Draw the background. 

glMatrixMode GL.GL_PROJECTION 
glLoadIdentity 

glMatrixMode GL.GL_MODELVIEW 
glLoadIdentity 

glPolygonMode GL_FRONT_AND_BACK, GL_FILL 

glDisable glcDepthTest 

    glBegin bmQuads 

    // Call glColor and glVertex here. 

    glEnd 

glEnable glcDepthTest 
+0

GLAccum在GL 3.0中被棄用是有原因的。這是一個非常緩慢的方法來做抗鋸齒。我建議使用MSAA。如果你的設備不支持它,那麼FSAA仍然比glAccum好。 – Bahbar 2009-11-24 09:46:22

回答

2

如果你只是外觀之後,而不是尋找一個渲染加速,不抖動的背景。您的循環會繪製背景,應用抖動,然後繪製前景。由於背景不會移動,累積的背景將會被混疊。

+0

如上所述,在抖動之前繪製背景的問題在於,使用GL_RETURN調用glAccum(覆蓋)顏色緩衝區中的值(而不是使用深度測試和混合函數等)來屏蔽正在寫入的值顏色緩衝區。每個抖動都必須清除顏色和深度緩衝區。 也許我不明白你的答案。 – JRS 2009-11-23 16:26:36

+0

每次循環都會繪製整個圖像。您認爲背景的區域沒有得到反鋸齒,每次都是相同的。前景,反鋸齒,每次都會有小的偏移。 – 2009-11-23 18:06:00