cocos creator shader 入门教程3:实现一个左右不同颜色的shader

简介: cocos creator shader 入门教程3:实现一个左右不同颜色的shader

我们先看一下本教程的目标,最终要实现的效果如下:


image.png


在一个矩形区域,左右各显示不同的颜色。


在跟着操作的时候,请在脑海中仔细回想下第一节课的webgl代码,这对你理解engine背后的实现原理非常有帮助!


准备工作


  1. 在资源管理器中,分别新建一个HelloEffectHelloMaterial


  1. image.png


  1. 修改HelloMaterial属性,选择使用HelloEffect


  1. image.png


  1. 新建一个场景,添加一个Sprite到场景中,修改Sprit的Material为HelloMaterial


image.png


经过以上的操作,我们在场景中就添加了一个Sprite,这个Sprite我们可以修改HelloEffect改变渲染逻辑,修改HelloMaterial改变渲染的参数。


让Sprite显示红色


如果你对第一节还有印象,那么我们要做的就是修改effect的fs即可


CCProgram fs %{
    void main(){
        gl_FragColor=vec4(1,0,0,1);
    }
}%


是的,就是这么暴力,没有那么多乱七八糟的代码,main中只有这一行代码足矣,此时你会在Creator中看到一个红色的矩形。


image.png


将颜色变为可配置属性


如果调整颜色每次都修改Effect,那么这个Effect就没有什么使用的价值。


想要自由调整颜色,我们就需要把这个颜色值变为参数,在Effect中我们这样书写:


CCEffect%{
  techniques:
  - pass:
    - vert: vs
      properties:
        myColor: { value: [1,1,1,1] } # 暴露给编辑器和engine
}%


CCProgram fs %{
  uniform Hello {
    vec4 myColor; // 定义同名的uniform变量
  }; // 这里的;不能少,否则报错error EFX2209
  void main(){
    gl_FragColor = myColor; 
  }
}%


如果一切顺利,在HelloMaterial中你就会看到这个"uniform参数":


image.png


你可以尝试着修改下myColor的值,场景里面会实现反馈修改后的结果,当你发生修改后,需要应用这个修改,还记得之前我们对Material的理解么,这个应用其实就是在保存配置。


左右颜色各不同shader


经过以上的学习,要实现如下的效果其实就没什么难度了。


image.png


这里我就不再仔细讲解了,仅仅贴一些关键的核心Effect代码:


CCEffect%{
  techniques:
  - pass:
    - vert: vs
      properties:
        colorLeft: { value: [0,1,0,1] } 
        colorLeft: { value: [1,0,0,1] } 
}%


CCProgram fs %{
  uniform Hello {
    vec4 colorLeft; 
    vec4 colorRight; 
  }; 
  void main(){
    if(v_uv0.x < 0.5){
        gl_FragColor = colorLeft;
    }else{
        gl_FragColor = colorRight;
    }
  }
}%
目录
相关文章
|
存储
CocosCreator3.8研究笔记(十一)CocosCreator Prefab(预制件)理解
CocosCreator3.8研究笔记(十一)CocosCreator Prefab(预制件)理解
1397 0
|
前端开发 人机交互
Cocos Creator3.8 项目实战(四)巧用九宫格图像拉伸
Cocos Creator3.8 项目实战(四)巧用九宫格图像拉伸
1269 0
HarmonyOS实战:Tab顶部滑动悬停功能实现
在鸿蒙开发中,实现Scroll嵌套List列表滑动时顶部悬停的效果是一个常见需求。本文详细介绍了如何通过布局和事件处理来实现这一功能。首先,使用Scroll嵌套List和Tab布局来构建基础页面。然后,通过设置nestedScroll属性为NestedScrollMode.PARENT_FIRST,确保外层Scroll优先滑动。接着,通过监听List和Scroll的滑动事件,处理滑动冲突,确保在特定条件下Scroll停止滑动,将滑动事件交给List处理。最终,实现了在上下滑动时优先让Scroll滑动的效果,并提供了扩展思路,如优先让List滑动等。
556 10
HarmonyOS实战:Tab顶部滑动悬停功能实现
|
JavaScript 前端开发
typeScript基础(8)_ts类型断言
本文介绍了TypeScript中的类型断言,它用于在编译时告诉TypeScript某个对象具有特定的类型,即使它看起来不具备。类型断言可以用来访问一个类型上存在而另一个类型上不存在的属性或方法。需要注意的是,类型断言并不会在运行时改变JavaScript的行为,因此如果断言不当,运行时仍然可能出错。文章还提醒避免将类型断言为`any`类型或进行多重断言。
330 2
|
图形学
【实现100个unity特效之4】Unity ShaderGraph使用教程与各种特效案例(下)
【实现100个unity特效之4】Unity ShaderGraph使用教程与各种特效案例
1101 0
|
小程序 前端开发 API
微信小程序 - 调用微信 API 回调函数内拿不到 this 问题(解决方案)
本文讨论了在微信小程序中调用API回调函数时无法获取到`this`上下文的问题,并提供了解决方案。在回调函数中,使用一个变量(如`that`)来保存当前的`this`引用,然后在回调内部使用这个变量来访问当前页面的数据和方法。
|
JSON JavaScript 数据格式
详细解读CococCreator跨域访问资源服务器
详细解读CococCreator跨域访问资源服务器
460 0
Lua语法(四)——协程
Lua语法(四)——协程
386 0
|
JavaScript
28.【TypeScript 教程】生成器(Generator)
28.【TypeScript 教程】生成器(Generator)
349 3
|
计算机视觉
CocosCreator 面试题(十九) Cocos Creator 材质 shader 分别是什么?
CocosCreator 面试题(十九) Cocos Creator 材质 shader 分别是什么?
797 0