Browse Source

Merge branch '0.9.5' of https://github.com/g-truc/glm into 0.9.5

Christophe Riccio 12 years ago
parent
commit
f2bce9c8fa
2 changed files with 29 additions and 0 deletions
  1. 9 0
      glm/gtx/intersect.hpp
  2. 20 0
      glm/gtx/intersect.inl

+ 9 - 0
glm/gtx/intersect.hpp

@@ -52,6 +52,15 @@ namespace glm
 	/// @addtogroup gtx_intersect
 	/// @{
 
+	//! Compute the intersection of a ray and a triangle.
+	//! Ray direction and plane normal must be unit length.
+	//! From GLM_GTX_intersect extension.
+	template <typename genType>
+	bool intersectRayPlane(
+		genType const & orig, genType const & dir,
+		genType const & planeOrig, genType const & planeNormal,
+		typename genType::value_type & intersectionDistance);
+
 	//! Compute the intersection of a ray and a triangle.
 	//! From GLM_GTX_intersect extension.
 	template <typename genType>

+ 20 - 0
glm/gtx/intersect.inl

@@ -13,6 +13,26 @@
 
 namespace glm
 {
+	template <typename genType>
+	GLM_FUNC_QUALIFIER bool intersectRayPlane
+	(
+		genType const & orig, genType const & dir,
+		genType const & planeOrig, genType const & planeNormal,
+		typename genType::value_type & intersectionDistance
+	)
+	{
+		typename genType::value_type d = glm::dot(dir, planeNormal);
+		typename genType::value_type Epsilon = std::numeric_limits<typename genType::value_type>::epsilon();
+
+		if(d < Epsilon)
+		{
+			intersectionDistance = glm::dot(planeOrig - orig, planeNormal) / d;
+			return true;
+		}
+
+		return false;
+	}
+
 	template <typename genType>
 	GLM_FUNC_QUALIFIER bool intersectRayTriangle
 	(