在用QML做界面工作,现在有个需求是灯光效果参照digia公司的例子做的修改(图片在这还没弄明白怎么上传,后面的网址上有图片信息:http://bbs.csdn.net/topics/390712006),
最终要达到的效果是图片中红色矩形框不要,只要里面的黄色区域的光点。也就是说在窗口中有个pathView光点直接打到pathView的每个item上。
这个需求是否可以做到?应该怎么做?
当然铺满全屏看上去就没有矩形框了,但是那样使得界面内所有的内容颜色变白。小弟第一次接触shader编程希望做过的朋友给予指点,谢谢了!
目前的代码如下:
fragmentShader: "
varying highp vec2 qt_TexCoord0;
uniform highp float qt_Opacity;
uniform highp float _lightPosX;
uniform highp float _lightPosY;
uniform highp float diffuseBoost;
uniform highp float lightIntensity;
uniform highp vec4 colorizeColor;
uniform bool switchX;
uniform bool switchY;
void main(void)
{
highp vec2 pixPos = qt_TexCoord0;
highp vec3 normal = normalize(vec3(0.0,0.0,1.0));
highp float xp = float(switchX) * (_lightPosX - pixPos.x) + float(!switchX) * (pixPos.x - _lightPosX);
highp float yp = float(switchY) * (_lightPosY - pixPos.y) + float(!switchY) * (pixPos.y - _lightPosY);
highp vec3 light_pos = normalize(vec3(xp, yp, 0.03));
highp float diffuse = max(dot(normal, light_pos), 0.2);
highp vec4 color = vec4(diffuse *vec3(1.0,1.0,1.0), 0.0);
gl_FragColor = color * qt_Opacity;
}
"