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....
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
@ LineList
List of lines.
Definition: Common.h:120