Texture2D.GetPixelBilinear(float u, float v)的使用,官方例子註釋

using UnityEngine;
using System.Collections;

public class TEST : MonoBehaviour {

    public Texture2D sourceTex;
    public float warpFactor = 1.0F;
    private Texture2D destTex;
    private Color[] destPix;
    void Start()
    {
        destTex = new Texture2D(sourceTex.width, sourceTex.height);
        destPix = new Color[destTex.width * destTex.height];
        int y = 0;
        while (y < destTex.height)
        {
            int x = 0;
            while (x < destTex.width)
            {
                // 這裏爲何減1?沒有搞明白
                float xFrac = x * 1.0F / (destTex.width - 1);
                float yFrac = y * 1.0F / (destTex.height - 1);
                //Mathf.Pow(float f, float p) 計算並返回 f 的 p 次方。
                float warpXFrac = Mathf.Pow(xFrac, warpFactor);
                float warpYFrac = Mathf.Pow(yFrac, warpFactor);
                /**
                 * 返回在正規化紋理座標(u,v)處的過濾的像素顏色。
                 * 座標U和V 是從0.0到1.0的值,就像是網格模型上的UV座標。若是座標超出邊界(大於1.0或小於0.0),它將基於紋理的包裹重複方式進行限制或重複。
                 * 返回雙線性過濾的像素顏色
                 * 這個紋理須要在導入設置裏設置爲Is Readable(可讀),不然此函數將會無效。
                 */
                destPix[y * destTex.width + x] = sourceTex.GetPixelBilinear(warpXFrac, warpYFrac);
                x++;
            }
            y++;
        }
        //設置一塊像素的顏色。
        destTex.SetPixels(destPix);
        //只有執行Apply()後,顏色變化纔會更新
        destTex.Apply();
        //設置物體的材質貼圖
        renderer.material.mainTexture = destTex;
    }
}
相關文章
相關標籤/搜索