圆形头像在creator中没有提供,但是这个又是个比较高频的使用功能

demo

实现思路

可以使用一张圆的图片,然后配合mask的反向遮罩来实现,但是这种实现的效果会有锯齿,所以一般会写一个shader。异名上篇文章中追光效果中那个shader刚好直接就可以使用了,这系列的定位是常用功能集锦,圆形头像又是高频应用,因此异名就再单独拿出来再水一篇,方面后面查看使用。

光圈是一个圆,假设圆心在纹理的中间,它的坐标是vec2(0.5,0.5),我们只需让到圆心的距离大于半径的像素丢弃或者透明度为0,代码如下:

void main () {vec4 color = vec4(1, 1, 1, 1);color *= texture(texture, v_uv0);color *= v_color;color.a = step(length(v_uv0 - vec2(0.5,0.5)), 0.1);gl_FragColor = color;
}

ellipse

其中step 是内置的规整函数 step(a, x) = x >= a? 1 : 0length是取模。上面的代码段应用在可以在正方形的纹理中可以得出一个正圆,但是如果纹理不是正方形,上面出来的效果会是一个椭圆,因为在shader无论纹理的真实宽高是多少,它的x,y变化范围都是0~1,是比例的变化。如果需要产生一个正圆,还是得通过获取纹理的真实宽高,来计算真实的宽高比例,异名选择的方式是在在组件初始化的时候,输入一个wh_ratio比例来获取,圆的真实半径通过勾股定理来计算,异名这里就没有开方了,直接通过半径平方的比较来舍去圆外的点。

void main () {vec4 o = vec4(1, 1, 1, 1);o *= texture(texture, v_uv0);o *= v_color;float circle = radius * radius;float rx = center.x * wh_ratio;float ry = center.y;float dis = (v_uv0.x * wh_ratio - rx) * (v_uv0.x * wh_ratio - rx) + (v_uv0.y  - ry) * (v_uv0.y - ry);o.a = step(dis, 0.1);gl_FragColor = o;
}

这样子就能在一个不同宽高比的纹理中都能够画出一个正圆。

circle

但是这样的圆的边缘是有锯齿的,所以我们需要借助另外一个内置插值函数smoothstep(min, max, x),它能够返回一个在输入值之间平稳变化的插值,以此来达到边缘羽化的效果。

void main () {vec4 o = vec4(1, 1, 1, 1);o *= texture(texture, v_uv0);o *= v_color;float circle = radius * radius;float rx = center.x * wh_ratio;float ry = center.y;float dis = (v_uv0.x * wh_ratio - rx) * (v_uv0.x * wh_ratio - rx) + (v_uv0.y  - ry) * (v_uv0.y - ry);o.a = smoothstep(circle, circle - blur, dis);gl_FragColor = o;
}

circle

效果预览

源码获取请点击查看原文,长按二维码查看效果????

ewm

详解圆形头像Shader相关推荐

  1. 自定义view(二) Path绘画详解 圆形进度条

    目录 简介 基础api 圆形进度条 总结 简介 view的绘制可以由无数个形状组成,在canvas基础图形绘制中,我们已经把api提供好的基本图形讲过了.Path之所以单独一章出来是因为path可以由 ...

  2. php论坛思路,PHP论坛实现积分系统的思路代码详解

    PHP论坛实现积分系统的思路代码详解,积分,头像,等级,用户,字段 PHP论坛实现积分系统的思路代码详解 易采站长站,站长之家为您整理了PHP论坛实现积分系统的思路代码详解的相关内容. 首先在用户表定 ...

  3. Android 圆形头像/有外边框的圆形头像CircleImageView自定义控件使用详解

    现在很主流使用圆形头像,还要带边框的一个圆圈圈,自己做的项目里就有这样的需求,大大小小好多地方. 本着能懒则懒的原则,把使用详解总结出来,(PS:不是控件详解). 基本上可以拿来就用,注释我也添加的比 ...

  4. php 微信头像 圆形,详解iOS 裁剪圆形图像并显示(类似于微信头像)

    本文主要讲解如何从照片库选择一张照片后将其裁剪成圆形头像并显示,类似于微信头像那种模式. 本文的方法也适用于当时拍照获取的图像,方法类似,所以不再赘述. 本文主要是在ios 10环境下使用,此时如果要 ...

  5. ios 裁剪圆形头像_详解iOS 裁剪圆形图像并显示(类似于微信头像)

    本文主要讲解如何从照片库选择一张照片后将其裁剪成圆形头像并显示,类似于微信头像那种模式. 本文的方法也适用于当时拍照获取的图像,方法类似,所以不再赘述. 本文主要是在iOS 10环境下使用,此时如果要 ...

  6. Android中Canvas绘图之Shader使用图文详解

    概述 我们在用Android中的Canvas绘制各种图形时,可以通过Paint.setShader(shader)方法为画笔Paint设置shader,这样就可以绘制出多彩的图形.那么Shader是什 ...

  7. Android绘图Canvas十八般武器之Shader详解及实战篇(上)

    本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 前言 Android中绘图离不开的就是Canvas了,Canvas是一个庞大的知识体系,有java层的,也有jni层深入到Frame ...

  8. 【OpenCV 4开发详解】圆形检测

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...

  9. 圆形界面 开启相机_「基础篇三」手机摄影拍照界面详解

    ​[基础篇三]手机摄影拍照界面详解 手机拍照对我们来说已习以为常,每天我们都会用手机相机功能或多或少的拍出几张照片.故手机拍照界面对我们来说也不陌生,但手机拍照界面上的那些按钮,那些功能你都用过吗?你 ...

  10. html5 游戏 算法,JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【圆形情况】...

    JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解[圆形情况] 发布时间:2020-10-10 13:42:43 来源:脚本之家 阅读:95 作者:krapnik 本文实例讲述了JS/HTML ...

最新文章

  1. 3D 人体姿态估计简述
  2. linux中时间戳与date的互转
  3. PostgreSQL数据库设置远程连接
  4. 关于监听UITextField的问题
  5. centos 静态拨号
  6. 餐饮外卖平台小程序 v1.0.1
  7. c3p0三种配置方式(automaticTestTable)
  8. HttpServletRequest 需要导入xx包?
  9. 各地级市系列环境指标数据(2003-2017年)
  10. vim globle
  11. SwiftUI学习笔记-【列表】
  12. 深度学习这些年那些超重要的idea回顾总结
  13. 支持跨平台的移动开发工具大盘点!
  14. MATLA 复制文件到指定文件夹
  15. 因为计算机中丢失d3dx926.dll,win10系统打开程序提示丢失d3dx9 26.dll的解决方法
  16. java教务管理系统数据库设计_计算机毕业设计选题及代做定做流程
  17. 利用python画钻石_用Python制作钻石ASCII艺术品
  18. Datastage性能优化
  19. 手机信号延迟测试软件,使用Fing在手机上诊断网络状况
  20. 用计算机制作微课教学教案,微课教案设计

热门文章

  1. windows c语言新建dos,dos命令怎么用_DOS下创建文件、文件夹
  2. fiddler+LR11录制脚本
  3. Spring Boot 动态添加/删除定时任务
  4. php doctrine 使用,php – 在Symfony中使用Doctrine创建表
  5. 思维导图网页版推荐,这两个网站建议收藏
  6. 一度智信:拼多多平台推广有哪些
  7. centos7下显卡型号查询
  8. 手把手教你搭建STM32MP1开发环境
  9. 7.计蒜客ACM题库.A2233 结果填空:钟表
  10. python实现微信自动投票_Python——开发一个自动化微信投票器【附代码实例方法】...