Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.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
Qt ShaderEffectItem的奇怪alpha混合结果_Qt_Glsl_Qml_Alphablending - Fatal编程技术网

Qt ShaderEffectItem的奇怪alpha混合结果

Qt ShaderEffectItem的奇怪alpha混合结果,qt,glsl,qml,alphablending,Qt,Glsl,Qml,Alphablending,我正在尝试使用ShaderEffectItem在QML项上应用一个简单的alpha掩码 这里是一个最小的(非)工作示例:我有一个从红色到白色的渐变作为背景,并希望在其上绘制一个绿色200x200正方形。该正方形的alpha遮罩在左边框处应为0.0,在右边框处应为1.0,因此它在左边框处应是透明的 导入QtQuick 1.1 导入Qt.labs.shaders 1.0 长方形{ 宽度:300 身高:300 id:包装器 梯度:梯度{ 渐变停止{位置:0.0;颜色:“红色”} 渐变停止{位置:1.0

我正在尝试使用
ShaderEffectItem
在QML项上应用一个简单的alpha掩码

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

导入QtQuick 1.1
导入Qt.labs.shaders 1.0
长方形{
宽度:300
身高:300
id:包装器
梯度:梯度{
渐变停止{位置:0.0;颜色:“红色”}
渐变停止{位置:1.0;颜色:“白色”}
}
长方形{
id:正方形
anchors.centerIn:父对象
宽度:200
身高:200
颜色:“绿色”
}
ShaderEffectItem{
anchors.centerIn:父对象
宽度:200
身高:200
属性变量源:ShaderEffectSource{
资料来源:square
隐藏来源:对
}
碎片着色器:“
可变向量2 qt_TexCoord0;
均匀采样源;
真空总管(真空)
{
vec4 sourceColor=texture2D(source,qt_TexCoord0);
float alpha=qt_TexCoord0.x;//=0.0在左侧,1.0在右侧边框
sourceColor.a*=alpha;//应用alpha掩码
gl_FragColor=源颜色;
}
"
}
}
我期望得到以下输出(使用GIMP绘制):

但事实证明:

我做错了什么

我正在使用qmlviewer(Qt 4.8.2)显示带有
-opengl
选项的QML文件,以便启用着色器效果


可能这与我几周前发现的有关…

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

    void main(void)
    {
        gl_FragColor = texture2D(source, qt_TexCoord0).rgba*qt_TexCoord0.x;
    }

是的,谢谢。刚刚意识到Qt使用的是预先倍增的颜色。你可以把这个加到你的答案中,作为我们为什么要乘以所有颜色成分,而不仅仅是alpha值,如果我们想应用alpha蒙版。