遵循发现的示例here并存在一个问题,即无论半透明项目在QML中的顺序如何或如何设置z属性,都始终在不透明项目的顶部绘制半透明项目。

没有OpenGL项目,一切正常

import QtQuick 2.14
import TestScene 1.0

Item {
    width: 160
    height: 120

    /*
    TestScene {
        // draw checkered pattern in OpenGL
    }
    */

    Rectangle {
        id: rect1

        x: 32
        y: 32
        width: 32
        height: 32

        color: Qt.rgba(1, 0, 0, 0.5)
    }

    Rectangle {
        id: rect2

        x: 32+16
        y: 32+16
        width: 32
        height: 32

        color: Qt.rgba(0, 0, 1, 1)
    }
}

想要的

取消注释TestScene项时

结果

即使将rect2设置在rect1之前并且无论哪个项目的z属性如何,都会发生这种情况。

C++中的OpenGL代码几乎与Squircle示例相同,这是在Windows 10和Qt 5.14上。

只是好奇为什么会发生这种情况,以及是否可以避免这种情况,或者这仅仅是在QML下绘制OpenGL的限制。

最佳答案

看看QOpenGLFrameBuffer。

https://doc.qt.io/qt-5/qopenglframebufferobject.html

与您使用的技术相比,它可以对基于opengl的项目在QML场景图中的位置进行精细控制,我相信该技术可以在渲染其余的QML场景图项目之前或之后渲染自定义的opengl项目。

在以下位置有一个示例项目:
qt \ Examples \ $ QTVERSION \ quick \ scenegraph \ textureinsgnode

07-28 01:32
查看更多