UnityShader学习实践(hsv转rbg)

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"
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值