您的位置:首页 > 移动开发 > Unity3D

UnityShader学习实践(hsv转rbg)

2016-04-21 09:22 393 查看
Shader "Custom/RGBtoHSV" {

Properties

{

_H("hue",Range(0,360))=0.1

_S("saturation",Range(0,1.0))=0

_V("value",Range(0, 1.0)) = 0

_A("Alpha", Range(0,1.0))=1.0

}

SubShader

{

Tags { "Queue"="Transparent" "RenderType"="Transparent" }

Pass

{

CGPROGRAM

#pragma vertex vert

#pragma fragment frag

#pragma target 2.0

uniform fixed _H;

uniform fixed _S;

uniform fixed _V;

uniform fixed _A;

fixed4 HSVtoRGB()

{

fixed R;

fixed G;

fixed B;

if (_S == 0)

{

R = G = B = _V;

}

else

{

_H /= 60;

fixed i = (int)_H;

fixed f = _H-i;

fixed a = _V*(1 - _S);

fixed b = _V*(1 - f*_S);

fixed c = _V*(1 - (1 - f)*_S);

if (i == 0)

{

R = _V; G = c; B = a;

}

else if (i == 1)

{

R = b; G = _V; B = a;

}

else if (i == 2)

{

R = a; G = _V; B = c;

}

else if (i == 3)

{

R = a; G = b; B = _V;

}

else if (i == 4)

{

R = c; G = a; B = _V;

}

else if (i == 5)

{

R = _V; G = a; B = b;

}

}

return fixed4(R, G, B,_A);

}

float4 vert(float4 v:POSITION) : SV_POSITION

{

return mul(UNITY_MATRIX_MVP, v);

}

fixed4 frag() : COLOR

{

return HSVtoRGB();

}

ENDCG

}

}

FallBack "Diffuse"

}

Shader "Custom/RGBtoHSV" {

Properties

{

_H("hue",Range(0,360))=0.1

_S("saturation",Range(0,1.0))=0

_V("value",Range(0, 1.0)) = 0

_A("Alpha", Range(0,1.0))=1.0

}

SubShader

{

Tags { "Queue"="Transparent" "RenderType"="Transparent" }

Pass

{

CGPROGRAM

#pragma vertex vert

#pragma fragment frag

#pragma target 2.0

uniform fixed _H;

uniform fixed _S;

uniform fixed _V;

uniform fixed _A;

fixed4 HSVtoRGB()

{

fixed R;

fixed G;

fixed B;

if (_S == 0)

{

R = G = B = _V;

}

else

{

_H /= 60;

fixed i = (int)_H;

fixed f = _H-i;

fixed a = _V*(1 - _S);

fixed b = _V*(1 - f*_S);

fixed c = _V*(1 - (1 - f)*_S);

if (i == 0)

{

R = _V; G = c; B = a;

}

else if (i == 1)

{

R = b; G = _V; B = a;

}

else if (i == 2)

{

R = a; G = _V; B = c;

}

else if (i == 3)

{

R = a; G = b; B = _V;

}

else if (i == 4)

{

R = c; G = a; B = _V;

}

else if (i == 5)

{

R = _V; G = a; B = b;

}

}

return fixed4(R, G, B,_A);

}

float4 vert(float4 v:POSITION) : SV_POSITION

{

return mul(UNITY_MATRIX_MVP, v);

}

fixed4 frag() : COLOR

{

return HSVtoRGB();

}

ENDCG

}

}

FallBack "Diffuse"

}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: