Unravel Engine C++ Reference
Loading...
Searching...
No Matches
spherify_mesh.hpp
Go to the documentation of this file.
1#ifndef SPHERIFYMESH_HPP
2#define SPHERIFYMESH_HPP
3
4#include "transform_mesh.hpp"
5
6namespace generator
7{
8
10template<typename mesh_t>
12{
13private:
15 impl_t transform_mesh_;
16
17public:
18 spherify_mesh_t(mesh_t mesh, double radius, double factor)
19 : transform_mesh_{std::move(mesh),
20 [radius, factor](mesh_vertex_t& value)
21 {
22 value.position =
23 gml::mix(value.position, radius * gml::normalize(value.position), factor);
24 value.normal =
25 gml::normalize(gml::mix(value.normal, gml::normalize(value.position), factor));
26 }}
27 {
28 }
29
31
32 triangles_t triangles() const noexcept
33 {
34 return transform_mesh_.triangles();
35 }
36
38
39 vertices_t vertices() const noexcept
40 {
41 return transform_mesh_.vertices();
42 }
43};
44
45template<typename mesh_t>
46spherify_mesh_t<mesh_t> spherify_mesh(mesh_t mesh, double radius, double factor)
47{
48 return spherify_mesh_t<mesh_t>{std::move(mesh), radius, factor};
49}
50} // namespace generator
51
52#endif
Projects vertices on a sphere centered at origin.
spherify_mesh_t(mesh_t mesh, double radius, double factor)
typename impl_t::vertices_t vertices_t
vertices_t vertices() const noexcept
typename impl_t::triangles_t triangles_t
triangles_t triangles() const noexcept
Apply a mutator function to each vertex.
typename impl_t::triangles_t triangles_t
spherify_mesh_t< mesh_t > spherify_mesh(mesh_t mesh, double radius, double factor)