Vertex Shader---顶点数据的输入与输出2

1、使用结构体的方式返回

Shader "Custom/vertex_shader" {

	SubShader{

		pass {
		CGPROGRAM
		#pragma vertex vert
		#pragma fragment frag

		struct v2f {
			float4 pos:POSITION;
			float2 objPos:TEXCOORDO;
		};

		//使用结构体的方式返回,此时不需要再指定一个具体的语义
		v2f vert(in float2 objPos:POSITION){
			v2f o;
			o.pos=float4(objPos, 0, 1);
			o.objPos = objPos;
			return o;
		}

		//片段函数将颜色返回
		float4 frag(in float4 col:COLOR,in float2 opos:TEXCOORDO) :COLOR{
			col.y = 1;
			return col;
		}


		

		ENDCG
	}
	}
}

2、使用typedef的方式

Shader "Custom/vertex_shader" {

	SubShader{

		pass {
		CGPROGRAM
		#pragma vertex vert
		#pragma fragment frag

		typedef struct{
			float4 pos:POSITION;
			float2 objPos:TEXCOORDO;
		}v2f;

		//使用结构体的方式返回,此时不需要再指定一个具体的语义
		v2f vert(in float2 objPos:POSITION){
			v2f o;
			o.pos=float4(objPos, 0, 1);
			o.objPos = objPos;
			return o;
		}

		//片段函数将颜色返回
		float4 frag(in float4 col:COLOR,in float2 opos:TEXCOORDO) :COLOR{
			col.y = 1;
			return col;
		}


		

		ENDCG
	}
	}
}


3、使用vert中传递过来的值

Shader "Custom/vertex_shader" {

	SubShader{

		pass {
		CGPROGRAM
		#pragma vertex vert
		#pragma fragment frag

		struct v2f {
			float4 pos:POSITION;
			float2 objPos:TEXCOORDO;
		};

		//使用结构体的方式返回,此时不需要再指定一个具体的语义
		v2f vert(in float2 objPos:POSITION){
			v2f o;
			o.pos=float4(objPos, 0, 1);
			o.objPos = float2(1,0);
			return o;
		}

		//片段函数将颜色返回
		fixed4 frag(in float4 col:COLOR,in float2 opos:TEXCOORDO) :COLOR{
			//col.y = 1;
			//return col;
			//使用opos传递过来的值
			return fixed4(opos,0,1);
		}
		ENDCG
	}
	}
}

运行结果:


4、没有被顶点程序赋过值的颜色


5、直接使用赋值过的col,但是在vert中改变值后,frag中好像也没有改变

Shader "Custom/vertex_shader" {

	SubShader{

		pass {
		CGPROGRAM
		#pragma vertex vert
		#pragma fragment frag

			struct v2f {
			float4 pos:POSITION;
			float2 objPos:TEXCOORDO;
			float4 col:COLOR;
		};

		//使用结构体的方式返回,此时不需要再指定一个具体的语义
		v2f vert(in float2 objPos:POSITION) {
			v2f o;
			o.pos = float4(objPos, 0, 1);
			o.objPos = float2(1,0);
			o.col = float4(0,1,0,1);
			return o;
		}

		//片段函数将颜色返回,接收的参数的顺序不能出错,否则可能会显示不出来
		float4 frag(in float2 opos:TEXCOORDO, in float4 col : COLOR) :COLOR{
			//col.y = 1;
			//return col;
			//使用opos传递过来的值
			//return fixed4(opos,0,1);
			return col;

		}
			ENDCG
	}
	}
}

运行后的结果:


6、使用结构体进行输入

Shader "Custom/vertex_shader" {

	SubShader{

		pass {
		CGPROGRAM
		#pragma vertex vert
		#pragma fragment frag

			struct v2f {
			float4 pos:POSITION;
			float2 objPos:TEXCOORDO;
			float4 col:COLOR;
		};

		//使用结构体的方式返回,此时不需要再指定一个具体的语义
		v2f vert(in float2 objPos:POSITION) {
			v2f o;
			o.pos = float4(objPos, 0, 1);
			o.objPos = float2(1,0);
			o.col = float4(0,1,0,1);
			return o;
		}

		//使用结构体进行输入
		float4 frag(v2f IN) :COLOR{
			return IN.col;

		}
			ENDCG
	}
	}
}

结果:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值