Cogs.Core
MeshGeneratorCube.h
1#pragma once
2
3#include "MeshGeneratorCommon.h"
4
5namespace
6{
7 void planeFactory(Mesh * mesh, const ShapeDefinition & definition)
8 {
9 //Assumes XY plane, ignores Z
10 auto & s = definition.size;
11
12 std::vector<PositionNormalTexVertex> vertexData = {
13 { glm::vec3(-s.x, -s.y, 0.f), glm::vec3(0.f, 0.f, 1.f), glm::vec2(0.f, 0.f) },
14 { glm::vec3( s.x, -s.y, 0.f), glm::vec3(0.f, 0.f, 1.f), glm::vec2(1.f, 0.f) },
15 { glm::vec3( s.x, s.y, 0.f), glm::vec3(0.f, 0.f, 1.f), glm::vec2(1.f, 1.f) },
16
17 { glm::vec3(-s.x, -s.y, 0.f), glm::vec3(0.f, 0.f, 1.f), glm::vec2(0.f, 0.f) },
18 { glm::vec3( s.x, s.y, 0.f), glm::vec3(0.f, 0.f, 1.f), glm::vec2(1.f, 1.f) },
19 { glm::vec3(-s.x, s.y, 0.f), glm::vec3(0.f, 0.f, 1.f), glm::vec2(0.f, 1.f) },
20 };
21
22 std::vector<glm::vec3> tangents{
23 glm::vec3(1.f, 0.f, 0.f),
24 glm::vec3(1.f, 0.f, 0.f),
25 glm::vec3(1.f, 0.f, 0.f),
26
27 glm::vec3(1.f, 0.f, 0.f),
28 glm::vec3(1.f, 0.f, 0.f),
29 glm::vec3(1.f, 0.f, 0.f),
30 };
31
32 mesh->setVertexData(vertexData.data(), vertexData.size());
33 mesh->setTangents(tangents);
34 mesh->setBounds(computeBoundingBoxFromVertexFormat(vertexData.begin(), vertexData.end()));
35 }
36
37 void wireCubeFactory(Mesh* mesh, const ShapeDefinition & definition)
38 {
39 auto & s = definition.size;
40 std::vector<glm::vec3> vertices = {
41 glm::vec3(-s.x, -s.y, -s.z),
42 glm::vec3( s.x, -s.y, -s.z),
43 glm::vec3( s.x, s.y, -s.z),
44 glm::vec3(-s.x, s.y, -s.z),
45
46 glm::vec3(-s.x, -s.y, s.z),
47 glm::vec3( s.x, -s.y, s.z),
48 glm::vec3( s.x, s.y, s.z),
49 glm::vec3(-s.x, s.y, s.z)
50 };
51
52 const uint32_t indices[2*12] = {
53 0, 1,
54 1, 2,
55 2, 3,
56 3, 0,
57
58 4, 5,
59 5, 6,
60 6, 7,
61 7, 4,
62
63 0, 4,
64 1, 5,
65 2, 6,
66 3, 7
67 };
68
69 mesh->setPositions(vertices);
70 mesh->setIndexData(indices, 2*12);
71 mesh->primitiveType = Cogs::PrimitiveType::LineList;
72 mesh->setBounds(Cogs::Geometry::computeBoundingBox(vertices.begin(), vertices.end()));
73 }
74
75 void cubeTex2DFactory(Mesh * mesh, const ShapeDefinition & definition)
76 {
77 auto & s = definition.size;
78
79 std::vector<PositionNormalTexVertex> vtx {
80 { glm::vec3( s.x, -s.y, -s.z), glm::vec3( 1.f, 0.f, 0.f), glm::vec2(0.f, 0.f) },
81 { glm::vec3( s.x, s.y, -s.z), glm::vec3( 1.f, 0.f, 0.f), glm::vec2(1.f, 0.f) },
82 { glm::vec3( s.x, s.y, s.z), glm::vec3( 1.f, 0.f, 0.f), glm::vec2(1.f, 1.f) },
83 { glm::vec3( s.x, -s.y, s.z), glm::vec3( 1.f, 0.f, 0.f), glm::vec2(0.f, 1.f) },
84
85 { glm::vec3(-s.x, -s.y, -s.z), glm::vec3(-1.f, 0.f, 0.f), glm::vec2(0.f, 0.f) },
86 { glm::vec3(-s.x, -s.y, s.z), glm::vec3(-1.f, 0.f, 0.f), glm::vec2(0.f, 1.f) },
87 { glm::vec3(-s.x, s.y, s.z), glm::vec3(-1.f, 0.f, 0.f), glm::vec2(1.f, 1.f) },
88 { glm::vec3(-s.x, s.y, -s.z), glm::vec3(-1.f, 0.f, 0.f), glm::vec2(1.f, 0.f) },
89
90 { glm::vec3(-s.x, s.y, -s.z), glm::vec3( 0.f, 1.f, 0.f), glm::vec2(0.f, 0.f) },
91 { glm::vec3(-s.x, s.y, s.z), glm::vec3( 0.f, 1.f, 0.f), glm::vec2(0.f, 1.f) },
92 { glm::vec3( s.x, s.y, s.z), glm::vec3( 0.f, 1.f, 0.f), glm::vec2(1.f, 1.f) },
93 { glm::vec3( s.x, s.y, -s.z), glm::vec3( 0.f, 1.f, 0.f), glm::vec2(1.f, 0.f) },
94
95 { glm::vec3(-s.x, -s.y, -s.z), glm::vec3( 0.f, -1.f, 0.f), glm::vec2(0.f, 0.f) },
96 { glm::vec3( s.x, -s.y, -s.z), glm::vec3( 0.f, -1.f, 0.f), glm::vec2(1.f, 0.f) },
97 { glm::vec3( s.x, -s.y, s.z), glm::vec3( 0.f, -1.f, 0.f), glm::vec2(1.f, 1.f) },
98 { glm::vec3(-s.x, -s.y, s.z), glm::vec3( 0.f, -1.f, 0.f), glm::vec2(0.f, 1.f) },
99
100 { glm::vec3(-s.x, -s.y, s.z), glm::vec3( 0.f, 0.f, 1.f), glm::vec2(0.f, 0.f) },
101 { glm::vec3( s.x, -s.y, s.z), glm::vec3( 0.f, 0.f, 1.f), glm::vec2(1.f, 0.f) },
102 { glm::vec3( s.x, s.y, s.z), glm::vec3( 0.f, 0.f, 1.f), glm::vec2(1.f, 1.f) },
103 { glm::vec3(-s.x, s.y, s.z), glm::vec3( 0.f, 0.f, 1.f), glm::vec2(0.f, 1.f) },
104
105 { glm::vec3(-s.x, -s.y, -s.z), glm::vec3( 0.f, 0.f, -1.f), glm::vec2(0.f, 0.f) },
106 { glm::vec3(-s.x, s.y, -s.z), glm::vec3( 0.f, 0.f, -1.f), glm::vec2(0.f, 1.f) },
107 { glm::vec3( s.x, s.y, -s.z), glm::vec3( 0.f, 0.f, -1.f), glm::vec2(1.f, 1.f) },
108 { glm::vec3( s.x, -s.y, -s.z), glm::vec3( 0.f, 0.f, -1.f), glm::vec2(1.f, 0.f) }
109 };
110
111 std::vector<glm::vec3> tangents{
112 glm::vec3(0.f, 1.f, 0.f),
113 glm::vec3(0.f, 1.f, 0.f),
114 glm::vec3(0.f, 1.f, 0.f),
115 glm::vec3(0.f, 1.f, 0.f),
116
117 glm::vec3(0.f, -1.f, 0.f),
118 glm::vec3(0.f, -1.f, 0.f),
119 glm::vec3(0.f, -1.f, 0.f),
120 glm::vec3(0.f, -1.f, 0.f),
121
122 glm::vec3(-1.f, 0.f, 0.f),
123 glm::vec3(-1.f, 0.f, 0.f),
124 glm::vec3(-1.f, 0.f, 0.f),
125 glm::vec3(-1.f, 0.f, 0.f),
126
127 glm::vec3(1.f, 0.f, 0.f),
128 glm::vec3(1.f, 0.f, 0.f),
129 glm::vec3(1.f, 0.f, 0.f),
130 glm::vec3(1.f, 0.f, 0.f),
131
132 glm::vec3(1.f, 0.f, 0.f),
133 glm::vec3(1.f, 0.f, 0.f),
134 glm::vec3(1.f, 0.f, 0.f),
135 glm::vec3(1.f, 0.f, 0.f),
136
137 glm::vec3(-1.f, 0.f, 0.f),
138 glm::vec3(-1.f, 0.f, 0.f),
139 glm::vec3(-1.f, 0.f, 0.f),
140 glm::vec3(-1.f, 0.f, 0.f),
141 };
142
143 static const std::vector<uint32_t> ix{
144 0, 1, 2,
145 0, 2, 3,
146
147 4, 5, 6,
148 4, 6, 7,
149
150 8, 9, 10,
151 8, 10, 11,
152
153 12, 13, 14,
154 12, 14, 15,
155
156 16, 17, 18,
157 16, 18, 19,
158
159 20, 21, 22,
160 20, 22, 23
161 };
162
163 mesh->setVertexData(vtx.data(), vtx.size());
164 mesh->setIndexData(ix.data(), ix.size());
165 mesh->setTangents(tangents);
166 mesh->setBounds(computeBoundingBoxFromVertexFormat(vtx.begin(), vtx.end()));
167 }
168}
Meshes contain streams of vertex data in addition to index data and options defining geometry used fo...
Definition: Mesh.h:265
void setTangents(std::span< const glm::vec3 > tangents)
Set the tangent data of the Mesh.
Definition: Mesh.h:448
void setIndexData(const uint32_t *data, size_t count)
Convenience method for setting index data from a raw pointer to data and count number of elements.
Definition: Mesh.h:705
void setBounds(Geometry::BoundingBox box)
Set custom bounds for the mesh.
Definition: Mesh.h:298
void setVertexData(Element *elements, size_t count)
Set vertex data.
Definition: Mesh.h:754
void setPositions(std::span< const glm::vec3 > positions)
Set the position data of the Mesh.
Definition: Mesh.h:315
Defines creation values for a unique shape.
Definition: ShapeType.h:74
@ LineList
List of lines.
Definition: Common.h:120