private Vector3 GetPlanarColor(Vector3 vec) { DebugHelper.CheckRange(vec.X, -1, 1, $"vecX: {vec.X} not in range (-1, 1)"); DebugHelper.CheckRange(vec.Y, -1, 1, $"vecY: {vec.Y} not in range (-1, 1)"); DebugHelper.CheckRange(vec.Z, -1, 1, $"vecZ: {vec.Z} not in range (-1, 1)"); var u = vec.X; var v = vec.Y; return(GetPixelColor(u, v)); }
private Vector3 GetLightProbeColor(Vector3 vec) { DebugHelper.CheckRange(vec.X, -1, 1, $"vecX: {vec.X} not in range (-1, 1)"); DebugHelper.CheckRange(vec.Y, -1, 1, $"vecY: {vec.Y} not in range (-1, 1)"); DebugHelper.CheckRange(vec.Z, -1, 1, $"vecZ: {vec.Z} not in range (-1, 1)"); var r = (1 / Mathf.PI) * Mathf.Acos(vec.Z) / Mathf.Sqrt(vec.X * vec.X + vec.Y * vec.Y); var u = vec.X * r * -1; var v = vec.Y * r * -1; return(GetPixelColor(u, v)); }
private Vector3 GetSphericalColor(Vector3 vec) { DebugHelper.CheckRange(vec.X, -1, 1, $"vecX: {vec.X} not in range (-1, 1)"); DebugHelper.CheckRange(vec.Y, -1, 1, $"vecY: {vec.Y} not in range (-1, 1)"); DebugHelper.CheckRange(vec.Z, -1, 1, $"vecZ: {vec.Z} not in range (-1, 1)"); var u = Mathf.Atan2(vec.X, vec.Z) / (2f * Mathf.PI); var v = Mathf.Acos(vec.Y) / (2F * Mathf.PI); u = (u * Tiling.Size.X + Tiling.Offset.X) % 1; v = (v * Tiling.Size.Y + Tiling.Offset.Y) % 1; return(GetPixelColor(u, v)); }
private Vector3 GetPixelColor(float u, float v) { DebugHelper.CheckRange(u, -1.0000001f, 1.0000001f, $"u: {u} not in range(-1, 1)"); DebugHelper.CheckRange(v, -1.0000001f, 1.0000001f, $"u: {v} not in range(-1, 1)"); (var w, var h) = (HdrImage.Width, HdrImage.Height); var x = (int)Mathf.Round(u * (w - 1) / 2 + (w - 1) / 2); var y = (int)Mathf.Round(v * (h - 1) / 2 + (h - 1) / 2); DebugHelper.CheckRange(x, 0, w, $"x not in range(0, {w})"); DebugHelper.CheckRange(y, 0, h, $"y not in range(0, {h})"); x = (int)((x * Tiling.Size.X + Tiling.Offset.X) % (w - 1)); y = (int)((y * Tiling.Size.Y + Tiling.Offset.Y) % (h - 1)); return(HdrImage[x, y]); }