- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 NVIDIA 卡上,我可以使用累积缓冲区执行全场景抗锯齿,如下所示:
if(m_antialias)
{
glClear(GL_ACCUM_BUFFER_BIT);
for(int j = 0; j < antialiasing; j++)
{
accPerspective(m_camera.FieldOfView(), // Vertical field of view in degrees.
aspectratio, // The aspect ratio.
20., // Near clipping
1000.,
JITTER[antialiasing][j].X(), JITTER[antialiasing][j].Y(),
0.0, 0.0, 1.0);
m_camera.gluLookAt();
ActualDraw();
glAccum(GL_ACCUM, float(1.0 / antialiasing));
glDrawBuffer(GL_FRONT);
glAccum(GL_RETURN, float(antialiasing) / (j + 1));
glDrawBuffer(GL_BACK);
}
glAccum(GL_RETURN, 1.0);
}
最佳答案
你为什么要以这种方式进行抗锯齿,不管你是否有累积缓冲区?只需使用 multisampling ;它不是免费的,但比你正在做的要便宜得多。
首先,您必须创建一个带有多重采样缓冲区的上下文。这意味着您需要使用 WGL/GLX_ARB_multisample ,这意味着在 Windows 上,您需要执行 two-stage context creation .您应该使用 1 *_SAMPLE_BUFFERS_ARB
请求像素格式和一些 *_SAMPLES_ARB
.样本数量越大,抗锯齿效果越好(也越慢)。您可以使用 wglGetPixelFormatAttribfv
获得最大样本数或 glXGetConfig
.
使用多采样帧缓冲区成功创建上下文后,您可以正常渲染,但有一个异常(exception):调用 glEnable(GL_MULTISAMPLE)
在您的设置代码中。这将激活多重采样渲染。
这就是你所需要的。
或者,如果您使用 GL 3.x 或有权访问 ARB_framebuffer_object ,您可以跳过上下文内容并创建多采样帧缓冲区。您的深度缓冲区和颜色缓冲区必须都具有相同数量的样本。我建议 using renderbuffers对于这些,因为您仍在使用固定功能(并且您无法从固定功能管道中的多样本纹理中提取纹理)。
您为颜色和深度创建多采样渲染缓冲区(它们必须具有相同数量的样本)。您将它们设置在 FBO 中,然后渲染到它们中(当然,使用 glEnable(GL_MULTISAMPLE)
)。完成后,您可以使用 glBlitFramebuffer
从多采样帧缓冲区 blit 到后台缓冲区(不应进行多采样)。
The problem with that, of course, is that GLSL is a pretty high barrier to entry for an OpenGL beginner.
关于没有累积缓冲区的 OpenGL 抗锯齿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10508872/
我是一名优秀的程序员,十分优秀!