- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要在 Qt5 项目中执行多重采样,但我不确定如何使用 QOpenGLFrameBufferObject执行 FSAA。据我搜索,没有关于如何执行此操作的示例,文档仅提到:“如果您想使用启用了多重采样的帧缓冲对象作为纹理,您首先需要使用 QOpenGLContext 将其复制到常规帧缓冲对象::blitFramebuffer()。”我的代码目前看起来像这样:
//Enable FSAA for better output
int vp[4];
glGetIntegerv(GL_VIEWPORT, vp);
if(m_lpFBO == NULL)
{
//MultiSampling set to 4 now
QOpenGLFramebufferObjectFormat format;
format.setAttachment(QOpenGLFramebufferObject::CombinedDepthStencil);
format.setMipmap(true);
format.setSamples(4);
format.setTextureTarget(GL_TEXTURE_2D);
format.setInternalTextureFormat(GL_RGBA32F_ARB);
//Create the FBO
m_lpFBO = new QOpenGLFramebufferObject(vp[2], vp[3], format);
m_lpFBOSurface = new QGLFramebufferObjectSurface(m_lpFBO);
}
QRect rc(0, 0, vp[2], vp[3]);
QGLSubsurface sub(lpPainter->currentSurface(), rc);
m_lpFBO->bind();
sub.setFramebufferObject(m_lpFBO);
lpPainter->pushSurface(&sub);
//Draw as usual
.
.
.
lpPainter->popSurface();
//Now Copy
QOpenGLFramebufferObject::blitFramebuffer(lpPainter->currentSurface()->framebufferObject(), rc, m_lpFBO, rc);
最佳答案
您不需要使用 QGLFramebufferObjectSurface
执行必要的下采样,因为您可以只使用两个 QGLFramebufferObject
s。 QOpenGLFramebufferObject::blitFramebuffer
(调用 glBlitFramebuffer
)将自动管理从源帧缓冲区目标到目标帧缓冲区目标的下采样(或上采样)。 blitFramebuffer
还可以让您指定如何使用( GL_NEAREST
或 GL_LINEAR
)计算转换以及要传输哪些附件( GL_COLOR_BUFFER_BIT
、 GL_DEPTH_BUFFER_BIT
、 GL_STENCIL_BUFFER_BIT
的按位组合)。
因此,根据您的需要,您希望创建 2 QOpenGLFramebufferObject
s 其中一个将包含正在渲染的多采样纹理,一个将包含下采样结果纹理。那么你将使用 QOpenGLFramebufferObject::blitFramebuffer
将源纹理下采样到结果纹理中。
这是一个快速示例:
// MultiSampling set to 4 now
QOpenGLFramebufferObjectFormat muliSampleFormat;
muliSampleFormat.setAttachment(QOpenGLFramebufferObject::CombinedDepthStencil);
muliSampleFormat.setMipmap(true);
muliSampleFormat.setSamples(4);
muliSampleFormat.setTextureTarget(GL_TEXTURE_2D);
muliSampleFormat.setInternalTextureFormat(GL_RGBA32F_ARB);
QOpenGLFramebufferObject multiSampledFBO(width, height, format);
QOpenGLFramebufferObjectFormat downSampledFormat;
downSampledFormat.setAttachment(QOpenGLFramebufferObject::CombinedDepthStencil);
downSampledFormat.setMipmap(true);
downSampledFormat.setTextureTarget(GL_TEXTURE_2D);
downSampledFormat.setInternalTextureFormat(GL_RGBA32F_ARB);
QOpenGLFramebufferObject downSampledFBO(width, height, downSampledFormat);
QOpenGLFramebufferObject::blitFramebuffer(
&downSampledFBO, &multiSampledFBO,
GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT, GL_NEAREST);
关于使用 QOpenGLFrameBufferObject 类的 Qt5 OpenGL 多重采样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12592273/
我想使用 QOpenGLFramebufferObject 渲染到半浮点纹理。我尝试使用以下代码创建 fbo: structureTensorTexture = new QOpenGLFramebuf
当我使用QOpenGLFramebufferObject 时,我遇到了深度测试不工作的问题。 但是,如果我使用 glBlitFramebuffer 将默认帧缓冲区复制到 QOpenGLFramebuf
我正在尝试使用此示例从 QOpenGLFramebufferObject 创建一个 QImage: https://dangelog.wordpress.com/2013/02/10/using-fb
我遇到一个问题,OpenGL 场景的深度渲染不正确。我正在对 QOpenGLFramebufferObject 进行离屏渲染。如果我在 QGLWidget 中运行相同的代码,它会很好地呈现。这是代码:
我需要在 Qt5 项目中执行多重采样,但我不确定如何使用 QOpenGLFrameBufferObject执行 FSAA。据我搜索,没有关于如何执行此操作的示例,文档仅提到:“如果您想使用启用了多重采
在基于 WinCE 的设备上基于 Qt 5.2.1 小部件的应用程序上进行 native GL 绘图时,我正在尝试对 FBO (QOpenGLFramebufferObject) 的纹理实现抗锯齿效果
我正在尝试将以前的项目移植到新的 Qt5 OpenGL 类中。我想使用 FBO 渲染到纹理。之前的代码使用了多个纹理,我按需将其附加到 FBO。因此,我会附加一个特定的纹理对象,执行渲染,附加另一个纹
我是一名优秀的程序员,十分优秀!