ShaderEffectItem 的奇怪 alpha 混合结果

2024-04-13

我正在尝试使用以下方法在 QML 项目上应用简单的 alpha 蒙版ShaderEffectItem.

这是一个最小的(非)工作示例:我有一个从红到白的渐变作为背景,并且想要在其顶部绘制一个绿色的 200x200 正方形。该正方形的 alpha 遮罩左侧边框应为 0.0,右侧边框应为 1.0,因此它的左侧边框应是透明的。

import QtQuick 1.1
import Qt.labs.shaders 1.0

Rectangle {
    width: 300
    height: 300

    id: wrapper

    gradient: Gradient {
        GradientStop { position: 0.0; color: "red" }
        GradientStop { position: 1.0; color: "white" }
    }

    Rectangle {
        id: square
        anchors.centerIn: parent
        width: 200
        height: 200
        color: "green"
    }

    ShaderEffectItem {
        anchors.centerIn: parent
        width: 200
        height: 200

        property variant source: ShaderEffectSource {
            sourceItem: square
            hideSource: true
        }

        fragmentShader: "
        varying vec2 qt_TexCoord0;
        uniform sampler2D source;
        void main(void)
        {
            vec4 sourceColor = texture2D(source, qt_TexCoord0);
            float alpha = qt_TexCoord0.x; // = 0.0 at left, 1.0 at right border
            sourceColor.a *= alpha;       // apply alpha mask
            gl_FragColor = sourceColor;
        }
        "
    }
}

我期望得到以下输出(用 GIMP 绘制):

但实际上是这样显示的:

我究竟做错了什么?

我在用着qml查看器(Qt 4.8.2) 显示 QML 文件-opengl选项以启用着色器效果。

也许这与QGLFramebufferObjects 上的 alpha 混合出现这种奇怪的行为 https://stackoverflow.com/questions/12306894/wrong-alpha-blending-when-rendering-on-a-qglframebufferobject我几周前发现...


尝试将片段着色器的主要功能修改为:

    void main(void)
    {
        gl_FragColor = texture2D(source, qt_TexCoord0).rgba*qt_TexCoord0.x;
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ShaderEffectItem 的奇怪 alpha 混合结果 的相关文章

随机推荐

  • 如何判断一个文件是否可以删除?

    我怎么能够check我可以用Java删除文件吗 例如 如果一个文件test txt在另一个程序中打开我无法删除它 我必须在实际删除之前知道它 所以我不能这样做 if file delete And srcFile canWrite 也不工作
  • 在 ES6 生成器函数中使用 return

    我无法弄清楚如果您使用 return 语句而不是 Yield 会发生什么 function gen const val yield someAsyncFn assert equal val 4 return val 回报率与收益率有何不同
  • Visual Studio代码侧边栏垂直引导线(自定义侧边栏)

    有人知道 Visual Studio 代码的扩展可以像 netbeans 一样在侧边栏 用于文件和文件夹 上显示垂直指南吗 或者vscode中有一些设置吗 Netbeans 快照 https i stack imgur com CFJsw
  • .Net 哪里可以找到 BinaryFormatter 序列化格式的官方规范?

    我想知道BinaryFormatter的序列化格式是什么 我发现这个网站 http primates ximian com lluis dist binary serialization format htm其中提供了一些很好的信息 但它是
  • Applescript 获取正在运行的应用程序列表?

    Applescript 新手问题又来了 我正在尝试创建一个小 applescript 它允许我从当前运行的应用程序列表中选择多个项目 然后退出这些选定的应用程序 像这样的东西是可行的 但不必单击每个对话框 从列表中进行选择会更容易 tell
  • 将 jQuery 脚本与 Angular 6 CLI 项目结合使用

    我正在使用 Angular 6 开发一个应用程序 我的应用程序使用明顿主题 http coderthemes com minton dark index html 我将所有主题脚本包含在index html我的角度项目的文件 但是当我登录或
  • 我们可以使用 python 生成卡方检验的列联表吗?

    我正在使用 scipy stats chi2 contingency 方法来获取卡方统计数据 我们需要传递频率表 即列联表作为参数 但我有一个特征向量 想要自动生成频率表 我们有这样的功能吗 我目前正在这样做 def contigency
  • PHP OOP MySQL 编程

    我是 PHP 编程的初学者 需要帮助解决一个小问题 请看下面的代码 PHP Code
  • Android 8.0 Oreo - 帐户

    在我的应用程序中 我需要知道是否有任何 Google 帐户或任何三星帐户 在 Android 7 之前 可以通过以下方式轻松获取此信息 Account accounts AccountManager get getContext getAc
  • 如果没有结果,如何停止 grep 创建空文件

    我正在比较两个文件的结果 其中一个文件中的行不在另一个文件中 使用grep v f file1 txt file2 txt gt result txt 假设我的文件看起来像 文件1 txt alex peter zoey 文件2 txt a
  • 在 proguard 之后运行 espresso 测试

    我正在寻找一种在 proguard 运行后运行我的 espresso 测试的方法 这应该是一个针对配置错误的 proguard 的安全网 只是在将 butterknife 更新到 7 0 后忘记更新 proguard 配置 假设您使用 An
  • 垂直对齐:基线在 Chrome 中不起作用

    老实说 我有一个非常愚蠢的问题 不管怎样 就到这里吧 我一直在尝试使用垂直对齐 基线 这本身就起作用 问题是它可以在 IE 和 Firefox 中运行 我的问题是 由于某些奇怪的原因 它在 Chrome 中不起作用 chrome 中问题的屏
  • 正则表达式用标签包装文本[重复]

    这个问题在这里已经有答案了 我需要一个 JavaScript 正则表达式来包装 hashtags span tags Example 之前 我需要 help 请 Thanks 之后 我需要 span help span 请 span Tha
  • Spring Boot 注解 @GetMapping 无法解析为类型

    我第一次尝试在本地计算机上从 Spring Initializr 创建 Spring 项目 但我收到这些错误 GetMapping 无法解析为类型 我的 pom xml 文件
  • C++ 可变参数模板 匹配任何类型参数的模板实参

    我想知道是否可以编写一个模板函数 该函数可以将任何其他任意模板作为参数并正确匹配模板名称 即不仅仅是结果类 我所知道的工作是这样的 template
  • 如何围绕 WPF 中的特定点旋转、平移和缩放控制对象

    我有一个自定义的控件 它是一个矩形 里面有一些细节 但它是一个矩形 我有一个中心点 X Y 我称之为 重心 它 代表 该点 这意味着当我为对象设置新位置时 我希望该点位于设置的位置 当我旋转对象时 我需要它围绕该点旋转 当我缩放对象时 该点
  • 我应该在 MVP(或 VM)中对我的视图进行单元测试,或者如何将视图中的代码保持在最低限度?

    我在应用程序中使用模型 视图 表示模型 我想知道是否需要为视图创建单元测试 我使用的是 net 2 0 WinForms 现在 通常视图应该非常简单 以至于没有必要为其创建单元测试 至少这是我从视图与表示模型 PM 分离的目标中得到的想法
  • Ruby 中的大乘法输出结果为负

    我写了一些代码 应该对 1 sum 0 1 1000 each do n sum n n puts n n sum sum end 由于某种原因 在数字 28 之后输出为负值 n 29 sum 20154009777005735238923
  • 在表单视图中设置当前日期

    我想将当前日期放入表单视图 dateadded 中 但当我将其加载到浏览器中时它没有显示 我正在使用后台代码 但如何显示日期和时间 这是我后面的代码 using System using System Collections Generic
  • ShaderEffectItem 的奇怪 alpha 混合结果

    我正在尝试使用以下方法在 QML 项目上应用简单的 alpha 蒙版ShaderEffectItem 这是一个最小的 非 工作示例 我有一个从红到白的渐变作为背景 并且想要在其顶部绘制一个绿色的 200x200 正方形 该正方形的 alph