Shader编程初识,基础关键

Rectangle {
    id:root
    width: 1024
    height: 640
    color: "blue"
    Image	{
        id:	sourceImage
        width:	1024;	height:	640
        source:	"qrc:/3.jpg"
        visible: false
    }

    ShaderEffect {
                width: 1024; height: 640
                property variant source: sourceImage
                property real frequency: 8
                property real amplitude: 0.5  //振幅
                property real time: 0.0
                NumberAnimation on time {
                    from: 0; to: Math.PI*2; duration: 1000; loops: Animation.Infinite
                }

                fragmentShader: "
                    varying highp vec2 qt_TexCoord0;
                    uniform sampler2D source;
                    uniform lowp float qt_Opacity;
                    uniform highp float frequency;
                    uniform highp float amplitude;
                    uniform highp float time;
                    void main() {
                        highp vec2 pulse = sin(2.0*3.141592654* qt_TexCoord0);//纹理坐标0-1之间有很多像素,
                        highp vec2 coord = qt_TexCoord0 +  vec2(0, amplitude*pulse.x);//0-1之间有很多像素,
//                        highp vec2 coord = qt_TexCoord0 +  vec2(amplitude*pulse.y, 0);//0-1之间有很多像素,
                        gl_FragColor = texture2D(source, coord) * qt_Opacity;
                    }"
            }// amplitude * vec2(pulse.x, pulse.x)   highp vec2 pulse = sin(time - frequency * qt_TexCoord0); amplitude*pulse.x
//    highp vec2 pulse = sin(time- 2.0*3.141592654* qt_TexCoord0);
//    highp vec2 coord = qt_TexCoord0 +  vec2(0, amplitude*pulse.x);
}

highp vec2 coord = qt_TexCoord0 +  vec2(0, amplitude*pulse.x) 能显示波浪效果

因为x方向上的纹理坐标不变的,当在x方向的不同 坐标下,y的坐标有sin形状波浪效果.

如果改成

highp vec2 coord = qt_TexCoord0 +  vec2(0, amplitude*pulse.y) 没有波浪效果

因为纹理坐标y变化的时候,pulse.y也是变化的在sin()图像上会出现两段不在[0-1]范围内的,显示边界像素了,

这样在sin[0.2Pi]就出现了三段在[0,1]范围之内的,所以出现了三个同样的图像

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值