public static Vector4 SampleBilinear(float u, float v, AsyncTextureUnsafe <Color32> texture) { u = (u % 1f); v = (v % 1f); u = u * (texture.Width - 1) - 0.5f; v = v * (texture.Height - 1) - 0.5f; if (u < 0f) { u += (texture.Width - 1); } if (v < 0f) { v += (texture.Height - 1); } int x = Mathf.FloorToInt(u); int y = Mathf.FloorToInt(v); float uRatio = u - x; float vRatio = v - y; float uOpposite = 1 - uRatio; float vOpposite = 1 - vRatio; return((Color)texture.Raw[x + y * texture.Width] * uOpposite + (Color)texture.Raw[x + 1 + y * texture.Width] * uRatio + (Color)texture.Raw[x + (y + 1) * texture.Width] * vOpposite + (Color)texture.Raw[x + 1 + (y + 1) * texture.Width] * vRatio); }
public static Color32 SamplePoint(float u, float v, AsyncTextureUnsafe <Color32> texture) { u = Mathf.Clamp01(u); v = Mathf.Clamp01(v); int x = Mathf.FloorToInt(u * (texture.Width - 1)); int y = Mathf.FloorToInt(v * (texture.Height - 1)); return(texture.Raw[x + y * texture.Width]); }