Shader 学习03:顶点着色器

Shader "Hidden/_3_Shader2.0"
{
	Properties
	{
		_MainTex ("Texture", 2D) = "white" {}
	}
	SubShader
	{
		// No culling or depth
		Cull Off ZWrite Off ZTest Always

		Pass
		{
			CGPROGRAM
			#pragma vertex vert		//定义一个顶点着色器的入口函数
			#pragma fragment frag	//定义一个片段着色器的入口函数
			
			#include "UnityCG.cginc"
			
			struct appdata
			{
				float4 vertex : POSITION;//获取模型顶点信息
				float2 uv : TEXCOORD0;	 //高精度的从顶点传递信息到片段着色器 2维、3维、4维都可以
				//COLOR;表示低精度从顶点传递信息到片段着色器
				//NORMAL:获取法线信息
				//TANGENT:获取切线信息
				//SV_POSITION:表示经过mvp矩阵已经转化到屏幕坐标的位置
				//SV Target:输出到哪个 render target
			};

			struct v2f
			{
				float2 uv : TEXCOORD0;
				float4 vertex : SV_POSITION;
			};
			//appdata从Meshrender中来
			//v2f:顶点着色器的输出值		片段着色器的输入值
			v2f vert (appdata v)
			{
				v2f o;
				o.vertex = UnityObjectToClipPos(v.vertex);
				o.uv = v.uv;
				return o;
			}
			
			sampler2D _MainTex;
			//v2f:顶点着色器的输出值		片段着色器的输入值
			fixed4 frag (v2f i) : SV_Target
			{
				fixed4 col = tex2D(_MainTex, i.uv);
				// just invert the colors
				col.rgb = 1 - col.rgb;
				return col;
			}
			ENDCG
				//unity3d里的矩阵是左乘
				//1.将子物体坐标系变换到世界坐标系
				//P(世界)=M(物体到世界的)*P(物体)
				//规律:3D变换首先将物体坐标系变换到世界
				//Vector3 posWorld = transform.parent.localToWorldMatrix.MultiplyPoint(transform.localPosition);

				//2.将世界坐标系变换到相机坐标系  注!!(表示从世界转换到对应父类下的物体坐标系)
				//Vector3 targePos = target.transform.worldToLocalMatrix.MultiplyPoint(posWorld);
				//P(相机)=(世界到相机)*P(世界)
				//M:物体坐标系变换到世界坐标系
				//V:世界坐标变换到相机坐标系
				//P:讲3D坐标系转换成2维屏幕坐标系

		}
	}
}

 

你可能感兴趣的:(Shader 学习03:顶点着色器)