0

特定の方法で 2 つのテクスチャを組み合わせるシェーダーがあります。

対応するプロポーションを維持しながら、最初のテクスチャを 2 番目のテクスチャの中央に配置するにはどうすればよいですか?

つまり、100x100 の画像と 1024x 768 の別の画像があります。最初の画像が 2 番目の画像の前に中央に配置されるように 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ですが、シェーダーの基礎知識があれば誰でも答えられると思います。

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

         }

小さな画像の UV を乗算して、必要な場所に画像を取得します (小さな画像の 3x3 グリッド)。その後、他の中心にない画像の描画を「無効」にします。

于 2013-02-21T14:52:35.217 に答える