0

我有一个以给定方式组合 2 个纹理的着色器。

我如何将第一个纹理定位在第二个纹理的中心以保持对应比例?

即我有一个 100x100 的图像和另一个 1024x 768 的图像。如何组合这两个纹理,使第一个图像居中在第二个图像前面,保持图像之间的差异(没有小图像拉伸整个材料) ?

这是我的着色器:

 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,但我认为任何对着色器有基本知识的人都可以回答这个问题。

4

1 回答 1

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;
           }    

         }

我将小图像的 uvs 相乘,这样我就得到了我想要的图像(小图像的 3x3 网格)。之后,我“禁用”了其他非居中图像的绘制。

于 2013-02-21T14:52:35.217 回答