cocos shader做切拼图碎片

1.前言:

为什么会出现这个需求呢?因为在做一个拼图项目,项目主程说不要用mask呀,一个mask就是两个dc,怕后期会出现性能问题,可能这就是大佬的思维吧,于是乎就想到用shader来切一张图,把他变成很多的碎片。

2.实现

先上图,效果如下:
在这里插入图片描述
写一下大致思路吧:
传入两张图片,一张为原图,另一张为需要采样的形状图,锚点定在左上角,方便位置和大小计算,一个切图大小和相对于原图左上角偏移量。
1.contentSize为去一个正方形碎片大小+offset偏移量大小(加上凸起的部分)才是真正的碎片大小,
2.得到碎片大小是原图新的几分之几,都从(0,0)开始算,算uv的比例,
3.采样,根据比例采集大图的部分,把采集的信息给到碎片
具体代码如下:
在这里插入图片描述

3.扩展

后面美术给我一个背景框,四个角有事圆弧形,这个时候就想到,那我就把四个角切成弧形就好了。
思路:定义一个圆的半径长,随便取一个uv,利用勾股定理,只要这个点减去半径的长大于半径,就代表在圆外,那就要给他切点呀。直接把它的a=0就好了。下面是把坐标系转成了一样的计算的。
在这里插入图片描述
效果图如下:
在这里插入图片描述
真正要切哪个角使用cocos材质的setProperty()方法传值就好了。根据传递的值不同来执行上面的某个if语句。

Cocos ShaderCocos引擎中用于实现自定义渲染效果的功能。它基于OpenGL ES 2.0或OpenGL ES 3.0,并且可以在2D和3D场景中使用。 使用Cocos Shader,您可以创建各种独特的效果,如阴影、扭曲、发光等等。您可以通过编写GLSL(OpenGL Shading Language)代码来定义着色器程序,然后将其与Cocos引擎中的节点进行关联。 要使用Cocos Shader,首先需要创建一个自定义的Shader文件,然后在Cocos引擎中加载并应用它。您可以使用Cocos Creator编辑器或手动编写代码来实现这一点。 以下是一个简单的示例代码,展示了如何在Cocos Creator中使用Cocos Shader: ```javascript // 创建一个Sprite节点 var spriteNode = new cc.Node(); var sprite = spriteNode.addComponent(cc.Sprite); sprite.spriteFrame = new cc.SpriteFrame("path/to/your/image.png"); // 加载并应用Shader cc.loader.loadRes("path/to/your/shader", cc.RawAsset, function (err, shaderCode) { if (err) { cc.error(err.message || err); return; } // 创建自定义材质 var material = new cc.Material(); material.effectAsset = shaderCode; material.name = 'CustomShader'; // 将材质应用到Sprite节点上 sprite.setMaterial(0, material); }); ``` 在上述示例中,您需要将路径 "path/to/your/image.png" 替换为您的图像文件路径,将路径 "path/to/your/shader" 替换为您的Shader文件路径。 请注意,使用Cocos Shader需要对OpenGL ES和GLSL有一定的了解。如果您不熟悉这些概念,建议先学习相关知识。同时,Cocos官方提供了丰富的文档和示例代码,可供参考和学习。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值