Qt 5.5 的 Qt3D 示例中的 ForwardRenderer 是啥?

Posted

技术标签:

【中文标题】Qt 5.5 的 Qt3D 示例中的 ForwardRenderer 是啥?【英文标题】:What is ForwardRenderer in Qt 5.5's Qt3D examples?Qt 5.5 的 Qt3D 示例中的 ForwardRenderer 是什么? 【发布时间】:2015-11-18 06:34:59 【问题描述】:

Assimp example of Qt3d of Qt 5.5 uses ForwardRenderer.

我复制了代码,并在main.qml QtCreator 中显示该名称下的红线表示未知组件。点击那个词不会带我去任何地方。

程序正在编译,没有任何错误,运行时只显示一个蓝色窗口。

什么是 ForwardRenderer? 为什么会有红线?

【问题讨论】:

【参考方案1】:

这是 Qt 网站上的正向渲染器文件:

https://doc.qt.io/archives/qt-5.6/qt3d-dynamicscene-cpp-forwardrenderer-H.html

https://doc.qt.io/archives/qt-5.6/qt3d-dynamicscene-cpp-forwardrenderer-cpp.html

以下是 KDAB 的解释,什么是 FrameGraph 以及它如何处理 Forward Renderer:http://www.kdab.com/qt3d-2-0-framegraph/

ForwardRenderer 本身不是 FrameGraph 节点类型。它是为方便用户而提供的前向渲染器的默认 FrameGraph 树实现。

更新:手动重新创建

通过检查 C++,我能够完全在 QML 中重新创建 ForwardRenderer

    // FwdRenderer.qml
    RenderSettings 
        id: forward
        property Camera camera: null
        activeFrameGraph: TechniqueFilter 
            matchAll: [ FilterKey  name: "renderingStyle"; value: "forward"  ]
            RenderSurfaceSelector
                Viewport 
                    normalizedRect: Qt.rect(0,0,1,1)
                    CameraSelector
                        camera: forward.camera
                        ClearBuffers
                            buffers: ClearBuffers.ColorDepthBuffer
                            clearColor: Qt.rgba(1.0,0,0,0.1)
                        
                        FrustumCulling
                        
                    
                
            
        
    

事实上,这有点酷。新类型FwdRenderer 可以直接替代ForwardRenderer。它对我理解 Framegraph 有很大帮助,希望对您有所帮助。

顺便说一句,红线是那个版本的 Qt Creator 中的一个错误。不应将其标记为错误。

【讨论】:

以上是关于Qt 5.5 的 Qt3D 示例中的 ForwardRenderer 是啥?的主要内容,如果未能解决你的问题,请参考以下文章

QT3D Multiview - 小部件中的单一视图

Qt3d QML:如何将文本作为覆盖添加到标准示例

windows下为android部署qt3d项目

Qt3D QtQuick Scene2D 使用 C++

Qt3D SceneLoader 实体未呈现

qt3d窗口内的Qt小部件