// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
Shader "LXC/03 StructShader"
{
SubShader
{
Pass{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
struct a2v { //application to vertex
float4 vertex:POSITION; //把模型空间下的坐标填充给vertex
float3 normal:NORMAL; //把模型空间下的法线方向填充给normal
float4 texcoord:TEXCOORD0; //把第一套纹理坐标填充给texcoord
};
struct v2f {
float4 position:SV_POSITION;
float3 temp:COLOR0; //这个语义可以自己定义,一般存储颜色,把法线作为颜色传递进去
};
v2f vert(a2v v) {
v2f f;
f.temp = v.normal;
f.position = UnityObjectToClipPos(v.vertex); //f.position = mul(UNITY_MATRIX_MVP,v.vertex);
return f;
}
fixed4 frag(v2f f) :SV_Target{
return fixed4(f.temp,1);
}
ENDCG
}
}
Fallback "VertexLit"
}
从应用程序传递到顶点函数的语义有哪些a2v
POSITION 顶点坐标(模型空间下的)
NORMAL 法线( 模型空间下)
TANGENT 切线(模型空间)
TEXCOORD0 ~n 纹理坐标
COLOR 顶点颜色
从顶点函数传递给片元函数的时候可以使用的语义
SV_POSITION 剪裁空间中的顶点坐标(一般是系统直接使用)
COLOR0 可以传递一组值 4个
COLOR1 可以传递一组值 4个
TEXCOORD0~7 传递纹理坐标
片元函数传递给系统
SV_Target 颜色值,显示到屏幕上的颜色