CocosCreator Effect (Shader) - 正多边形范围

分享一个shader种做任意正多边形的裁剪的高效方式。
在这里插入图片描述

核心代码与变量对应的几何意义

    // basic side
    float n = u_side;
    float pi = 3.1415926;
    float pi2 = pi * 2.0;
    float section = pi2 / n;
    float sectionh = section / 2.0;

    // 旋转
    // ... 
    
    vec3 one = vec3(1.0, 1.0, 1.0);
    float radius = sqrt(pow(p.x, 2.0) + pow(p.y, 2.0));

    float r = u_radius;
    float t = atan(p.y, p.x);
    
    float t2 = mod(t, section);
    float t3 = step(t2, sectionh) * t2 + step(sectionh, t2) * (t2 - section);
    float dt = abs(t3);
    float r1 = r * cos(sectionh);
    float r2 = r1 / cos(sectionh - dt);

    float mixRate = step(r2, radius);
    o.a = mix(o.a, 0.0, mixRate);

全局图示:在这里插入图片描述
把局部放大一下:
在这里插入图片描述
图中的标注与代码对应。目的就是求屏幕点是否超过r2的长度。超过则透明度为0。

完整代码

具体代码可直接使用,包含了一些图集相对坐标的反变换和坐标抗拉伸等变换。
资源下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值