遵循发现的示例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