2013-02-21 1260 views
0

我有一个以给定方式组合了2个纹理的着色器。mentain在着色器中的纹理比例

如何将第一个纹理定位在第二个纹理的中心,从而确保核心比例?

即我有一个100x100的图像和另一个图像1024x 768.我怎么可以结合2纹理,以便第一个图像居中在第二个图像前,请小心图像之间的差异(没有小图像贯穿整个材料)?

这里是我的着色器:

sampler2D _MainTex; 
     sampler2D _MainTex2; 

     float4 _Color; 
     float _bwBlend; 

     struct Input { 
      float2 uv_MainTex; 
      float2 uv_MainTex2; 
     }; 

     void surf (Input IN, inout SurfaceOutput o) 
     { 

      half4 c = tex2D(_MainTex, IN.uv_MainTex); 
      half4 c2 = tex2D(_MainTex2, IN.uv_MainTex2); 


     o.Normal =c.a > .2f ? (.1,.1,.1) : (0,0,0); 
      o.Albedo = c.a > .2f ? c : c2; 
     } 

语言是CG,但我认为任何人更比基本着色器的知识能回答这个问题。

回答

0

我找到了答案:

void surf (Input IN, inout SurfaceOutput o) 
     { 
     float2 a = IN.uv_MainTex*3 ; 
      half4 c = tex2D(_MainTex, a); 
      half4 c2 = tex2D(_MainTex2, IN.uv_MainTex2); 

      // half lum = c.r*.3 + c.g*.59 + c.b*.11; 
      // half3 bw = half3(lum, lum, lum); 

     if(frac(IN.uv_MainTex.x) > .3f && frac(IN.uv_MainTex.x) < .7f && frac(IN.uv_MainTex.y) > .3f && frac(IN.uv_MainTex.y) < .7f) 
     { 
      o.Normal =c.a > .2f ? (.1,.1,.1) : (0,0,0); 
       o.Albedo = c.a > .2f ? c : c2; 
     } 
     else 
      { 
      o.Normal = (0,0,0); 
      o.Albedo = c2; 
      }  

     } 

我乘的UV为小图像,让我得到我想要它(小图像的一个3x3网格)的图像。之后,我“禁用”其他非中心图像的绘制。