3#include "MeshGeneratorCommon.h"
7 void coneFactory(
Mesh * m,
const ShapeDefinition & definition,
int kRefinementLevels,
int kMaxSamples)
9 const float nzc = 2.f / std::sqrt(5.f);
10 const float nzs = 1.f / std::sqrt(5.f);
12 const int n = samplesFromLevel(definition.refinement, kRefinementLevels, kMaxSamples) + 3;
15 auto & r = definition.size.x;
16 auto & h = definition.size.z;
18 std::vector<PositionNormalTexVertex> V(2 * n + 2 * (n + 1));
19 for (
int i = 0; i < n; i++) {
20 float u = (i + 0.5f) /
float(n);
21 float cu = std::cos(glm::pi<float>() * 2.0f * u);
22 float su = std::sin(glm::pi<float>() * 2.0f * u);
24 V[n + 2 * (n + 1) + i] =
PositionNormalTexVertex({ glm::vec3(0.f, 0.f, h), glm::vec3(nzc*su, nzc*cu, nzs), 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(nzc*su, nzc*cu, nzs), glm::vec2(u, 0.f) });
35 std::vector<uint32_t> I;
37 for (
int i = 0; i < n; i++) {
40 I.push_back(n + i + 1);
42 for (
int i = 0; i < n; i++) {
43 I.push_back(n + 1 * (n + 1) + i + 1);
44 I.push_back(n + 1 * (n + 1) + i);
45 I.push_back(n + 2 * (n + 1) + i);
50 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.