【发布时间】:2015-04-22 07:04:51
【问题描述】:
我正在尝试使用 ShaderEffectItem 在 QML 项目上应用简单的 alpha 掩码。
这是一个最小(非)工作示例:我有一个从红到白的渐变作为背景,并想在其上绘制一个绿色的 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 绘制):
但这实际上是显示出来的:
我做错了什么?
我正在使用 qmlviewer (Qt 4.8.2) 显示带有 -opengl 选项的 QML 文件,以启用着色器效果。
也许这与我几周前发现的this strange behavior with alpha blending on QGLFramebufferObjects 有关...
【问题讨论】:
标签: qt glsl qml alphablending