首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不使用累积缓冲区的OpenGL抗锯齿

不使用累积缓冲区的OpenGL抗锯齿
EN

Stack Overflow用户
提问于 2012-05-09 09:50:59
回答 1查看 10.9K关注 0票数 5

在NVIDIA卡上,我可以使用累积缓冲区执行全景抗锯齿,如下所示:

代码语言:javascript
复制
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);
}

在ATI卡上没有实现累积缓冲区,每个人都说你现在可以用着色器语言来做了。当然,这样做的问题是,对于OpenGL初学者来说,GLSL是一个相当高的门槛。

有没有人能给我一些建议,告诉我如何用ATI卡可以做到的方式做全场景抗锯齿,而且新手也能理解?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-09 10:23:22

为什么你要这样做抗锯齿,不管你有没有累积缓冲区?只要使用multisampling就可以了;它不是免费的,但比你正在做的便宜得多。

首先,您必须创建一个具有多采样缓冲区的上下文。这意味着你需要使用WGL/GLX_ARB_multisample,也就是说在Windows上,你需要使用two-stage context creation。您应该请求具有1个*_SAMPLE_BUFFERS_ARB和一定数量的*_SAMPLES_ARB的像素格式。采样数越大,抗锯齿效果越好(也越慢)。您可以使用wglGetPixelFormatAttribfvglXGetConfig获取最大样本数。

成功创建具有多采样帧缓冲区的上下文后,可以正常渲染,但有一个例外:在设置代码中调用glEnable(GL_MULTISAMPLE)。这将激活多采样渲染。

这就是你所需要的。

或者,如果您使用的是GL 3.x或访问ARB_framebuffer_object,则可以跳过上下文内容并创建多采样帧缓冲区。深度缓冲区和颜色缓冲区必须都具有相同数量的采样。对于这些,我建议使用using renderbuffers,因为你仍然在使用固定函数(并且你不能在固定函数管道中从多样本纹理中提取纹理)。

为颜色和深度创建多采样渲染器(它们必须具有相同数量的采样)。您可以在FBO中设置它们,然后渲染到它们中(当然是使用glEnable(GL_MULTISAMPLE) )。完成后,您可以使用glBlitFramebuffer将多采样帧缓冲区中的数据传输到后台缓冲区(不应进行多采样)。

的问题是,对于OpenGL初学者来说,GLSL是一个相当高的入门门槛。

谁说的?初学者从着色器中学习没有什么错。事实上,根据我的经验,这样的初学者通常学习得更好,因为他们更有效地了解正在发生的事情的细节。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10508872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档