心形shader

说到心形线不得不提到一个人——勒内·笛卡尔。可以说笛卡尔是心形线的创始人,在笛卡尔游历欧洲各国时,认识了瑞典一个小公国的公主克里斯汀,并成为了公主的数学老师,渐渐地彼此产生了爱慕之心,但是在国王的阻挠下笛卡尔被流放回法国,体弱多病无法抵挡日夜的思念,在给公主寄出十三封信后便与世长辞,第十三封信仅有一个公式,那边是心形线的起源。下面看下各种各样的心形线吧!

1、笛卡尔的心形线

笛卡尔心形线

2、另一种广为流传的方程

另一个广为流传的公式

在几何画板里绘制的图像如下:

heart几何画板

3、桃心形

桃心形

4、实心的心形方程

在几何画板中的图像如下:

需要注意的是要在其中右击图像,属性中绘图加大样本点的数量,并选为离散型更为真实。

实心的心形方程

 5、另外一些心形方程

other1

other2

many

6、exp618的爱意图像

iou

方程如下:

ious


  1. Shader "Custom/love"  
  2.     Properties   
  3.         _MainTex ("Base (RGB)"2D) "white" {}  
  4.         _Size ("爱心大小"Range(010)) 1  
  5.   
  6.       
  7.        
  8.     SubShader      
  9.         Tags {"Queue" "Transparent"       
  10.         ZWrite Off  
  11.   
  12.         Pass       
  13.             CGPROGRAM       
  14.             #pragma vertex vert  
  15.             #pragma fragment frag       
  16.             #include "UnityCG.cginc"  
  17.             #pragma target 3.0     
  18.          
  19.             sampler2D _MainTex;   
  20.             float _Size;  
  21.            
  22.             struct v2f       
  23.                 float4 pos:SV_POSITION;       
  24.                 float4 srcPos TEXCOORD0;    
  25.             };     
  26.      
  27.             v2f vert(appdata_base v)     
  28.                 v2f o;     
  29.                 o.pos mul (UNITY_MATRIX_MVP, v.vertex);     
  30.                 // 根据当前顶点计算在屏幕上的位置  
  31.                 o.srcPos ComputeScreenPos(o.pos);    
  32.                 return o;  
  33.                 
  34.      
  35.             fixed4 frag(v2f i) COLOR0  
  36.                 // 当前顶点在屏幕上的位置,倒置方向
  37.                 float2 center -1*(i.srcPos.xy/i.srcPos.w);    
  38.                 float3 col float3(0);  
  39.           
  40.                 for(int 030++)  
  41.                  
  42.                     // 求每个点的角度【将圆形变成30边形,计算每个顶点的角度】  
  43.                     float an 6.2831 float(j) 30 
  44.                     // 求爱心  
  45.                     float2 pointPos float2(  
  46.                     16 pow(sin(an), 3),  
  47.                     13 cos(an) 5 cos(2 an) 2 cos(3 an) cos(4 an)  
  48.                      );  
  49.                     // 在UV值域范围上半径大小为【size/_ScreenParams.xy】  
  50.                     // 所以新的UV偏移量为【center pointPos 单位半径】  
  51.                     col max(col, tex2D(_MainTex, center pointPos _Size _ScreenParams.xy).xyz);  
  52.                  
  53.                 return fixed4(col, 1);   
  54.                
  55.             ENDCG    
  56.         }//end pass  
  57.     }// end subshader  
  58.     FallBack Off     

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值