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