Cogs.Core
MeshGeneratorCommon.h
1#pragma once
2
3#include "Context.h"
4
5#include "Resources/VertexFormats.h"
6#include "Resources/Mesh.h"
7
8#include <glm/vec4.hpp>
9
10#include <algorithm>
11
12using namespace Cogs::Core;
13
14namespace
15{
28 int refinementLevel(int samples, int levels, int maxSamples)
29 {
30 samples = std::max(1, samples); // refinement level less than 1 is illegal (and log breaks down)
31 int la = int(std::floor(levels * (std::log2(float(samples)) / std::log(float(maxSamples))) + 0.5f));
32 int lb = samples - 1; // linear function for small values, to avoid skipping levels
33 return std::min(std::min(la, lb), levels - 1);
34 }
35
49 int samplesFromLevel(int level, int levels, int maxSamples)
50 {
51 int sa = std::min(maxSamples, int(std::floor(std::pow(maxSamples, float(level) / float(levels)))));
52 int sb = level + 1;
53 return std::max(sa, sb);
54 }
55
57 template<typename VectorIterator>
58 Cogs::Geometry::BoundingBox computeBoundingBoxFromVertexFormat(VectorIterator start, VectorIterator end)
59 {
60 Cogs::Geometry::BoundingBox box;
61
62 while (start != end) {
63 box.expand(start->position);
64 ++start;
65 }
66
67 return box;
68 }
69
70 void coordSysFactory(Mesh * mesh, const ShapeDefinition & definition)
71 {
72 //Assumes XY plane, ignores Z
73 auto & s = definition.size;
74
75 std::vector<PositionColorVertex> vertexData = {
76 { glm::vec4(0.f, 0.f, 0.f, 1.f), glm::vec4(1.f, 0.f, 0.f, 1.f) },
77 { glm::vec4(s.x, 0.f, 0.f, 1.f), glm::vec4(1.f, 0.f, 0.f, 1.f) },
78
79 { glm::vec4(0.f, 0.f, 0.f, 1.f), glm::vec4(0.f, 1.f, 0.f, 1.f) },
80 { glm::vec4(0.f, s.y, 0.f, 1.f), glm::vec4(0.f, 1.f, 0.f, 1.f) },
81
82 { glm::vec4(0.f, 0.f, 0.f, 1.f), glm::vec4(0.f, 0.f, 1.f, 1.f) },
83 { glm::vec4(0.f, 0.f, s.z, 1.f), glm::vec4(0.f, 0.f, 1.f, 1.f) },
84 };
85
86 mesh->setVertexData(vertexData.data(), vertexData.size());
87 mesh->primitiveType = Cogs::PrimitiveType::LineList;
88 mesh->setBounds(computeBoundingBoxFromVertexFormat(vertexData.begin(), vertexData.end()));
89 }
90
91}
Contains the Engine, Renderer, resource managers and other systems needed to run Cogs....
@ LineList
List of lines.
Meshes contain streams of vertex data in addition to index data and options defining geometry used fo...
Definition: Mesh.h:265
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
Defines creation values for a unique shape.
Definition: ShapeType.h:74