2 charles gz charles_gz 于 2014.02.20 09:43 提问

QML中使用shader编程达到光照效果

在用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;
}
"
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!