服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Android - OpenGL Shader实例分析(3)等待标识效果

OpenGL Shader实例分析(3)等待标识效果

2022-09-27 15:57stalendp Android

这篇文章主要介绍了OpenGL Shader实例分析第3篇,等待标识效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了opengl shader实例,等待标识,不过效率估计不是很高。结果如下:

OpenGL Shader实例分析(3)等待标识效果

代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
shader "stalendp/waiticons" {
  cginclude 
  
  #include "unitycg.cginc"    
  #pragma target 3.0
  struct v2f { 
   float4 pos:sv_position; 
   float2 uv : texcoord0; 
  }; 
  
  v2f vert(appdata_base v) { 
   v2f o;
   o.pos = mul (unity_matrix_mvp, v.vertex);
   o.uv = v.texcoord.xy;
   return o; 
  
  
  fixed calcdot(fixed a, fixed ca, fixed2 uv) {
   a /= 57.295779513;
   ca /= 57.295779513;
   fixed tt = 180/57.295779513;
   uv = (fixed2(cos(a), sin(a)) * 0.2+ uv)*10;
   fixed adit = tt*2*step(tt, a-ca);
   fixed r = 1-step(ca + adit, a);
   r *= lerp(0.2, -1, saturate((ca-a+adit)/25))*2;
   return smoothstep(r-0.2, r, length(uv.xy));
  }
  
  fixed4 frag(v2f input) : color0 { 
   float2 uv = input.uv.xy - float2(0.5);
   float rx = fmod(uv.x, 0.4);
   float ry = fmod(uv.y, 0.4);
   float mx = step(0.4, abs(uv.x));
   float my = step(0.4, abs(uv.y));
   float alpha = 1- mx*my*step(0.1, length(half2(rx,ry)));
   alpha*=0.9;
   
   fixed4 forecolor = fixed4(1);
   fixed4 bgcolor = fixed4(fixed3(0.4),alpha);
   fixed4 result = bgcolor;
   
   fixed ca = fmod(_time.y, 2)*180;
   
 bgcolor = lerp(forecolor, bgcolor, calcdot(0, ca, uv));
 bgcolor = lerp(forecolor, bgcolor, calcdot(30, ca, uv));
 bgcolor = lerp(forecolor, bgcolor, calcdot(60, ca, uv));
 bgcolor = lerp(forecolor, bgcolor, calcdot(90, ca, uv));
 bgcolor = lerp(forecolor, bgcolor, calcdot(120, ca, uv));
 bgcolor = lerp(forecolor, bgcolor, calcdot(150, ca, uv));
 bgcolor = lerp(forecolor, bgcolor, calcdot(180, ca, uv));
 bgcolor = lerp(forecolor, bgcolor, calcdot(210, ca, uv));
 bgcolor = lerp(forecolor, bgcolor, calcdot(240, ca, uv));
 bgcolor = lerp(forecolor, bgcolor, calcdot(270, ca, uv));
 bgcolor = lerp(forecolor, bgcolor, calcdot(300, ca, uv));
 bgcolor = lerp(forecolor, bgcolor, calcdot(330, ca, uv));
   
   return bgcolor;
  
 endcg 
  
 subshader { 
  lod 200
  tags {"queue" = "transparent"}
  zwrite off
  blend srcalpha oneminussrcalpha 
  pass { 
   cgprogram 
  
   #pragma vertex vert 
   #pragma fragment frag 
   #pragma fragmentoption arb_precision_hint_fastest  
  
   endcg 
  
  
 }  
 fallback off 
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/stalendp/article/details/22687059

延伸 · 阅读

精彩推荐