QMultiSampleAntiAliasing 类

class Qt3DRender::QMultiSampleAntiAliasing

启用多采样抗锯齿。 更多...

头文件 #include <QMultiSampleAntiAliasing>
CMakefind_package(Qt6 REQUIRED COMPONENTS 3drender)
target_link_libraries(mytarget PRIVATE Qt6::3drender)
qmakeQT += 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. 在芬兰和/或全球其他国家的商标。所有其他商标均为其各自所有者的财产。