[Unity3D][Shader]PANCgShader--第一章 基础--02 RGB方块(vertex输出参数)

Shader内容

Shader "My/RGBCube"
{ 
    SubShader
    {         
        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

			struct vertexOutput{
				float4 pos:SV_POSITION;
				
				//TEXCOORD0,TEXCOORD1,TEXCOORD2,etc,can be used for all kinds of parameters
				//nointerpolation can make sure fragment shader receives one exact,non-interpolated value by vertex shader
				//nointerpolation  float4 col:TEXCOORD0;
			    float4 col:TEXCOORD0;
			};


            vertexOutput vert (float4 vertexPos:POSITION)
            {                			   
			   vertexOutput output;
			   output.pos=UnityObjectToClipPos(vertexPos);
			   output.col=vertexPos+float4(0.5,0.5,0.5,0);
			   //for the coordinates of the cube are between -0.5 and 0.5,
			   //by plus 0.5,the result is between 0 and 1
			   return output;
            }

            fixed4 frag (vertexOutput input) : COLOR
            {
               return input.col;
            }
            ENDCG
        }
    }
}

被语义POSITION标识的参数vertexPos的坐标范围为[-0.5,0.5]

out修饰语

上述shader中使用结构体封装了vertexOutput,在vertex阶段为其赋值,并返回。在farament阶段,传入vertex阶段返回的结构体。
也可以选择使用out修饰语的方式代替结构体。如下:

         void vert(float4 vertexPos : POSITION,
            out float4 pos : SV_POSITION,
            out float4 col : TEXCOORD0)  
         {
            pos =  mul(UNITY_MATRIX_MVP, vertexPos);
            col = vertexPos + float4(0.5, 0.5, 0.5, 0.0);
            return;
         }
 
         float4 frag(float4 pos : SV_POSITION, 
            float4 col : TEXCOORD0) : COLOR 
         {
            return col; 
         }

颜色灰化

0.21 red+0.72 green+0.07 blue
补充:
RGB color model
HSL and HSV

Vertex输出插值

物体三角面的顶点会调用vertex shader。并在输出到frament前进行三角面内部的插值。
若不需要插值,需要使用nointerpolation(上文已经提到)对参数进行修饰。
三角面插值更多内容参考:Rasterization

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iningwei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值