From 96b7850cab53688901aeae071f9d9ffb5f8de17c Mon Sep 17 00:00:00 2001 From: Sven-Hendrik Haase Date: Tue, 20 Oct 2015 04:05:58 +0200 Subject: [PATCH 1/3] Fix unintentional backface culling in triangle intersect This also fixes #194. The backface culling is unintentional because it is not documented anywhere and we can't give the triangle a normal so just assume the general case. --- glm/gtx/intersect.inl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glm/gtx/intersect.inl b/glm/gtx/intersect.inl index 0c1cc935..ac99351d 100644 --- a/glm/gtx/intersect.inl +++ b/glm/gtx/intersect.inl @@ -49,7 +49,7 @@ namespace glm typename genType::value_type a = glm::dot(e1, p); typename genType::value_type Epsilon = std::numeric_limits::epsilon(); - if(a < Epsilon) + if(a < Epsilon && a > -Epsilon) return false; typename genType::value_type f = typename genType::value_type(1.0f) / a; From e5b84bd4b407bd80c0808901cfe0043b714229f0 Mon Sep 17 00:00:00 2001 From: Sven-Hendrik Haase Date: Tue, 20 Oct 2015 04:11:53 +0200 Subject: [PATCH 2/3] Added changelog --- readme.md | 1 + 1 file changed, 1 insertion(+) diff --git a/readme.md b/readme.md index f4d601fb..13a17b87 100644 --- a/readme.md +++ b/readme.md @@ -68,6 +68,7 @@ glm::mat4 camera(float Translate, glm::vec2 const & Rotate) ##### Fixes: - Fixed GTX_extended_min_max filename typo #386 +- Fixed intersectRayTriangle to not do any unintentional backface culling #### [GLM 0.9.7.2](https://github.com/g-truc/glm/tree/0.9.7) - 2015-XX-XX ##### Fixes: From a75e38fb40d50f4e519e97fb9ec12b78f4781afb Mon Sep 17 00:00:00 2001 From: Sven-Hendrik Haase Date: Fri, 23 Oct 2015 15:58:43 +0200 Subject: [PATCH 3/3] Remove old commented code --- glm/gtx/intersect.inl | 37 ------------------------------------- 1 file changed, 37 deletions(-) diff --git a/glm/gtx/intersect.inl b/glm/gtx/intersect.inl index ac99351d..6b94d5bc 100644 --- a/glm/gtx/intersect.inl +++ b/glm/gtx/intersect.inl @@ -73,43 +73,6 @@ namespace glm return baryPosition.z >= typename genType::value_type(0.0f); } - //template - //GLM_FUNC_QUALIFIER bool intersectRayTriangle - //( - // genType const & orig, genType const & dir, - // genType const & vert0, genType const & vert1, genType const & vert2, - // genType & position - //) - //{ - // typename genType::value_type Epsilon = std::numeric_limits::epsilon(); - // - // genType edge1 = vert1 - vert0; - // genType edge2 = vert2 - vert0; - // - // genType pvec = cross(dir, edge2); - // - // float det = dot(edge1, pvec); - // if(det < Epsilon) - // return false; - // - // genType tvec = orig - vert0; - // - // position.y = dot(tvec, pvec); - // if (position.y < typename genType::value_type(0) || position.y > det) - // return typename genType::value_type(0); - // - // genType qvec = cross(tvec, edge1); - // - // position.z = dot(dir, qvec); - // if (position.z < typename genType::value_type(0) || position.y + position.z > det) - // return typename genType::value_type(0); - // - // position.x = dot(edge2, qvec); - // position *= typename genType::value_type(1) / det; - // - // return typename genType::value_type(1); - //} - template GLM_FUNC_QUALIFIER bool intersectLineTriangle (