2009-11-20 34 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