ShaderJoy —— “跳动的❤️”的原理解析【GLSL】

举报
ShaderJoy 发表于 2021/12/29 23:18:13 2021/12/29
【摘要】 本文参考了ShaderToy的算法 ,对其原理进行了简单分析,并对代码进行精简 绘制❤️形 先看看关键代码 float r = length(p); float a = atan(p.x,p.y)/3.141593; float h = abs(a); float d = (13.0*h - 22.0*h*h + 10...

本文参考了ShaderToy的算法 ,对其原理进行了简单分析,并对代码进行精简

绘制❤️形

先看看关键代码


  
  1. float r = length(p);
  2. float a = atan(p.x,p.y)/3.141593;
  3. float h = abs(a);
  4. float d = (13.0*h - 22.0*h*h + 10.0*h*h*h)/(6.0-5.0*h);
  5. // Red
  6. vec3 hcol = vec3(1.0, 0.0, 0.0);
  7. // Draw Heart
  8. vec3 col = mix( u_bgColor.xyz, hcol, clamp( d-r, 0., 1.));


其中,p 是片元坐标 x,y 从 [0,1] 域换算到 [-1,1] 的 vec2 形式,u_bgColor 是白色的背景,a 的含义不用解释了,值得一提的是a的范围是 [-1/2, 1/2] ,需要对它取绝对值,原因是 a 为负数的话,计算出的 d 也为负数,那么会被 mix 函数所忽略的(所以我们常常使用 clamp 来截断),如图(颜色越浅表示 d 值越小,反之亦然):

 

文章来源: panda1234lee.blog.csdn.net,作者:panda1234lee,版权归原作者所有,如需转载,请联系作者。

原文链接:panda1234lee.blog.csdn.net/article/details/52024465

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。