多重采样是一种在3D应用程序中应用全屏抗锯齿 (FSAA)的方法。 我需要在我的OpenGL程序中使用多重采样,该程序当前嵌入在wxWidgets GUI中。 有没有办法做到这一点? 只有在您知道实现此目的的详细步骤时才能回复。

我知道使用WGL (OpenGL的Win32扩展)启用多重采样。 但是,由于我的OpenGL程序不是用MFC编写的(我希望代码是多平台可移植的),这对我来说不是一个选择。

===============>>#1 票数:4 已采纳

我终于使用了我的wxWidgets OpenGL程序进行Multisampling。 现在有点乱,但这是如何:

wxWidgets目前在其稳定版本中没有多重采样支持(此时的最新版本为2.8.8 )。 但是,它可以作为补丁,也可以通过他们的每日快照获得。 (后者令人振奋,因为这意味着补丁已被接受,如果没有问题,应该出现在以后的稳定版本中。)

所以,有两个选择:

  1. 从他们的每日快照下载并构建。

  2. 获取正在运行的wxWidgets安装的补丁

我发现第二个选项不那么麻烦,因为我不想尽可能地打扰我的工作装置。 如果您不知道如何在Windows上进行修补,请参阅此内容

至少,对于Windows,补丁将修改以下文件:

$(WX_WIDGETS_ROOT)/include/wx/glcanvas.h
$(WX_WIDGETS_ROOT)/include/wx/msw/glcanvas.h
$(WX_WIDGETS_ROOT)/src/msw/glcanvas.cpp

修补后, 重新编译 wxWidgets库。

要在wxWidgets OpenGL程序中启用多重采样,需要对代码进行微小更改。

需要将属性列表传递给wxGLCanvas构造函数:

int attribList[] = {WX_GL_RGBA,
                    WX_GL_DOUBLEBUFFER,
                    WX_GL_SAMPLE_BUFFERS, GL_TRUE, // Multi-sampling
                    WX_GL_DEPTH_SIZE, 16,
                    0, 0};

如果您已经在使用属性列表,则将GL_SAMPLE_BUFFERS, GL_TRUE行添加到其中。 否则,将此属性列表定义添加到您的代码中。

然后修改wxGLCanvas构造函数以将此属性列表作为参数:

myGLFrame::myGLFrame    // Derived from wxGLCanvas
(
    wxWindow *parent,
    wxWindowID id,
    const wxPoint& pos,
    const wxSize& size,
    long style,
    const wxString& name
)
: wxGLCanvas(parent, (wxGLCanvas*) NULL, id, pos, size, style, name, attribList)
{
    // ...
}

创建wxGLCanvas元素后,默认情况下会启用多重采样。 要随意禁用或启用它,请使用相关的OpenGL调用:

glEnable(GL_MULTISAMPLE);
glDisable(GL_MULTISAMPLE);

多重采样现在应该与wxWidgets OpenGL程序一起使用。 希望它很快就会在wxWidgets的稳定版本中得到支持,使这些信息无关紧要:-)

  ask by Ashwin Nanjappa translate from so

未解决问题?本站智能推荐:

1回复

多重采样OpenGL FBO

我正在尝试将3D场景渲染为多重采样FBO。 我使用以下代码FBO创建FBO: 而且我收到错误GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE。 我做错了什么? 已经阅读了FBO文档这一主题,但没有帮助。 我可以创建不带深度附件的FBO。 但是在
2回复

多重采样opengl?

我运行多重采样的样本,但是它工作不正确,因为样本缓冲区和样本为0,似乎没有应用多重采样。我应该怎么做才能使它正确? 谢谢。 这是我的代码:
2回复

OpenGL多重采样线

有没有办法在仅使用OpenGL而不是整个程序绘制的线上使用多重采样? 提前致谢!
1回复

如何在Qt5的OpenGL中启用多重采样(抗锯齿)?

在创建窗口时如何启用多重采样? 我应该如何初始化OpenGL以匹配?
1回复

显式多重采样与OpenGL中的常规多重采样有何不同

我在28byteslater.com上阅读了关于延迟着色的MSAA的本教程 。 它说,在显式多重采样中,我们可以访问特定的样本。 难道我们不能从绑定到GL_TEXTURE_2D_MULTISAMPLE的常规纹理中做同样的GL_TEXTURE_2D_MULTISAMPLE吗? 这
1回复

在opengl 2.1中使用多重采样抗锯齿?

我有一个带radeon X1600显卡的2007 Macbook pro。 我正在尝试使用多重采样功能来消除锯齿。 使用GlView ,这是我手头的信息: 渲染器信息为: 渲染器:ATI Radeon X1600 OpenGL引擎供应商:ATI Technologies In
1回复

OpenGL:后处理+多重采样=?

我是OpenGL的新手,试图弄清楚如何在场景渲染中添加后期处理阶段。 我相信到目前为止我所知道的是,我创建了一个FBO,将场景渲染到该场景,然后可以使用后处理着色器(以FBO的纹理作为输入)来渲染到后台缓冲区。 但这超出了我的了解,是何时进行多重采样。FBO必须进行多重采样。 这留下了
2回复

如何在OpenGL FBO中使用多重采样

我正在尝试为FBO启用多重采样和Alpha覆盖率。 使用默认的帧缓冲区,我要做的就是调用glEnable(GL_MULTISAMPLE)和glEnable(GL_SAMPLE_ALPHA_TO_COVERAGE) 。 但是,我无法使用自己的FBO达到相同的效果。 我的目标:使用上述属性,将场景绘制
1回复

SDL / opengl多重采样不起作用

我正在尝试使用SDL / opengl进行多重采样,但是SDL不接受设置SDL_MULTISAMPLEBUFFERS和SDL_MULTISAMPLESAMPLES。 取而代之的是将它们保留为0,然后SDL_SetVideoMode()将失败。 我知道我的硬件可以通过4倍多重采样来实现这种像素
1回复

OpenGL多重采样不起作用?

我使用GL_MULTISAMPLE调用glEnable,并在片段着色器中使用“ vec4颜色的样本”作为输入向量,但多重采样仍处于关闭状态。 我究竟做错了什么? 有什么我想念的地方吗? ps我正在阅读官方的OpenGL编程指南(4.3版)。 编辑:一些代码: 片段着色器如下