public static Vertex FastLerp(Vertex a, Vertex b, float t) => new Vertex { point = Vector4.Lerp(a.point, b.point, t), onePerZ = MathRaster.Lerp(a.onePerZ, b.onePerZ, t), uv = Vector2.Lerp(a.uv, b.uv, t), normal = Vector3.Lerp(a.normal, b.normal, t), color = Color32.Lerp(a.color, b.color, t), distance2Cam = MathRaster.Lerp(a.distance2Cam, b.distance2Cam, t) };
private static bool BackFaceCulling(Vertex p1, Vertex p2, Vertex p3) { var v1 = p2.point - p1.point; var v2 = p3.point - p2.point; var normal = Vector3.Cross(MathRaster.V4ToV3(v1), MathRaster.V4ToV3(v2)); var view_dir = MathRaster.V4ToV3(p1.point) - new Vector3(0, 0, 0); return(Vector3.Dot(normal, view_dir) > 0); }
public override Intermediate Lerp(Intermediate rhs, float facter) { var right = (SampleInterData)rhs; return(new SampleInterData { z_buff = MathRaster.Lerp(z_buff, right.z_buff, facter), UV = Vector2.Lerp(UV, right.UV, facter), FragPos = Vector3.Lerp(FragPos, right.FragPos, facter), Normal = Vector3.Lerp(Normal, right.Normal, facter) }); }
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 override Color32 Shade(Vertex p) { var d = (p.distance2Cam / 2f); var d1 = (int)Math.Floor(d); var d2 = (int)Math.Ceiling(d); if (d2 > 8) { d2 = 8; } if (d1 > 8) { d1 = 8; } var gray = MathRaster.Lerp(d1 / 9f, d2 / 9f, d - d1); var c = Color32.Lerp(texture.midmaps[d1].Value(p.uv.X, p.uv.Y, Vector3.One), texture.midmaps[d2].Value(p.uv.X, p.uv.Y, Vector3.One), d - d1); return(new Color32(0, gray, 0, 1) * c); return(Color32.Lerp(texture.midmaps[d1].Value(p.uv.X, p.uv.Y, Vector3.One), texture.midmaps[d2].Value(p.uv.X, p.uv.Y, Vector3.One), d - d1)); }
public Matrix4x4 CaculateMatrix() { M = MathRaster.GetRotationMatrix(rotation) * Matrix4x4.CreateTranslation(position); return(M); }
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));
public static void Caculate() { V = Matrix4x4.Transpose(MathRaster.GetRotationMatrix(main.transform.rotation) * Matrix4x4.CreateTranslation(main.transform.position)); P = GetProjection(main.FOV, main.Aspect, main.Near, main.Far); }
public Matrix4x4 CaculateMatrix() { M = MathRaster.GetRotationMatrix(rotation / 57.3f) * Matrix4x4.CreateTranslation(position); //TiM=Matrix4x4.Transpose(MathRaster.GetRotationMatrix(rotation/57.3f) * Matrix4x4.CreateTranslation(position)); return(M); }