Enable multisample antialiasing. 更多...
import 语句: | import Qt3D.Render 2.12 |
Since: | Qt 5.7 |
实例化: | QMultiSampleAntiAliasing |
继承: | RenderState |
A MultiSampleAntiAliasing type enables multisample antialiasing.
It can be added to a RenderPass :
RenderPass { shaderProgram: ShaderProgram { // ... } renderStates: [ MultiSampleAntiAliasing {} ] }
Or a RenderStateSet :
RenderStateSet { renderStates: [ MultiSampleAntiAliasing {} ] }
For multisampling to take effect, the render target must have been allocated with multisampling enabled:
RenderTarget { attachments: [ RenderTargetOutput { attachmentPoint: RenderTargetOutput.Color0 texture: Texture2DMultisample { width: 1024 height: 1024 format: Texture.RGBA8_UNorm } }, RenderTargetOutput { attachmentPoint: RenderTargetOutput.DepthStencil texture: Texture2DMultisample{ width: 1024 height: 1024 format: Texture.D24S8 } } ] }
Further, the shader code must use multisampling sampler types and texelFetch() instead of texture().
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 MultiSampleAntiAliasing has been added to the render states.