master
ブランチ master
ShaderPlayground / deps / glm / glm / gtx / intersect.hpp
3.3 KB、92行 生 Blame 履歴
1/// @ref gtx_intersect
2/// @file glm/gtx/intersect.hpp
3///
4/// @see core (dependence)
5/// @see gtx_closest_point (dependence)
6///
7/// @defgroup gtx_intersect GLM_GTX_intersect
8/// @ingroup gtx
9///
10/// Include <glm/gtx/intersect.hpp> to use the features of this extension.
11///
12/// Add intersection functions
13
14#pragma once
15
16// Dependency:
17#include <cfloat>
18#include <limits>
19#include "../glm.hpp"
20#include "../geometric.hpp"
21#include "../gtx/closest_point.hpp"
22#include "../gtx/vector_query.hpp"
23
24#ifndef GLM_ENABLE_EXPERIMENTAL
25# error "GLM: GLM_GTX_closest_point is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
26#endif
27
28#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
29# pragma message("GLM: GLM_GTX_closest_point extension included")
30#endif
31
32namespace glm
33{
34 /// @addtogroup gtx_intersect
35 /// @{
36
37 //! Compute the intersection of a ray and a plane.
38 //! Ray direction and plane normal must be unit length.
39 //! From GLM_GTX_intersect extension.
40 template<typename genType>
41 GLM_FUNC_DECL bool intersectRayPlane(
42 genType const& orig, genType const& dir,
43 genType const& planeOrig, genType const& planeNormal,
44 typename genType::value_type & intersectionDistance);
45
46 //! Compute the intersection of a ray and a triangle.
47 /// Based om Tomas Möller implementation http://fileadmin.cs.lth.se/cs/Personal/Tomas_Akenine-Moller/raytri/
48 //! From GLM_GTX_intersect extension.
49 template<typename T, qualifier Q>
50 GLM_FUNC_DECL bool intersectRayTriangle(
51 vec<3, T, Q> const& orig, vec<3, T, Q> const& dir,
52 vec<3, T, Q> const& v0, vec<3, T, Q> const& v1, vec<3, T, Q> const& v2,
53 vec<2, T, Q>& baryPosition, T& distance);
54
55 //! Compute the intersection of a line and a triangle.
56 //! From GLM_GTX_intersect extension.
57 template<typename genType>
58 GLM_FUNC_DECL bool intersectLineTriangle(
59 genType const& orig, genType const& dir,
60 genType const& vert0, genType const& vert1, genType const& vert2,
61 genType & position);
62
63 //! Compute the intersection distance of a ray and a sphere.
64 //! The ray direction vector is unit length.
65 //! From GLM_GTX_intersect extension.
66 template<typename genType>
67 GLM_FUNC_DECL bool intersectRaySphere(
68 genType const& rayStarting, genType const& rayNormalizedDirection,
69 genType const& sphereCenter, typename genType::value_type const sphereRadiusSquered,
70 typename genType::value_type & intersectionDistance);
71
72 //! Compute the intersection of a ray and a sphere.
73 //! From GLM_GTX_intersect extension.
74 template<typename genType>
75 GLM_FUNC_DECL bool intersectRaySphere(
76 genType const& rayStarting, genType const& rayNormalizedDirection,
77 genType const& sphereCenter, const typename genType::value_type sphereRadius,
78 genType & intersectionPosition, genType & intersectionNormal);
79
80 //! Compute the intersection of a line and a sphere.
81 //! From GLM_GTX_intersect extension
82 template<typename genType>
83 GLM_FUNC_DECL bool intersectLineSphere(
84 genType const& point0, genType const& point1,
85 genType const& sphereCenter, typename genType::value_type sphereRadius,
86 genType & intersectionPosition1, genType & intersectionNormal1,
87 genType & intersectionPosition2 = genType(), genType & intersectionNormal2 = genType());
88
89 /// @}
90}//namespace glm
91
92#include "intersect.inl"