22 { |
22 { |
23 glm::vec<N, T, Q> direction; |
23 glm::vec<N, T, Q> direction; |
24 glm::vec<N, T, Q> anchor; |
24 glm::vec<N, T, Q> anchor; |
25 }; |
25 }; |
26 |
26 |
27 template<int N> |
|
28 struct Polygon |
|
29 { |
|
30 std::array<glm::vec3, N> points; |
|
31 }; |
|
32 |
|
33 template<int N> |
|
34 struct Polygon2D |
|
35 { |
|
36 glm::vec2 points[N]; |
|
37 }; |
|
38 |
|
39 inline const glm::vec3 origin = {0, 0, 0}; |
27 inline const glm::vec3 origin = {0, 0, 0}; |
40 inline const Plane XY = {{0, 0, 1}, origin}; |
28 inline const Plane XY = {{0, 0, 1}, origin}; |
41 inline const Plane XZ = {{0, 1, 0}, origin}; |
29 inline const Plane XZ = {{0, 1, 0}, origin}; |
42 inline const Plane YZ = {{1, 0, 0}, origin}; |
30 inline const Plane YZ = {{1, 0, 0}, origin}; |
43 using Triangle = Polygon<3>; |
31 |
44 using LineSegment2D = Polygon2D<2>; |
32 struct LineSegment |
|
33 { |
|
34 glm::vec3 p1, p2; |
|
35 }; |
|
36 struct Triangle |
|
37 { |
|
38 glm::vec3 p1, p2, p3; |
|
39 }; |
|
40 struct Quadrilateral |
|
41 { |
|
42 glm::vec3 p1, p2, p3, p4; |
|
43 }; |
|
44 struct ConditionalEdge |
|
45 { |
|
46 glm::vec3 p1, p2; |
|
47 glm::vec3 c1, c2; |
|
48 }; |
|
49 struct LineSegment2D |
|
50 { |
|
51 glm::vec2 p1, p2; |
|
52 }; |
|
53 |
|
54 // get polygon type from amount of points |
|
55 template<int N> |
|
56 struct PolygonType {}; |
|
57 template<> |
|
58 struct PolygonType<2> { using type = LineSegment; }; |
|
59 template<> |
|
60 struct PolygonType<3> { using type = Triangle; }; |
|
61 template<> |
|
62 struct PolygonType<4> { using type = Quadrilateral; }; |
|
63 template<int N> |
|
64 using Polygon = typename PolygonType<N>::type; |
45 |
65 |
46 /** |
66 /** |
47 * @brief Computes a line from two points |
67 * @brief Computes a line from two points |
48 * @param point_1 |
68 * @param point_1 |
49 * @param point_2 |
69 * @param point_2 |