zoukankan      html  css  js  c++  java
  • 简单shader学习之镜面流光效果实现

    主要还是参考网上的链接,进行流光效果的实现,这个demo的流光效果移动是根据一次函数的关系式的,刚开始接触shader很多都看不懂,学习中。

    具体代码(lua脚本语言编写):
    local vert = [[
            attribute vec4 a_position; 
            attribute vec2 a_texCoord; 
            attribute vec4 a_color; 
            #ifdef GL_ES  
            varying lowp vec4 v_fragmentColor;
            varying mediump vec2 v_texCoord;
            #else         
            varying vec4 v_fragmentColor; 
            varying vec2 v_texCoord;  
            #endif 
            void main() 
            {
                gl_Position = CC_PMatrix * a_position; 
                v_fragmentColor = a_color;
                v_texCoord = a_texCoord;
            }
        ]]
    
        local frag = [[
            #ifdef GL_ES 
            precision mediump float; 
            #endif 
            varying vec2 v_texCoord;
            uniform float sys_time;
            void main()
            {
                vec4 src_color = texture2D(CC_Texture0, v_texCoord).rgba;
                float width = 0.2;
                float start = sys_time * 1.2;
                float strength = 0.1;
                float offset = 0.2;
                
                if( v_texCoord.x < (start - offset * v_texCoord.y) &&  v_texCoord.x > (start - offset * v_texCoord.y - width))
                {
                    vec3 improve = strength * vec3(255, 255, 255);
                    vec3 result = improve * vec3( src_color.r, src_color.g, src_color.b);
                    gl_FragColor = vec4(result, src_color.a);
    
                } else {
                    gl_FragColor = src_color;
                }
            }
        ]]  
        -- 
        local time = 0
        local sin = math.sin(time)
        local glProgram = cc.GLProgram:createWithByteArrays(vert, frag)   
        bg:setGLProgram(glProgram)   
        -- 传入模糊中心点,以左上角为(0,0)坐标,x轴向右为正,y轴向下为正
        bg:setProgramFloat("sys_time", sin)  
        -- 每次迭代的值(可自行调整)
        local delta = 1/10
        -- 由清晰变模糊(从0开始递增,公式可以优化)
        A.cycle({    
            {"delay",delta},  
            {"fn",function ()
                bg:setProgramFloat("sys_time", sin)  
                time = time + delta * 2
                sin = math.sin(time)
                if sin > 0.99 then
                    sin = 0;
                    time = 0;
                end
            end},
    
        }, 300):at(bg)
    

     效果图:

    参考链接:

    https://xulidong.blog.csdn.net/article/details/79942979?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-6.base&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-6.base

     

     
  • 相关阅读:
    gcc 不同平台不同宏写法 Function Multiversioning
    linux win10 挂载 C盘 系统盘 ntfs 问题 休眠 快速启动关闭了
    archlinux wine
    ssm批量操作易错点
    行政区划代码
    ssm获取session
    layui 批量删除点击不起作用
    layui分页失效问题
    java 获取服务器配置信息【使用sigar、sql语句、ServerInfo】
    ssm中html跳转之后乱码
  • 原文地址:https://www.cnblogs.com/XxZzYy/p/14892385.html
Copyright © 2011-2022 走看看