Qt 3D渲染高级技巧
为了渲染最简单的形状,Qt 3D需要在多个阶段执行各种操作。任何阶段出现问题,最坏的情况可能会出现黑屏。
技术选择
Qt 3D提供了一种技术选择机制,允许您为各种渲染API及其版本提供着色器。
为了避免浪费您的时间,请确保您的技术API过滤器数据适合您要针对的平台。
顺序很重要
渲染器执行绘图调用时的顺序不一定与场景中实体的顺序相同。
渲染器试图优化发送到图形API的调用。它根据使用的材质/着色器、给定材质定义的渲染状态、它们的深度、两个材质之间的共享参数等来排列绘图调用。
如果您的渲染依赖于特定的绘图顺序,您应该有几个选项
- 在帧图中使用Qt3DRender::QLayer组件和Qt3DRender::QLayerFilter进行过滤
- 使用RenderPass或使用帧图中的Qt3DRender::QRenderPassFilter或Qt3DRender::QTechniqueFilter进行技术过滤
融合
掌握融合的适当参数和函数本身就是一门艺术。因此,获得正确的视觉结果常常是成功的可能性。
Anders Riggelsen的在线可视化器可能会帮助您找出哪些参数和函数对您有效。
融合与Scene3D
当通过Qt Quick场景中的Scene3D元素渲染Qt 3D场景时,您应该知道您可能需要调整渲染状态的融合参数以获得合理的渲染。这是因为在Qt 3D将场景首先渲染到离屏纹理中,然后将其与Qt Quick场景的其余部分融合。
合理的值通常是源alpha为Qt3DRender::QBlendEquationArguments::Zero,目标alpha为Qt3DRender::QBlendEquationArguments::One。
有用的工具
鉴于Qt 3D初期版本的调试限制相对较少,有时有所帮助的工具可以捕获OpenGL绘图调用并获得更多有关发生情况的线索
这些工具允许您收集Qt 3D应用程序中发出的所有OpenGL调用的痕迹。查看生成的跟踪文件可以帮助您验证是否创建了绘图调用,是否正确上传了纹理,是否设置了正确的uniform值...
以后版本中计划对Qt 3D工具进行改进。
© 2024 Qt公司有限公司。本文档中包含的文档贡献为各自所有者的版权。所提供的文档根据由自由软件基金会发布的GNU自由文档许可证1.3版的条款进行许可。Qt及其相关标志是芬兰的Qt公司及其在全世界其他国家的商标。商标。所有其他商标均为各自所有者的财产。