Unravel Engine C++ Reference
Loading...
Searching...
No Matches
spherical_triangle_mesh.cpp
Go to the documentation of this file.
1
#include "
spherical_triangle_mesh.hpp
"
2
3
#include <stdexcept>
4
5
using namespace
generator
;
6
7
spherical_triangle_mesh_t::triangles_t::triangles_t(
const
spherical_triangle_mesh_t
& mesh)
8
: mesh_{&mesh}
9
, row_{0}
10
, col_{0}
11
, i_{0}
12
{
13
}
14
15
bool
spherical_triangle_mesh_t::triangles_t::done
() const noexcept
16
{
17
return
row_ == mesh_->segments_;
18
}
19
20
triangle_t
spherical_triangle_mesh_t::triangles_t::generate
()
const
21
{
22
if
(done())
23
throw
std::out_of_range(
"Done!"
);
24
25
triangle_t
triangle;
26
27
if
(col_ % 2 == 0)
28
{
29
triangle.
vertices
[0] = i_;
30
triangle.
vertices
[1] = i_ + 1;
31
triangle.
vertices
[2] = i_ + 1 + mesh_->segments_ - row_;
32
}
33
else
34
{
35
triangle.
vertices
[0] = i_;
36
triangle.
vertices
[1] = i_ + 1 + mesh_->segments_ - row_;
37
triangle.
vertices
[2] = i_ + mesh_->segments_ - row_;
38
}
39
40
return
triangle;
41
}
42
43
void
spherical_triangle_mesh_t::triangles_t::next
()
44
{
45
if
(done())
46
throw
std::out_of_range(
"Done!"
);
47
48
if
(col_ % 2 == 0)
49
++i_;
50
51
++col_;
52
if
(col_ == 2 * (mesh_->segments_ - row_) - 1)
53
{
54
++i_;
55
col_ = 0;
56
++row_;
57
}
58
}
59
60
spherical_triangle_mesh_t::vertices_t::vertices_t(
const
spherical_triangle_mesh_t
& mesh)
61
: mesh_{&mesh}
62
, row_{0}
63
, col_{0}
64
{
65
}
66
67
bool
spherical_triangle_mesh_t::vertices_t::done
() const noexcept
68
{
69
return
row_ > mesh_->segments_;
70
}
71
72
mesh_vertex_t
spherical_triangle_mesh_t::vertices_t::generate
()
const
73
{
74
if
(done())
75
throw
std::out_of_range(
"Done!"
);
76
77
mesh_vertex_t
vertex;
78
79
if
(row_ == mesh_->segments_)
80
{
81
vertex.
position
= mesh_->v2_;
82
vertex.
tex_coord
= gml::dvec2{0.5, 1.0};
83
}
84
else
85
{
86
const
double
t = 1.0 / mesh_->segments_ * row_;
87
const
double
t2 = 1.0 / (mesh_->segments_ - row_) * col_;
88
89
const
auto
e1 =
gml::slerp
(mesh_->v0_, mesh_->v2_, t);
90
const
auto
e2 =
gml::slerp
(mesh_->v1_, mesh_->v2_, t);
91
vertex.
position
=
gml::slerp
(e1, e2, t2);
92
93
vertex.
tex_coord
[0] = t2;
94
vertex.
tex_coord
[1] = t;
95
}
96
97
vertex.
normal
= gml::normalize(vertex.
position
);
98
return
vertex;
99
}
100
101
void
spherical_triangle_mesh_t::vertices_t::next
()
102
{
103
if
(done())
104
throw
std::out_of_range(
"Done!"
);
105
106
++col_;
107
if
(col_ > mesh_->segments_ - row_)
108
{
109
col_ = 0;
110
++row_;
111
}
112
}
113
114
spherical_triangle_mesh_t::spherical_triangle_mesh_t
(
double
radius,
int
segments
)
115
:
spherical_triangle_mesh_t
{
gml
::dvec3{radius, 0.0, 0.0},
116
gml
::dvec3{0.0, radius, 0.0},
117
gml
::dvec3{0.0, 0.0, radius},
118
segments
}
119
{
120
}
121
122
spherical_triangle_mesh_t::spherical_triangle_mesh_t
(
const
gml::dvec3& v0,
123
const
gml::dvec3& v1,
124
const
gml::dvec3& v2,
125
int
segments
)
126
: v0_{v0}
127
, v1_{v1}
128
, v2_{v2}
129
, normal_{
gml
::
normal
(v0, v1, v2)}
130
, segments_{
segments
}
131
{
132
}
133
134
spherical_triangle_mesh_t::triangles_t
spherical_triangle_mesh_t::triangles
() const noexcept
135
{
136
return
triangles_t
{*
this
};
137
}
138
139
spherical_triangle_mesh_t::vertices_t
spherical_triangle_mesh_t::vertices
() const noexcept
140
{
141
return
vertices_t
{*
this
};
142
}
normal
btVector3 normal
Definition
bullet_backend.cpp:550
generator::mesh_vertex_t
Definition
mesh_vertex.hpp:10
generator::mesh_vertex_t::position
gml::dvec3 position
Definition
mesh_vertex.hpp:12
generator::mesh_vertex_t::tex_coord
gml::dvec2 tex_coord
UV texture coordinates.
Definition
mesh_vertex.hpp:18
generator::mesh_vertex_t::normal
gml::dvec3 normal
Unit vector perpendicular to the surface.
Definition
mesh_vertex.hpp:15
generator::spherical_triangle_mesh_t::triangles_t
Definition
spherical_triangle_mesh.hpp:18
generator::spherical_triangle_mesh_t::triangles_t::next
void next()
Definition
spherical_triangle_mesh.cpp:43
generator::spherical_triangle_mesh_t::triangles_t::done
bool done() const noexcept
Definition
spherical_triangle_mesh.cpp:15
generator::spherical_triangle_mesh_t::triangles_t::generate
triangle_t generate() const
Definition
spherical_triangle_mesh.cpp:20
generator::spherical_triangle_mesh_t::vertices_t
Definition
spherical_triangle_mesh.hpp:38
generator::spherical_triangle_mesh_t::vertices_t::generate
mesh_vertex_t generate() const
Definition
spherical_triangle_mesh.cpp:72
generator::spherical_triangle_mesh_t::vertices_t::next
void next()
Definition
spherical_triangle_mesh.cpp:101
generator::spherical_triangle_mesh_t::vertices_t::done
bool done() const noexcept
Definition
spherical_triangle_mesh.cpp:67
generator::spherical_triangle_mesh_t
Definition
spherical_triangle_mesh.hpp:15
generator::spherical_triangle_mesh_t::triangles
triangles_t triangles() const noexcept
Definition
spherical_triangle_mesh.cpp:134
generator::spherical_triangle_mesh_t::spherical_triangle_mesh_t
spherical_triangle_mesh_t(double radius=1.0, int segments=4)
Definition
spherical_triangle_mesh.cpp:114
generator::spherical_triangle_mesh_t::vertices
vertices_t vertices() const noexcept
Definition
spherical_triangle_mesh.cpp:139
generator::triangle_t
Definition
triangle.hpp:10
generator::triangle_t::vertices
gml::ivec3 vertices
Zero based indices of the triangle vertices in counterclockwise order.
Definition
triangle.hpp:13
generator
Definition
any_generator.hpp:7
gml
Definition
math.hpp:13
gml::slerp
glm::tvec3< T > slerp(const glm::tvec3< T > &v1, const glm::tvec3< T > &v2, const T &a)
Definition
math.hpp:167
segments
const segment_list * segments
Definition
text_component.cpp:442
spherical_triangle_mesh.hpp
UnravelEngine
UnravelEngine
engine
engine
rendering
generator
spherical_triangle_mesh.cpp
Generated by
1.12.0