Cogs.Core
MeshGeneratorCircularArc.h
1#pragma once
2
3#include "Foundation/Geometry/IndicesGenerator.h"
4
5namespace {
6 void circularArcFactory(Mesh* m, const ShapeDefinition& definition) {
7 float angle;
8 float end;
9
10 if (definition.arcStart == definition.arcEnd) {
11 angle = 0.0f;
12 end = glm::pi<float>() * 2.0f;
13 }
14 else {
15 angle = definition.arcStart;
16 end = definition.arcEnd;
17
18 if (end < angle) {
19 end += glm::pi<float>() * 2.0f;
20 }
21 }
22
23 assert(angle < end);
24 assert(definition.refinement > 0);
25
26 float stepSize = (end - angle) / definition.refinement;
27 std::vector<PositionVertex> vertices;
28 std::vector<uint32_t> indices;
29 size_t refinement = static_cast<size_t>(definition.refinement);
30
31 vertices.reserve((refinement + 1) << 1);
32
33 for ( ; angle <= end; angle += stepSize) {
34 glm::vec3 v(std::cos(angle), std::sin(angle), 0.0f);
35
36 vertices.push_back({v * definition.size.x});
37 vertices.push_back({v * definition.size.y});
38 }
39
40 Cogs::Geometry::generateQuadIndices(indices, definition.refinement, 0, true);
41
42 m->setVertexData(vertices.data(), vertices.size());
43 m->setIndexData(indices.data(), indices.size());
44 m->setBounds(computeBoundingBoxFromVertexFormat(vertices.begin(), vertices.end()));
45 }
46}
COGSFOUNDATION_API void generateQuadIndices(std::vector< uint32_t > &dest, size_t quadCount, uint32_t vertexNumber, bool sharedVertices)
Generate indices for rendering the specified number of quads from four vertices starting from the giv...