【问题标题】:OpenGL AntiAliasing and Background QuadOpenGL 抗锯齿和背景四边形
【发布时间】:2009-11-20 19:59:49
【问题描述】:

我正在我的 3D 场景后面绘制一个背景,它按预期工作(下面的代码)。我还在使用累积缓冲区(红皮书第 10 章)对场景进行抗锯齿处理。

...通过抖动和绘制图像的代码循环数次(例如,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

【问题讨论】:

  • GL 3.0 中不推荐使用 glAccum 是有原因的。这是一种非常缓慢的抗锯齿方法。我建议使用 MSAA。如果你的设备不支持,那么 FSAA 还是比 glAccum 好。

标签: opengl background antialiasing


【解决方案1】:

如果您只是追求外观,而不是寻求渲染加速,请不要抖动背景。您的循环将绘制背景,应用抖动,然后绘制前景。由于背景从不移动,因此累积的背景会产生别名。

【讨论】:

  • 如上所述,在抖动之前绘制背景的问题是使用 GL_RETURN 调用 glAccum 会复制(覆盖)颜色缓冲区中的值(而不是使用深度测试和混合函数等)屏蔽正在写入颜色缓冲区的值。每次抖动也必须清除颜色和深度缓冲区。可能我没听懂你的回答。
  • 每次循环你都会绘制整个图像。您考虑的背景区域(没有进行抗锯齿处理)每次都是相同的。前景进行了抗锯齿处理,每次都会有一个小的位移。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-29
  • 1970-01-01
  • 1970-01-01
  • 2012-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多