C++ Qt/QML/OpenGL:Z-排序不';t在QML下使用OpenGL处理半透明项
我们一直在遵循发现的示例,并且存在一个问题,即半透明项始终绘制在不透明项的顶部,而不管它们在QML中的顺序或z属性是如何设置的 没有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
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”示例的替代品。谢谢你给我指出了一个不同的方向,因为如果没有这篇文章,我可能不会发现这一点