簡體   English   中英

Qt/QML/OpenGL:Z 排序不適用於 QML 下帶有 OpenGL 的半透明項目

[英]Qt/QML/OpenGL: Z-ordering doesn't work with semi-transparent items with OpenGL under QML

一直在關注此處找到的示例,但遇到了一個問題,即無論半透明項目在 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM