2013-02-21 3 views
0

У меня есть шейдер, который сочетает в себе 2 текстуры определенным образом.mentain текстуры доля в шейдере

Как я могу позиционировать первую текстуру в центре второй текстуры, наследующей пропорции собеседника?

ie у меня есть изображение 100x100 и другое изображение 1024x768. Как я могу объединить 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; 
      }  

     } 

Я умножить Увс для маленького изображения, так что я получаю изображение, где я хочу его (3х3 сетки меньшего изображения). После этого «отключить» рисование других нецентрированных изображений.

Смежные вопросы