Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt/QML/OpenGL:Z-排序不';t在QML下使用OpenGL处理半透明项_C++_Qt_Opengl_Qml - Fatal编程技术网

C++ Qt/QML/OpenGL:Z-排序不';t在QML下使用OpenGL处理半透明项

C++ Qt/QML/OpenGL:Z-排序不';t在QML下使用OpenGL处理半透明项,c++,qt,opengl,qml,C++,Qt,Opengl,Qml,我们一直在遵循发现的示例,并且存在一个问题,即半透明项始终绘制在不透明项的顶部,而不管它们在QML中的顺序或z属性是如何设置的 没有OpenGL项,一切都按预期进行 import QtQuick 2.14 import TestScene 1.0 Item { width: 160 height: 120 /* TestScene { // draw checkered pattern in OpenGL } */ R

我们一直在遵循发现的示例,并且存在一个问题,即半透明项始终绘制在不透明项的顶部,而不管它们在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项的注释时

结果

即使在rect1之前设置了rect2,也会发生这种情况,而与任一项的z属性无关

C++中的OpenGL代码与示例类似,在Windows 10和Qt 5.14上。


只是好奇为什么会发生这种情况,以及它是否可以预防,或者它只是在QML下绘制OpenGL的一个限制。

看看QOpenGLFrameBuffer

它允许对基于opengl的项在QML场景图中的位置进行细粒度控制,而不是使用您正在使用的技术,我相信它允许在渲染其余QML场景图项之前或之后渲染自定义opengl项

有一个样本项目位于:
qt\Examples\$QTVERSION\quick\scenegraph\textureinsgnode

我尝试研究这个问题,但没有找到任何关于将QOpenGLFramebufferObject与QQuickItem一起使用的信息,我的qt Examples目录(Qt5.14.1\Examples\qt-5.14.1\quick\scenegraph)没有“textureinsgnode”示例。然而,我确实发现这是关于QQuickFramebufferObject的,它似乎是“QML下的OpenGL”示例的替代品。谢谢你给我指出了一个不同的方向,因为如果没有这篇文章,我可能不会发现这一点