public override Color32 Value(float u, float v, Vector3 p) { if (dir == 1) { var t = u; u = 1 - v; v = t; } u = u * scale % 1; v = v * scale % 1; var i = MathRaster.Range((int)(u * w), 0, w - 1); var j = MathRaster.Range((int)((1 - v) * h - 0.001f), 0, h - 1); return(new Color32( data[3 * i + 3 * w * j] / 255f, data[3 * i + 3 * w * j + 1] / 255f, data[3 * i + 3 * w * j + 2] / 255f)); // if (dir == 1) // { // var t = u; // u = 1 - v; // v = t; // } // u = u * scale % 1; // v = v * scale % 1; // // var U = u * w; // var V = (1 - v) * h - 0.001f; // var u1 = (int)Math.Floor(U); // var u2 = (int)Math.Ceiling(U); // // var v1 = (int)Math.Floor(V); // var v2 = (int)Math.Ceiling(V); // // var color1 = Color32.Lerp(GetColor(u1, v1), GetColor(u2, v1), U - u1); // var color2 = Color32.Lerp(GetColor(u1, v2), GetColor(u2, v2), U - u1); // var color = Color32.Lerp(color1, color2, V - v1); // return color; // Color32 GetColor(int _u, int _v) // { // var i = MathRaster.Range(_u, 0, w - 1); // var j = MathRaster.Range(_v, 0, h - 1); // return new Color32( // data[3 * i + 3 * w * j] / 255f, // data[3 * i + 3 * w * j + 1] / 255f, // data[3 * i + 3 * w * j + 2] / 255f); // } }
public static RgbaFloat LowLevelColor(Color32 c) => new RgbaFloat(MathRaster.Range(c.r, 0, 1), MathRaster.Range(c.g, 0, 1), MathRaster.Range(c.b, 0, 1), MathRaster.Range(c.a, 0, 1));