Cocos2d 使用shader创建圆角图片,以及添加投影

最近在使用cocos creater编写一个应用,算是深入了解了下cocos creater,总体评估只能说令人遗憾,性能问题很是明显,想到现在市面上还有许多团队使用cocos2d-js开发游戏,确实前景令人比较担忧。

项目中用到一个图片列表的展示框,图片本身是矩形,显示的时候需要圆角,通常使用mask遮罩直接修出圆角,但是实际项目中发现,4列2行八张圆角,直接20帧(性能感人。。。),额,可能也是TV端盒子本身性能比较差,因此,想直接使用shader,渲染图片时直接把图片绘制成圆角。

这里写图片描述

思路如下:

1.取纹理坐标的xy,按照需要的圆角大小r,划分出图片的四个角。
2.如果当前点不在四个角的区域,直接渲染该点。
3.如果当前点在四个角里,计算当前点与圆角中心的距离d,如果d<r,则绘制,反之忽略。
4.为了消除圆角的像素锯齿,可以留出一部分区域z做淡化,在r-z<d<r,绘制像素,其 alpha为 (x - (r-z))/z 。

代码块

代码里的临时变量比较怪,是从添加阴影的代码改回来的,需要的话请自行优化:

varying vec4 v_fragmentColor;
varying vec2 v_texCoord;

void main()
{   
    float edge = 0.04;
    float dis = 0.0;
    vec2 texCoord = v_texCoord; 
    if ( texCoord.x < edge )
    {
        if ( texCoord.y < edge )
        {
            dis = distance( texCoord, vec2(edge, edge) );
        }
        if ( texCoord.y > (1.0
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Cocos引擎使用Shader可以实现各种特效和图形处理。下面是一个简单的使用Shader的步骤: 1. 创建自定义Shader文件:在Cocos项目中创建一个.glsl文件,命名为你喜欢的名称,比如"CustomShader.frag"。 2. 编写Shader代码:打开创建Shader文件,并编写你想实现的特效或图形处理的Shader代码。你可以使用OpenGL Shading Language (GLSL)来编写。 3. 创建Shader程序:在Cocos中,你需要创建一个CCGLProgram对象来加载和管理你的Shader程序。可以在C++代码中使用以下代码创建该对象: ```cpp auto shader = GLProgram::createWithFilenames("CustomShader.vert", "CustomShader.frag"); ``` 在这里,"CustomShader.vert"是一个默认的顶点着色器文件,你可以选择性地创建使用它。 4. 绑定Shader属性:如果你的Shader需要一些自定义属性(比如颜色、纹理等),你需要在C++代码中设置这些属性。可以使用以下代码绑定属性: ```cpp shader->bindAttribLocation("a_position", GLProgram::VERTEX_ATTRIB_POSITION); shader->bindAttribLocation("a_texCoord", GLProgram::VERTEX_ATTRIB_TEX_COORD); ``` 这里,"a_position"和"a_texCoord"是你在Shader中定义的属性名称。 5. 链接和使用Shader:在使用Shader之前,你需要链接它,并将其设置为当前使用Shader程序。可以使用以下代码完成: ```cpp shader->link(); shader->use(); ``` 6. 使用Shader:你可以在绘制节点的过程中使用Shader。可以在节点的draw()函数中调用以下代码来启用Shader: ```cpp auto program = getShaderProgram(); program->use(); ``` 这样,你就可以在节点的draw()函数中应用自定义的Shader了。 以上是一个基本的使用Shader的步骤。你可以根据自己的需求编写更复杂的Shader代码,并在Cocos项目中实现各种特效和图形处理。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值