天天看點

unity實作單張紋理貼圖的3種方法

無光照紋理貼圖的3種寫法,頂點着色器函數内方法與片段着色器内方法标号相對應

Shader "LT/UnlitTexture"

{

 Properties

 {

  _MainColor ("MainColor", COLOR) = (0.5,0.5,0.5,1.0)

  _MainTex("Main Texture",2D) = "while" {}

 }

 SubShader

 {

  Pass

  {

   CGPROGRAM

   #pragma vertex vert

   #pragma fragment frag

   #include "UnityCG.cginc"

   fixed4 _MainColor;

   sampler2D _MainTex;

   float4 _MainTex_ST;

   struct appdata

   {

    float4 vertex : POSITION;

    float2 uv : TEXCOORD0;

   };

   struct v2f

   {

    float2 uv : TEXCOORD0;

    float4 vertex : SV_POSITION;

   };

   v2f vert (appdata v)

   {

    v2f o;

    o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);

    o.uv = v.uv;                                                                                   //方法1===============

//    o.uv = v.uv * _MainTex_ST.xy + _MainTex_ST.zw;                        //方法2 ==============

//    o.uv = TRANSFORM_TEX(v.uv,_MainTex);                                  //方法3================

    return o;

   }

   fixed4 frag (v2f i) : SV_Target

   {

    // sample the texture

//    fixed4 col =tex2D(_MainTex,i.uv)* _MainColor;                           //方法2 , 3===========================

    fixed4 col =tex2D(_MainTex,_MainTex_ST.xy * i.uv.xy + _MainTex_ST.zw) * _MainColor;  //方法1

    return col;

   }

   ENDCG

  }

 }

}