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
}
}
}
结果: