qtquick2 - RenderPass 在 Qt3D 中是如何工作的
问题描述
在给定的代码中,RenderPass 和 filterKeys 有什么用,它是如何工作的?
过滤键{名称:“通过”;值:“阴影贴图”}
在上面的语句中,谁使用了这些名称和值?
Technique {
graphicsApiFilter {
api: GraphicsApiFilter.OpenGL
profile: GraphicsApiFilter.CoreProfile
majorVersion: 3
minorVersion: 2
}
renderPasses: [
RenderPass {
filterKeys: [ FilterKey { name: "pass"; value: "shadowmap" } ]
shaderProgram: ShaderProgram {
vertexShaderCode: loadSource("qrc:/shaders/shadowmap.vert")
fragmentShaderCode: loadSource("qrc:/shaders/shadowmap.frag")
}
renderStates: [
PolygonOffset { scaleFactor: 4; depthSteps: 4 },
DepthTest { depthFunction: DepthTest.Less }
]
},
RenderPass {
filterKeys: [ FilterKey { name : "pass"; value : "forward" } ]
shaderProgram: ShaderProgram {
vertexShaderCode: loadSource("qrc:/shaders/ads.vert")
fragmentShaderCode: loadSource("qrc:/shaders/ads.frag")
}
// no special render state set => use the default set of states
}
]
}
解决方案
过滤器键需要与框架图中RenderPassFilter中的相应过滤器键匹配。
例如,如果您想要一个仅使用前向传递中指定的着色器进行渲染的帧图,您可以编写如下内容:
RenderSettings{
activeFrameGraph: Viewport {
RenderPassFilter {
matchAny: [FilterKey { name: "pass"; value: "forward" }]
RenderSurfaceSelector {
ClearBuffers {
}
}
}
}
}
您可以在同一个框架图中拥有多个 RenderPassFilter。这允许您使用不同的着色器渲染相同的场景,例如在不同的视口中显示具有不同效果的场景,或者绘制到不同的纹理并在最终通道中将它们混合在一起。
推荐阅读
- javascript - 节点 js 变量不会停留在 https 请求之外
- javascript - 未捕获的 ReferenceError: MarkerWithLabel 未定义 jQuery
- prometheus - Prometheus 选择性地抑制警报
- css - 导航栏垂直和居中对齐文本
- android - 应用程序返回前台时不显示 PIN 屏幕
- angular - 使用 nzShowSizeChanger 时,Ng ZORRO 分页更改 UI 中的“页面”字样
- node.js - 未能将助记词转换为 solana 钱包的种子
- ios - 如何通过 ms-outlook:// url 方案在 Outlook 中创建全天事件
- c++ - 我没看到什么?我对 recv 函数的理解是错误的,还是这个 while 循环做了一些意想不到的事情?
- python - bert-serving-start:jupyter 上的无效语法