美文网首页
cocos creator effect 学习

cocos creator effect 学习

作者: 欧特雨 | 来源:发表于2020-05-13 15:24 被阅读0次

    在cocoscreator中新建一个effect,内容如下

    // Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.  
    
    CCEffect %{
      techniques:
      - passes:
        - vert: vs
          frag: fs
          blendState:
            targets:
            - blend: true
          rasterizerState:
            cullMode: none
          properties:
            texture: { value: white }
            alphaThreshold: { value: 0.5 }
    }%
    
    
    CCProgram vs %{
      precision highp float;
    
      #include <cc-global>
      #include <cc-local>
    
      in vec3 a_position;
      in vec4 a_color;
      out vec4 v_color;
    
      #if USE_TEXTURE
      in vec2 a_uv0;
      out vec2 v_uv0;
      #endif
    
      void main () {
        vec4 pos = vec4(a_position, 1);
    
        #if CC_USE_MODEL
        pos = cc_matViewProj * cc_matWorld * pos;
        #else
        pos = cc_matViewProj * pos;
        #endif
    
        #if USE_TEXTURE
        v_uv0 = a_uv0;
        #endif
    
        v_color = a_color;
    
        gl_Position = pos;
      }
    }%
    
    
    CCProgram fs %{
      precision highp float;
      
      #include <alpha-test>
    
      in vec4 v_color;
    
      #if USE_TEXTURE
      in vec2 v_uv0;
      uniform sampler2D texture;
      #endif
    
      void main () {
        vec4 o = vec4(1, 1, 1, 1);
    
        #if USE_TEXTURE
        o *= texture(texture, v_uv0);
          #if CC_USE_ALPHA_ATLAS_TEXTURE
          o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;
          #endif
        #endif
    
        o *= v_color;
    
        ALPHA_TEST(o);
    
        gl_FragColor = o;
      }
    }%
    
    

    官方的effect文档 https://docs.cocos.com/creator/manual/zh/render/effect.html?h=shader
    因为没有shader基础,看不明白
    新建一个material,选择刚刚新建的effect,把这个材质放到一个sprite上

    image.png image.png

    这个sprite没有发生任何变化,因为新建的effect和默认的builtin-2d-sprite内容一样。

    现在尝试更改一下new effect之中的内容

    通过对比别人制作的effect,发现有下图fs部分发生了改变,其他部分的内容暂时先不管


    image.png
        #if USE_TEXTURE
        o *= texture(texture, v_uv0);
          #if CC_USE_ALPHA_ATLAS_TEXTURE
          o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;
          #endif
        #endif
    

    猜测这个USE_TEXTURE应该就是material面板上面的两个Boolean类型的变量,取消勾选试一试,果然精灵变成了纯白色

    image.png image.png

    因为这个if没有走进去,,直接使用了vec4 o = vec4(1,1,1,1);
    这个颜色就是白色。
    4个数字分别代表rgba,范围0-1
    再把USE_TEXTURE勾选上,恢复正常
    现在试试o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;这一句的作用,把他注释掉


    image.png

    sprite没有发生变化,猜测是CC_USE_ALPHA_ATLAS_TEXTURE为false,把if中的代码移到外面试试


    image.png
    image.png
    图片发生了奇怪的变化,把这几句删除掉
    下面应该就是正常显示图片的代码了
    image.png

    通过搜索,找到这篇文章,介绍了gl_FragColor = o;的作用,gl_FragColor里面保存的是图片的颜色。
    https://www.jianshu.com/p/75b1b4b701f7

    image.png

    相关文章

      网友评论

          本文标题:cocos creator effect 学习

          本文链接:https://www.haomeiwen.com/subject/rpmnnhtx.html