From f4f7a71964f3fd4a689db4fd5a1a1f9350bad71c Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Tue, 28 May 2013 03:47:26 +0200 Subject: [PATCH] Back ported resolution for issue #71 for znear == 0 bug into branch 0.9.4 --- glm/gtc/matrix_transform.inl | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/glm/gtc/matrix_transform.inl b/glm/gtc/matrix_transform.inl index 2b0bb2a1..6f20b4cd 100644 --- a/glm/gtc/matrix_transform.inl +++ b/glm/gtc/matrix_transform.inl @@ -236,21 +236,19 @@ namespace glm valType const & zFar ) { + assert(aspect != valType(0)); + assert(zFar != zNear); + #ifdef GLM_FORCE_RADIANS valType const rad = fovy; #else valType const rad = glm::radians(fovy); #endif - - valType range = tan(rad / valType(2)) * zNear; - valType left = -range * aspect; - valType right = range * aspect; - valType bottom = -range; - valType top = range; + valType tanHalfFovy = tan(rad / valType(2)); detail::tmat4x4 Result(valType(0)); - Result[0][0] = (valType(2) * zNear) / (right - left); - Result[1][1] = (valType(2) * zNear) / (top - bottom); + Result[0][0] = valType(1) / (aspect * tanHalfFovy); + Result[1][1] = valType(1) / (tanHalfFovy); Result[2][2] = - (zFar + zNear) / (zFar - zNear); Result[2][3] = - valType(1); Result[3][2] = - (valType(2) * zFar * zNear) / (zFar - zNear);