gpt4 book ai didi

没有累积缓冲区的 OpenGL 抗锯齿

转载 作者:行者123 更新时间:2023-12-04 16:48:23 24 4
gpt4 key购买 nike

在 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);
}

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

任何人都可以向我指出一些可以向我展示如何以 ATI 卡可以做到并且新手可以理解的方式进行全场景抗锯齿的东西吗?

最佳答案

你为什么要以这种方式进行抗锯齿,不管你是否有累积缓冲区?只需使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com