QMultiSampleAntiAliasing Class

class Qt3DRender ::QMultiSampleAntiAliasing

Enable multisample antialiasing. 更多...

头: #include <QMultiSampleAntiAliasing>
CMake: find_package(Qt6 COMPONENTS 3drender REQUIRED)
target_link_libraries(mytarget PRIVATE Qt6::3drender)
qmake: QT += 3drender
Since: Qt 5.7
实例化: MultiSampleAntiAliasing
继承: Qt3DRender::QRenderState

公共函数

  QMultiSampleAntiAliasing (Qt3DCore::QNode * parent = nullptr)

详细描述

A Qt3DRender::QMultiSampleAntiAliasing class enables multisample antialiasing.

It can be added to a QRenderPass 通过调用 QRenderPass::addRenderState ():

QRenderPass *renderPass = new QRenderPass();
QMultiSampleAntiAliasing *msaa = new QMultiSampleAntiAliasing();
renderPass->addRenderState(msaa);
					

Or a QRenderStateSet 通过调用 QRenderStateSet::addRenderState ():

QRenderStateSet *renderStateSet = new QRenderStateSet();
QMultiSampleAntiAliasing *msaa = new QMultiSampleAntiAliasing();
renderStateSet->addRenderState(msaa);
					

For multisampling to take effect, the render target must have been allocated with multisampling enabled:

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

Further, the shader code must use multisampling sampler types and texelFetch() instead of 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;
}
					

注意: When using OpenGL as the graphics API, glEnable(GL_MULTISAMPLE) will be called if QMultiSampleAntiAliasing has been added to the render states.

成员函数文档编制

QMultiSampleAntiAliasing:: QMultiSampleAntiAliasing ( Qt3DCore::QNode * parent = nullptr)

The constructor creates a new QMultiSampleAntiAliasing::QMultiSampleAntiAliasing instance with the specified parent .