Cogs.Core
ExtrusionGenerator.h
1#pragma once
2
3#include "Base.h"
4
5#include "Utilities/Math.h"
6
7
8namespace Cogs
9{
10 namespace Geometry
11 {
13 {
14 public:
15 static bool generateCrossSections(
16 glm::vec3 * vertices,
17 int numSections,
18 const glm::vec3 * crossSectionElements,
19 int numSegments,
20 const glm::quat * rotations);
21
22 static bool generateCrossSections(
23 glm::vec3 * vertices,
24 int numSections,
25 const glm::vec3 * crossSectionElements,
26 const glm::vec3 * crossSectionElements2,
27 const float * morphs,
28 int numSegments,
29 const glm::quat * rotations);
30
32 glm::vec3 * vertices,
33 glm::vec3 * normals,
34 int numVertices);
35
36 static void modulateSections(
37 glm::vec3 * vertices,
38 const int numSections,
39 const int numSegments,
40 const float * values,
41 const size_t stride = 1);
42
43 static void modulateVertices(
44 glm::vec3 * vertices,
45 int numVertices,
46 float * values);
47
48 static void offsetCrossSections(
49 glm::vec3 * vertices,
50 int numSections,
51 int numSegments,
52 const glm::vec3 * positions);
53
54 static void colorSections(
55 uint32_t * colors,
56 int numSections,
57 int numSegments,
58 uint32_t * colorValues);
59
60 static void generateTriangleIndices(
61 int32_t * indices,
62 int numSections,
63 int numSegments,
64 bool closed,
65 bool useTexture,
66 int32_t offset = 0);
67
68 static void generateTriangleIndices(
69 uint32_t * indices,
70 int numSections,
71 int numSegments,
72 bool closed,
73 bool useTexture,
74 int32_t offset = 0);
75
76 static void generateDepthBasedTextureCoordinates(
77 const size_t pathLength,
78 const size_t numSegments,
79 const float * depths,
80 const float * offsets,
81 const size_t offsetStride,
82 glm::vec2 * texCoords);
83
84 static bool generateRotations(const glm::vec3 * directions, const int numDirections, const glm::vec3 & primaryAxis, glm::quat * rotations)
85 {
86 if (!directions || !numDirections || !rotations) return false;
87
88 for (int i = 0; i < numDirections; ++i) {
89 rotations[i] = Cogs::Core::getRotation(primaryAxis, directions[i]);
90 }
91
92 return true;
93 }
94 };
95 }
96}
@ Geometry
Store entity vector fields (vector<vec3>, vector<vec2>, vector<int>, vector<float>).
Contains all Cogs related functionality.
Definition: FieldSetter.h:23
static void offsetCrossSections(glm::vec3 *vertices, int numSections, int numSegments, const glm::vec3 *positions)
Offset vertices with per section positions.
static bool generateCrossSections(glm::vec3 *vertices, int numSections, const glm::vec3 *crossSectionElements, int numSegments, const glm::quat *rotations)
Generates cross section vertices in vertices from the cross section definition given.
static void modulateVertices(glm::vec3 *vertices, int numVertices, float *values)
Modulate extrusion vertices with per vertex data.
static void modulateSections(glm::vec3 *vertices, const int numSections, const int numSegments, const float *values, const size_t stride=1)
Modulate extrusion vertices with per section data.
static void colorSections(uint32_t *colors, int numSections, int numSegments, uint32_t *colorValues)
Generate color data per vertex from per section data.
static void generateSimpleExtrusionNormals(glm::vec3 *vertices, glm::vec3 *normals, int numVertices)
Generates extrusion normals from the vertices given.
static void generateTriangleIndices(int32_t *indices, int numSections, int numSegments, bool closed, bool useTexture, int32_t offset=0)
Generate legacy triangle extrusion indices.