cocos creator2.4.11 Effect文件着色器详解

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; //声明 float 类型的变量将使用高精度(high precision)

  #include <cc-global> //引入cc-global文件
  #include <cc-local> //引入cc-local文件

  in vec3 a_position; // 传入的顶点坐标
  in vec4 a_color;    // 传入的颜色
  out vec4 v_color;   // 传递给片段着色器的颜色

  #if USE_TEXTURE     //如果开启了纹理 (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; // 将结果传递给内置变量 gl_Position
  }
}%

CCProgram fs %{         //片段着色器程序
  precision highp float; //声明 float 类型的变量将使用高精度(high precision)

  #include <alpha-test>  //引入alpha-test文件
  #include <texture>     //引入texture文件

  in vec4 v_color;       // 从顶点着色器传递过来的颜色

  #if USE_TEXTURE        //如果开启了纹理 (USE_TEXTURE 宏定义)
  in vec2 v_uv0;         //接收纹理坐标
  uniform sampler2D texture;  // 纹理采样器
  #endif

  void main () {        //片段着色器入口函数
    vec4 o = vec4(1, 1, 1, 1);  //定义一个vec4的变量o

    #if USE_TEXTURE
      CCTexture(texture, v_uv0, o); //对textrue进行采样,使用v_uv0为坐标,颜色值传给o
    #endif

    o *= v_color;   // 将o乘以从顶点着色器传递过来的颜色

    ALPHA_TEST(o);  //对o进行alpha测试

    #if USE_BGRA
      gl_FragColor = o.bgra; //如果使用BGRA,则传入o的bgra值
    #else
      gl_FragColor = o.rgba; //如果不使用BGRA,则传入o的rbga值
    #endif
  }
}%
  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值