【移动应用开发技术】OpenGL Shader如何实现彩色光圈效果_第1页
【移动应用开发技术】OpenGL Shader如何实现彩色光圈效果_第2页
【移动应用开发技术】OpenGL Shader如何实现彩色光圈效果_第3页
【移动应用开发技术】OpenGL Shader如何实现彩色光圈效果_第4页
【移动应用开发技术】OpenGL Shader如何实现彩色光圈效果_第5页
已阅读5页,还剩10页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【移动应用开发技术】OpenGLShader如何实现彩色光圈效果

/upload/information/20200623/125/119638.gifShader

"shadertoy/TotalNoob"

{

///view/XdlSDs

Properties{

iMouse

("Mouse

Pos",

Vector)

=

(100,100,0,0)

iChannel0("iChannel0",

2D)

=

"white"

{}

iChannelResolution0

("iChannelResolution0",

Vector)

=

(100,100,0,0)

}

CGINCLUDE

#include

"UnityCG.cginc"

#pragma

target

3.0

#pragma

glsl

#define

vec2

float2

#define

vec3

float3

#define

vec4

float4

#define

mat2

float2x2

#define

iGlobalTime

_Time.y

//

#define

mod

fmod

//

mod

=

sign*fmod

#define

mix

lerp

#define

atan

atan2

#define

fract

frac

#define

texture2D

tex2D

//

屏幕的尺寸

#define

iResolution

_ScreenParams

//

屏幕中的坐标,以pixel为单位

#define

gl_FragCoord

((_iParam.srcPos.xy/_iParam.srcPos.w)*_ScreenParams.xy)

#define

PI2

6.28318530718

#define

pi

3.14159265358979

#define

halfpi

(pi

*

0.5)

#define

oneoverpi

(1.0

/

pi)

fixed4

iMouse;

sampler2D

iChannel0;

fixed4

iChannelResolution0;

struct

v2f

{

float4

pos

:

SV_POSITION;

float4

srcPos

:

TEXCOORD0;

};

//

precision

highp

float;

v2f

vert(appdata_base

v){

v2f

o;

o.pos

=

mul

(UNITY_MATRIX_MVP,

v.vertex);

o.srcPos

=

ComputeScreenPos(o.pos);

return

o;

}

vec4

main(v2f

_iParam);

fixed4

frag(v2f

_iParam)

:

COLOR0

{

return

main(_iParam);

}

vec4

main(v2f

_iParam)

{

vec2

p

=

(2.0*gl_FragCoord.xy-iResolution.xy)/iResolution.y;

float

tau

=

3.1415926535*2.0;

float

a

=

atan(p.x,p.y);

float

r

=

length(p)*0.75;

vec2

uv

=

vec2(a/tau,r);

//get

the

color

float

xCol

=

(uv.x

-

(iGlobalTime

/

3.0))

*

3.0;

xCol

=

sign(xCol)*fmod(xCol,

3.0);

vec3

horColour

=

vec3(0.25,

0.25,

0.25);

if

(xCol

<

1.0)

{

horColour.r

+=

1.0

-

xCol;

horColour.g

+=

xCol;

}

else

if

(xCol

<

2.0)

{

xCol

-=

1.0;

horColour.g

+=

1.0

-

xCol;

horColour.b

+=

xCol;

}

else

{

xCol

-=

2.0;

horColour.b

+=

1.0

-

xCol;

horColour.r

+=

xCol;

}

//

draw

color

beam

uv

=

(2.0

*

uv)

-

1.0;

float

beamWidth

=

(0.7+0.5*cos(uv.x*10.0*tau*0.15*clamp(floor(5.0

+

10.0*cos(iGlobalTime)),

0.0,

10.0)))

*

abs(1.0

/

(30.0

*

uv.y));

vec3

horBeam

=

vec3(beamWidth,beamWidth,beamWidth);

vec4

gl_FragColor

=

vec4(((

horBeam)*

horColour

),

1.0);

return

gl_FragColor;

}

ENDCG

SubShader

{

Pass

{

CGPROGRAM

#pragma

vertex

vert

#pragma

fragment

frag

#pragma

fragmentoption

ARB_precision_hint_fastest

ENDCG

}

}

FallBack

Off

}代码分析/upload/information/20200623/125/119639.jpg/upload/information/20200623/125/119640.jpg/upload/information/20200623/125/119641.jpg彩色的算法vec2

p

=

(2.0*gl_FragCoord.xy-iResolution.xy)/iResolution.y;

float

tau

=

3.1415926535*2.0;

float

a

=

atan(p.x,p.y);

float

r

=

length(p)*0.75;

vec2

uv

=

vec2(a/tau,r);

//get

the

color

float

xCol

=

(uv.x

-

(iGlobalTime

/

3.0))

*

3.0;

xCol

=

mod(xCol,

3.0);

vec3

horColour

=

vec3(0.25,

0.25,

0.25);

if

(xCol

<

1.0)

{

horColour.r

+=

1.0

-

xCol;

horColour.g

+=

xCol;

}

else

if

(xCol

<

2.0)

{

xCol

-=

1.0;

horColour.g

+=

1.0

-

xCol;

horColour.b

+=

xCol;

}

else

{

xCol

-=

2.0;

horColour.b

+=

1.0

-

xCol;

horColour.r

+=

xCol;

}光圈的算法/upload/information/20200623/125/119642.jpg/upload/information/20200623/125/119643.jpg/upload/information/20200623/125/119644.jpg/upload/information/20200623/125/119645.jpg/upload/information/20200623/125/119646.jpg/upload/information/20200623/125/119647.jpg/upload/information/20200623/125/119648.jpg/upload/information/20200623/125/119649.jpg/upload/information/20200623/125/119650.jpg/upload/information/20200623/125/1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论