diff --git a/src/projection.rs b/src/projection.rs index 5e78a3a..019b478 100644 --- a/src/projection.rs +++ b/src/projection.rs @@ -26,25 +26,27 @@ pure fn perspective>(fovy: float, aspectRatio: float, near // #[inline(always)] pure fn frustum>(left: float, right: float, bottom: float, top: float, near: float, far: float) -> Mat4 { - let m00 = cast((2f * near) / (right - left)); - let m01 = cast(0f); - let m02 = cast(0f); - let m03 = cast(0f); - let m10 = cast(0f); - let m11 = cast((2f * near) / (top - bottom)); - let m12 = cast(0f); - let m13 = cast(0f); - let m20 = cast((right + left) / (right - left)); - let m21 = cast((top + bottom) / (top - bottom)); - let m22 = cast(-(far + near) / (far - near)); - let m23 = cast(-1f); - let m30 = cast(0f); - let m31 = cast(0f); - let m32 = cast(-(2f * far * near) / (far - near)); - let m33 = cast(0f); + let _0 = cast(0); - return Mat4::new(m00, m01, m02, m03, - m10, m11, m12, m13, - m20, m21, m22, m23, - m30, m31, m32, m33); + let c0r0 = cast((2f * near) / (right - left)); + let c0r1 = _0; + let c0r2 = _0; + let c0r3 = _0; + let c1r0 = _0; + let c1r1 = cast((2f * near) / (top - bottom)); + let c1r2 = _0; + let c1r3 = _0; + let c2r0 = cast((right + left) / (right - left)); + let c2r1 = cast((top + bottom) / (top - bottom)); + let c2r2 = cast(-(far + near) / (far - near)); + let c2r3 = cast(-1); + let c3r0 = _0; + let c3r1 = _0; + let c3r2 = cast(-(2f * far * near) / (far - near)); + let c3r3 = _0; + + return Mat4::new(c0r0, c0r1, c0r2, c0r3, + c1r0, c1r1, c1r2, c1r3, + c2r0, c2r1, c2r2, c2r3, + c3r0, c3r1, c3r2, c3r3); } \ No newline at end of file