1#ifndef GENERATOR_LATHEMESH_HPP
2#define GENERATOR_LATHEMESH_HPP
18template<
typename shape_t>
29 const auto& shapeEdge = shape_edges_.generate();
33 const int delta = mesh_->slices_ + 1;
37 triangle.
vertices[0] = shapeEdge.vertices[0] * delta + slice;
38 triangle.
vertices[1] = shapeEdge.vertices[1] * delta + slice;
39 triangle.
vertices[2] = shapeEdge.vertices[1] * delta + slice + 1;
43 triangle.
vertices[0] = shapeEdge.vertices[0] * delta + slice;
44 triangle.
vertices[1] = shapeEdge.vertices[1] * delta + slice + 1;
45 triangle.
vertices[2] = shapeEdge.vertices[0] * delta + slice + 1;
53 return shape_edges_.done();
59 if(i_ == 2 * mesh_->slices_)
69 typename shape_t::edges_t shape_edges_;
87 const auto shapeVertex = shape_vertices_.generate();
88 const gml::dvec2
normal = shapeVertex.normal();
90 double deltaAngle = mesh_->sweep_ / mesh_->slices_;
91 double angle = i_ * deltaAngle + mesh_->start_;
99 vertex.
tex_coord[0] = shapeVertex.tex_coord;
100 vertex.
tex_coord[1] = angle / mesh_->sweep_;
107 return shape_vertices_.done();
114 if(i_ == mesh_->slices_ + 1)
117 shape_vertices_.next();
124 typename shape_t::vertices_t shape_vertices_;
142 const gml::dvec2& axis,
145 double sweep = gml::radians(360.0))
147 , shape_{
std::move(shape)}
176template<
typename shape_t>
181 double sweep = gml::radians(360.0))
bool done() const noexcept
triangle_t generate() const
bool done() const noexcept
mesh_vertex_t generate() const
lathe_mesh_t(shape_t shape, const gml::dvec2 &axis, int slices=32, double start=0.0, double sweep=gml::radians(360.0))
vertices_t vertices() const noexcept
triangles_t triangles() const noexcept
gml::dvec2 tex_coord
UV texture coordinates.
gml::dvec3 normal
Unit vector perpendicular to the surface.
gml::ivec3 vertices
Zero based indices of the triangle vertices in counterclockwise order.
lathe_mesh_t< shape_t > lathe(shape_t shape, axis_t axis=axis_t::X, int slices=32, double start=0.0, double sweep=gml::radians(360.0))
glm::tvec3< T > transform(const glm::tquat< T > &q, const glm::tvec3< T > &v)
glm::tquat< T > qrotate(const T &angle, const glm::tvec3< T > &axis)