【问题标题】:Qt3D QML Read FBOQt3D QML 读取 FBO
【发布时间】:2017-05-28 01:27:05
【问题描述】:

我想知道是否可以从 Qt3D 中的 FBO 读取数据?我有 2 个渲染通道,一个保存在纹理中,另一个渲染在屏幕上。我想从纹理中读取像素,但到目前为止我还没有运气。

不胜感激!

编辑:这是阴影贴图示例中的 RenderSettings 对象的一些代码。我要做的是在 pass 之后读取 shadowmapTexture 的某个位置。例如,鼠标在某个 x,y 位置单击后,读取同一 x,y 位置上的 Texture2D 的数据。

property alias viewCamera: viewCameraSelector.camera
property alias lightCamera: lightCameraSelector.camera
readonly property Texture2D shadowTexture: depthTexture

activeFrameGraph: Viewport {
    normalizedRect: Qt.rect(0.0, 0.0, 1.0, 1.0)

    RenderSurfaceSelector {
        RenderPassFilter {
            matchAny: [ FilterKey { name: "pass"; value: "shadowmap" } ]

           RenderTargetSelector {
                target: RenderTarget {
                    attachments: [
                        RenderTargetOutput {
                            objectName: "depth"
                            attachmentPoint: RenderTargetOutput.Depth
                            texture: Texture2D {
                                id: depthTexture
                                width: 1024
                                height: 1024
                                format: Texture.DepthFormat
                                generateMipMaps: false
                                magnificationFilter: Texture.Linear
                                minificationFilter: Texture.Linear
                                wrapMode {
                                    x: WrapMode.ClampToEdge
                                    y: WrapMode.ClampToEdge
                                }
                                comparisonFunction: Texture.CompareLessEqual
                                comparisonMode: Texture.CompareRefToTexture
                            }
                        }
                    ]
                }

                ClearBuffers {
                    buffers: ClearBuffers.DepthBuffer

                    CameraSelector {
                        id: lightCameraSelector
                    }
                }
            }
        }

        RenderPassFilter {
            matchAny: [ FilterKey { name: "pass"; value: "forward" } ]

            ClearBuffers {
                clearColor: Qt.rgba(0.0, 0.4, 0.7, 1.0)
                buffers: ClearBuffers.ColorDepthBuffer

                CameraSelector {
                    id: viewCameraSelector
                }
            }
        }
    }
}

【问题讨论】:

  • 你能提供一些描述问题的代码吗?
  • 我已经添加了一些代码和我想要做的更详细的描述

标签: qt qml qt3d


【解决方案1】:

使用 RayCasterScreenRayCaster 它为您提供本地位置和世界位置以及屏幕 x , y 参见 kdab 中的this site 及其示例

RenderSettings{
    
    //all components that you need like viewport , InputSettings ,...
    
    ScreenRayCaster {
        id: screenRayCaster
        
        onHitsChanged: printHits("Screen hits", hits)
    }
}

MouseHandler {
    id: mouseHandler
    sourceDevice:  MouseDevice {}
    onReleased: { screenRayCaster.trigger(Qt.point(mouse.x, mouse.y)) }
}

function printHits(desc, hits) {
    console.log(desc, hits.length)
    for (var i=0; i<hits.length; i++) {
        console.log("  " + hits[i].entity.objectName, hits[i].distance,
                    hits[i].worldIntersection.x, hits[i].worldIntersection.y, hits[i].worldIntersection.z)
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-04
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多