QMultiSampleAntiAliasing 类
class Qt3DRender::QMultiSampleAntiAliasing启用多采样抗锯齿。 更多...
头文件 | #include <QMultiSampleAntiAliasing> |
CMake | find_package(Qt6 REQUIRED COMPONENTS 3drender) target_link_libraries(mytarget PRIVATE Qt6::3drender) |
qmake | QT += 3drender |
实例化 | MultiSampleAntiAliasing |
继承自 | Qt3DRender::QRenderState |
公共函数
QMultiSampleAntiAliasing(Qt3DCore::QNode *parent = nullptr) |
详细描述
Qt3DRender::QMultiSampleAntiAliasing 类启用多采样抗锯齿。
可以通过调用 QRenderPass::addRenderState() 将其添加到 QRenderPass
QRenderPass *renderPass = new QRenderPass(); QMultiSampleAntiAliasing *msaa = new QMultiSampleAntiAliasing(); renderPass->addRenderState(msaa);
或通过调用 QRenderStateSet::addRenderState() 添加到 QRenderStateSet
QRenderStateSet *renderStateSet = new QRenderStateSet(); QMultiSampleAntiAliasing *msaa = new QMultiSampleAntiAliasing(); renderStateSet->addRenderState(msaa);
为了使多采样生效,渲染目标必须在启用多采样的情况下分配
QTexture2DMultisample *colorTex = new QTexture2DMultisample; colorTex->setFormat(QAbstractTexture::RGBA8_UNorm); colorTex->setWidth(1024); colorTex->setHeight(1024); QRenderTargetOutput *color = new QRenderTargetOutput; color->setAttachmentPoint(QRenderTargetOutput::Color0); color->setTexture(colorTex); QTexture2DMultisample *depthStencilTex = new QTexture2DMultisample; depthStencilTex->setFormat(QAbstractTexture::RGBA8_UNorm); depthStencilTex->setWidth(1024); depthStencilTex->setHeight(1024); QRenderTargetOutput *depthStencil = new QRenderTargetOutput; depthStencil->setAttachmentPoint(QRenderTargetOutput::DepthStencil); depthStencil->setTexture(depthStencilTex); Qt3DRender::QRenderTarget *renderTarget = new Qt3DRender::QRenderTarget; renderTarget->addOutput(color); renderTarget->addOutput(depthStencil);
此外,着色器代码必须使用多采样采样器类型和 texelFetch() 而不是 texture()
例如,如果有以下代码
#version 150 uniform sampler2D colorTexture; in vec2 texCoord; out vec4 fragColor; void main() { fragColor = texture(colorTexture, texCoord); }
可以重新编写为
#version 150 uniform sampler2DMS colorTexture; in vec2 texCoord; out vec4 fragColor; void main() { ivec2 tc = ivec2(floor(textureSize(colorTexture) * texCoord)); vec4 c = texelFetch(colorTexture, tc, 0) + texelFetch(colorTexture, tc, 1) + texelFetch(colorTexture, tc, 2) + texelFetch(colorTexture, tc, 3); fragColor = c / 4.0; }
注意:当使用 OpenGL 作为图形 API 时,如果在渲染状态中添加了 QMultiSampleAntiAliasing,将调用 glEnable(GL_MULTISAMPLE)
成员函数文档
[显式]
QMultiSampleAntiAliasing::QMultiSampleAntiAliasing(Qt3DCore::QNode *parent = nullptr)
构造函数使用指定的 parent 创建一个新的 QMultiSampleAntiAliasing::QMultiSampleAntiAliasing 实例。
© 2024 The Qt Company Ltd. 包含在此处的文档贡献归其各自的所有者所有。本提供在此处的文档根据自由软件基金会发布的 GNU 自由文档许可证版本 1.3 的条款许可。Qt 和相应的徽标是 The Qt Company Ltd. 在芬兰和/或全球其他国家的商标。所有其他商标均为其各自所有者的财产。