QMultiSampleAntiAliasing Class
class Qt3DRender::QMultiSampleAntiAliasingMultisample-Antialiasing einschalten. Mehr...
Kopfzeile: | #include <QMultiSampleAntiAliasing> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS 3drender) target_link_libraries(mytarget PRIVATE Qt6::3drender) |
qmake: | QT += 3drender |
In QML: | MultiSampleAntiAliasing |
Vererbt: | Qt3DRender::QRenderState |
Status: | Veraltet |
Öffentliche Funktionen
QMultiSampleAntiAliasing(Qt3DCore::QNode *parent = nullptr) |
Detaillierte Beschreibung
Die Klasse Qt3DRender::QMultiSampleAntiAliasing ermöglicht Multisample-Antialiasing.
Sie kann zu einer QRenderPass durch Aufruf von QRenderPass::addRenderState() hinzugefügt werden:
QRenderPass *renderPass = new QRenderPass(); QMultiSampleAntiAliasing *msaa = new QMultiSampleAntiAliasing(); renderPass->addRenderState(msaa);
Oder einer QRenderStateSet durch Aufruf von QRenderStateSet::addRenderState():
QRenderStateSet *renderStateSet = new QRenderStateSet(); QMultiSampleAntiAliasing *msaa = new QMultiSampleAntiAliasing(); renderStateSet->addRenderState(msaa);
Damit Multisampling wirksam wird, muss das Rendering-Ziel mit aktiviertem Multisampling zugewiesen worden sein:
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);
Außerdem muss der Shader-Code Multisampling-Sampler-Typen und texelFetch() anstelle von texture() verwenden.
Wenn Sie zum Beispiel einen Code wie
#version 150 uniform sampler2D colorTexture; in vec2 texCoord; out vec4 fragColor; void main() { fragColor = texture(colorTexture, texCoord); }
haben, können Sie ihn umschreiben als
#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; }
Hinweis: Bei Verwendung von OpenGL als Grafik-API wird glEnable(GL_MULTISAMPLE) aufgerufen, wenn QMultiSampleAntiAliasing zu den Rendering-States hinzugefügt wurde.
Dokumentation der Mitgliedsfunktionen
[explicit]
QMultiSampleAntiAliasing::QMultiSampleAntiAliasing(Qt3DCore::QNode *parent = nullptr)
Der Konstruktor erstellt eine neue QMultiSampleAntiAliasing::QMultiSampleAntiAliasing Instanz mit der angegebenen parent.
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.