3#include "MeshGeneratorCommon.h"
7 void cylinderFactory(
Mesh * m,
const ShapeDefinition & definition,
int kRefinementLevels,
int kMaxSamples)
9 int n = samplesFromLevel(definition.refinement, kRefinementLevels, kMaxSamples) + 3;
12 auto & r = definition.size.x;
13 auto & h = definition.size.z;
17 std::vector<PositionNormalTexVertex> V(2 * n + 4 * (n + 1));
18 for (
int i = 0; i < n; i++) {
19 float u = (i + 0.5f) /
float(n);
21 V[n + 4 * (n + 1) + i] =
PositionNormalTexVertex({ glm::vec3(0.f, 0.f, h), glm::vec3(0.f, 0.f, 1.f), glm::vec2(u, 1.f) });
27 for (
int i = 0; i <= n; i++) {
28 float u = float(i) / float(n);
29 float cu = r * std::cos(glm::pi<float>() * 2.0f * u);
30 float su = r * std::sin(glm::pi<float>() * 2.0f * u);
31 V[n + 0 * (n + 1) + i] =
PositionNormalTexVertex({ glm::vec3(su, cu, -h), glm::vec3(0.f, 0.f, -1.f), glm::vec2(u, 0.f) });
32 V[n + 1 * (n + 1) + i] =
PositionNormalTexVertex({ glm::vec3(su, cu, -h), glm::vec3(su, cu, 0.f), glm::vec2(u, 0.f) });
33 V[n + 2 * (n + 1) + i] =
PositionNormalTexVertex({ glm::vec3(su, cu, h), glm::vec3(su, cu, 0.f), glm::vec2(u, 1.f) });
34 V[n + 3 * (n + 1) + i] =
PositionNormalTexVertex({ glm::vec3(su, cu, h), glm::vec3(0.f, 0.f, 1.f), glm::vec2(u, 1.f) });
37 std::vector<uint32_t> I;
39 for (
int i = 0; i < n; i++) {
42 I.push_back(n + i + 1);
45 for (
int i = 0; i < n; i++) {
46 I.push_back(n + 1 * (n + 1) + i);
47 I.push_back(n + 2 * (n + 1) + i);
48 I.push_back(n + 1 * (n + 1) + i + 1);
50 I.push_back(n + 1 * (n + 1) + i + 1);
51 I.push_back(n + 2 * (n + 1) + i);
52 I.push_back(n + 2 * (n + 1) + i + 1);
55 for (
int i = 0; i < n; i++) {
56 I.push_back(n + 3 * (n + 1) + i + 1);
57 I.push_back(n + 3 * (n + 1) + i);
58 I.push_back(n + 4 * (n + 1) + i);
63 m->
setBounds(computeBoundingBoxFromVertexFormat(V.begin(), V.end()));
Meshes contain streams of vertex data in addition to index data and options defining geometry used fo...
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.
void setBounds(Geometry::BoundingBox box)
Set custom bounds for the mesh.
void setVertexData(Element *elements, size_t count)
Set vertex data.
Defines creation values for a unique shape.