/// <summary> /// Creates a perspective matrix /// </summary> /// <param name="fov">Field of view</param> /// <param name="aspect">Aspect ratio</param> /// <param name="n">Near plane</param> /// <param name="f">Far plane</param> /// <returns></returns> protected static Matrix PerspectiveMatrix(float fov, float aspect, float n, float f) { fov = MathF.Radians(fov); var a = (f + n) / (f - n); var b = (2 * n * f) / (f - n); var yScale = MathF.Cot(fov / 2); var xScale = yScale / aspect; var m = new Matrix(new[] { new[] { xScale, 0f, 0f, 0f }, new[] { 0f, yScale, 0f, 0f }, new[] { 0f, 0f, a, 1f }, new[] { 0f, 0f, b, 0f } }); return(m); }