Shader-片元函数调用顶点函数

// 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 颜色值,显示到屏幕上的颜色

猜你喜欢

转载自blog.csdn.net/qq_42459006/article/details/84074892