Unravel Engine C++ Reference
Loading...
Searching...
No Matches
rotate_mesh.hpp
Go to the documentation of this file.
1
#ifndef GENERATOR_ROTATEMESH_HPP
2
#define GENERATOR_ROTATEMESH_HPP
3
4
#include "
axis.hpp
"
5
#include "
transform_mesh.hpp
"
6
7
namespace
generator
8
{
9
11
template
<
typename
mesh_t>
12
class
rotate_mesh_t
13
{
14
private
:
15
using
impl_t
=
transform_mesh_t<mesh_t>
;
16
impl_t
transform_mesh_;
17
18
public
:
21
rotate_mesh_t
(mesh_t mesh,
const
gml::dquat&
rotation
)
22
: transform_mesh_{
std
::move(mesh),
23
[
rotation
](
mesh_vertex_t
& value)
24
{
25
value.position =
gml::transform
(
rotation
, value.position);
26
value.normal =
gml::transform
(
rotation
, value.normal);
27
}}
28
{
29
}
30
34
rotate_mesh_t
(mesh_t mesh,
double
angle,
const
gml::dvec3& axis)
35
:
rotate_mesh_t
{
std
::move(mesh),
gml
::qrotate(angle, axis)}
36
{
37
}
38
39
rotate_mesh_t
(mesh_t mesh,
double
angle,
axis_t
axis)
40
:
rotate_mesh_t
{
std
::move(mesh),
41
gml
::qrotate(angle,
42
axis ==
axis_t
::
X
43
?
gml
::dvec3{1.0, 0.0, 0.0}
44
: (axis ==
axis_t
::
Y
?
gml
::dvec3{0.0, 1.0, 0.0} :
gml
::dvec3{0.0, 0.0, 1.0}))}
45
{
46
}
47
48
using
triangles_t
=
typename
impl_t::triangles_t
;
49
50
triangles_t
triangles
() const noexcept
51
{
52
return
transform_mesh_.triangles();
53
}
54
55
using
vertices_t
=
typename
impl_t::vertices_t
;
56
57
vertices_t
vertices
() const noexcept
58
{
59
return
transform_mesh_.vertices();
60
}
61
};
62
63
template
<
typename
mesh_t>
64
rotate_mesh_t<mesh_t>
rotate_mesh
(mesh_t mesh,
const
gml::dquat&
rotation
)
65
{
66
return
rotate_mesh_t<mesh_t>
{std::move(mesh),
rotation
};
67
}
68
69
template
<
typename
mesh_t>
70
rotate_mesh_t<mesh_t>
rotate_mesh
(mesh_t mesh,
double
angle,
const
gml::dvec3& axis)
71
{
72
return
rotate_mesh_t<mesh_t>
{std::move(mesh), angle, axis};
73
}
74
75
template
<
typename
mesh_t>
76
rotate_mesh_t<mesh_t>
rotate_mesh
(mesh_t mesh,
double
angle,
axis_t
axis)
77
{
78
return
rotate_mesh_t<mesh_t>
{std::move(mesh), angle, axis};
79
}
80
}
// namespace generator
81
82
#endif
axis.hpp
generator::mesh_vertex_t
Definition
mesh_vertex.hpp:10
generator::rotate_mesh_t
Rotates vertices and normals.
Definition
rotate_mesh.hpp:13
generator::rotate_mesh_t::vertices
vertices_t vertices() const noexcept
Definition
rotate_mesh.hpp:57
generator::rotate_mesh_t::triangles_t
typename impl_t::triangles_t triangles_t
Definition
rotate_mesh.hpp:48
generator::rotate_mesh_t::vertices_t
typename impl_t::vertices_t vertices_t
Definition
rotate_mesh.hpp:55
generator::rotate_mesh_t::triangles
triangles_t triangles() const noexcept
Definition
rotate_mesh.hpp:50
generator::rotate_mesh_t::rotate_mesh_t
rotate_mesh_t(mesh_t mesh, double angle, const gml::dvec3 &axis)
Definition
rotate_mesh.hpp:34
generator::rotate_mesh_t::rotate_mesh_t
rotate_mesh_t(mesh_t mesh, const gml::dquat &rotation)
Definition
rotate_mesh.hpp:21
generator::rotate_mesh_t::rotate_mesh_t
rotate_mesh_t(mesh_t mesh, double angle, axis_t axis)
Definition
rotate_mesh.hpp:39
generator::transform_mesh_t::vertices_t
Definition
transform_mesh.hpp:22
generator::transform_mesh_t
Apply a mutator function to each vertex.
Definition
transform_mesh.hpp:15
generator::transform_mesh_t::triangles_t
typename impl_t::triangles_t triangles_t
Definition
transform_mesh.hpp:61
generator
Definition
any_generator.hpp:7
generator::axis_t
axis_t
Definition
axis.hpp:8
generator::axis_t::X
@ X
generator::axis_t::Y
@ Y
generator::rotate_mesh
rotate_mesh_t< mesh_t > rotate_mesh(mesh_t mesh, const gml::dquat &rotation)
Definition
rotate_mesh.hpp:64
gml
Definition
math.hpp:13
gml::transform
glm::tvec3< T > transform(const glm::tquat< T > &q, const glm::tvec3< T > &v)
Definition
math.hpp:114
std
Hash specialization for batch_key to enable use in std::unordered_map.
Definition
render_view_keys.h:37
rotation
std::vector< math::quat > rotation
Definition
particle_system_soa.cpp:380
transform_mesh.hpp
engine
engine
rendering
generator
rotate_mesh.hpp
Generated by
1.12.0