111 lines
5.7 KiB
C++
111 lines
5.7 KiB
C++
#include "MetaCoreRender/MetaCoreDebugGeometry.h"
|
|
|
|
#include <glm/vec3.hpp>
|
|
|
|
#include <vector>
|
|
|
|
namespace MetaCore {
|
|
|
|
namespace {
|
|
|
|
MetaCoreVertex MetaCoreMakeVertex(const glm::vec3& position, const glm::vec3& normal, const glm::vec4& color) {
|
|
return MetaCoreVertex{position, normal, color};
|
|
}
|
|
|
|
} // namespace
|
|
|
|
bool MetaCoreDebugGeometry::Initialize() {
|
|
std::vector<MetaCoreVertex> gridVertices;
|
|
std::vector<std::uint32_t> gridIndices;
|
|
std::uint32_t gridIndex = 0;
|
|
|
|
constexpr int gridHalfExtent = 10;
|
|
for (int step = -gridHalfExtent; step <= gridHalfExtent; ++step) {
|
|
const bool isCenterLine = step == 0;
|
|
const glm::vec4 lineColor = isCenterLine
|
|
? glm::vec4(0.34F, 0.38F, 0.42F, 1.0F)
|
|
: glm::vec4(0.22F, 0.24F, 0.28F, 1.0F);
|
|
|
|
gridVertices.push_back(MetaCoreMakeVertex(glm::vec3(static_cast<float>(step), 0.0F, -static_cast<float>(gridHalfExtent)), glm::vec3(0.0F), lineColor));
|
|
gridVertices.push_back(MetaCoreMakeVertex(glm::vec3(static_cast<float>(step), 0.0F, static_cast<float>(gridHalfExtent)), glm::vec3(0.0F), lineColor));
|
|
gridIndices.push_back(gridIndex++);
|
|
gridIndices.push_back(gridIndex++);
|
|
|
|
gridVertices.push_back(MetaCoreMakeVertex(glm::vec3(-static_cast<float>(gridHalfExtent), 0.0F, static_cast<float>(step)), glm::vec3(0.0F), lineColor));
|
|
gridVertices.push_back(MetaCoreMakeVertex(glm::vec3(static_cast<float>(gridHalfExtent), 0.0F, static_cast<float>(step)), glm::vec3(0.0F), lineColor));
|
|
gridIndices.push_back(gridIndex++);
|
|
gridIndices.push_back(gridIndex++);
|
|
}
|
|
|
|
std::vector<MetaCoreVertex> axesVertices{
|
|
MetaCoreMakeVertex(glm::vec3(0.0F), glm::vec3(0.0F), glm::vec4(0.95F, 0.28F, 0.24F, 1.0F)),
|
|
MetaCoreMakeVertex(glm::vec3(1.5F, 0.0F, 0.0F), glm::vec3(0.0F), glm::vec4(0.95F, 0.28F, 0.24F, 1.0F)),
|
|
MetaCoreMakeVertex(glm::vec3(0.0F), glm::vec3(0.0F), glm::vec4(0.30F, 0.78F, 0.32F, 1.0F)),
|
|
MetaCoreMakeVertex(glm::vec3(0.0F, 1.5F, 0.0F), glm::vec3(0.0F), glm::vec4(0.30F, 0.78F, 0.32F, 1.0F)),
|
|
MetaCoreMakeVertex(glm::vec3(0.0F), glm::vec3(0.0F), glm::vec4(0.28F, 0.53F, 0.95F, 1.0F)),
|
|
MetaCoreMakeVertex(glm::vec3(0.0F, 0.0F, 1.5F), glm::vec3(0.0F), glm::vec4(0.28F, 0.53F, 0.95F, 1.0F))
|
|
};
|
|
std::vector<std::uint32_t> axesIndices{0, 1, 2, 3, 4, 5};
|
|
|
|
const glm::vec4 cubeColor(1.0F, 1.0F, 1.0F, 1.0F);
|
|
std::vector<MetaCoreVertex> cubeVertices{
|
|
MetaCoreMakeVertex(glm::vec3(-0.5F, -0.5F, 0.5F), glm::vec3(0.0F, 0.0F, 1.0F), cubeColor),
|
|
MetaCoreMakeVertex(glm::vec3( 0.5F, -0.5F, 0.5F), glm::vec3(0.0F, 0.0F, 1.0F), cubeColor),
|
|
MetaCoreMakeVertex(glm::vec3( 0.5F, 0.5F, 0.5F), glm::vec3(0.0F, 0.0F, 1.0F), cubeColor),
|
|
MetaCoreMakeVertex(glm::vec3(-0.5F, 0.5F, 0.5F), glm::vec3(0.0F, 0.0F, 1.0F), cubeColor),
|
|
MetaCoreMakeVertex(glm::vec3(-0.5F, -0.5F, -0.5F), glm::vec3(0.0F, 0.0F, -1.0F), cubeColor),
|
|
MetaCoreMakeVertex(glm::vec3( 0.5F, -0.5F, -0.5F), glm::vec3(0.0F, 0.0F, -1.0F), cubeColor),
|
|
MetaCoreMakeVertex(glm::vec3( 0.5F, 0.5F, -0.5F), glm::vec3(0.0F, 0.0F, -1.0F), cubeColor),
|
|
MetaCoreMakeVertex(glm::vec3(-0.5F, 0.5F, -0.5F), glm::vec3(0.0F, 0.0F, -1.0F), cubeColor),
|
|
MetaCoreMakeVertex(glm::vec3(-0.5F, 0.5F, 0.5F), glm::vec3(-1.0F, 0.0F, 0.0F), cubeColor),
|
|
MetaCoreMakeVertex(glm::vec3(-0.5F, 0.5F, -0.5F), glm::vec3(-1.0F, 0.0F, 0.0F), cubeColor),
|
|
MetaCoreMakeVertex(glm::vec3(-0.5F, -0.5F, -0.5F), glm::vec3(-1.0F, 0.0F, 0.0F), cubeColor),
|
|
MetaCoreMakeVertex(glm::vec3(-0.5F, -0.5F, 0.5F), glm::vec3(-1.0F, 0.0F, 0.0F), cubeColor),
|
|
MetaCoreMakeVertex(glm::vec3( 0.5F, 0.5F, 0.5F), glm::vec3(1.0F, 0.0F, 0.0F), cubeColor),
|
|
MetaCoreMakeVertex(glm::vec3( 0.5F, 0.5F, -0.5F), glm::vec3(1.0F, 0.0F, 0.0F), cubeColor),
|
|
MetaCoreMakeVertex(glm::vec3( 0.5F, -0.5F, -0.5F), glm::vec3(1.0F, 0.0F, 0.0F), cubeColor),
|
|
MetaCoreMakeVertex(glm::vec3( 0.5F, -0.5F, 0.5F), glm::vec3(1.0F, 0.0F, 0.0F), cubeColor),
|
|
MetaCoreMakeVertex(glm::vec3(-0.5F, 0.5F, -0.5F), glm::vec3(0.0F, 1.0F, 0.0F), cubeColor),
|
|
MetaCoreMakeVertex(glm::vec3( 0.5F, 0.5F, -0.5F), glm::vec3(0.0F, 1.0F, 0.0F), cubeColor),
|
|
MetaCoreMakeVertex(glm::vec3( 0.5F, 0.5F, 0.5F), glm::vec3(0.0F, 1.0F, 0.0F), cubeColor),
|
|
MetaCoreMakeVertex(glm::vec3(-0.5F, 0.5F, 0.5F), glm::vec3(0.0F, 1.0F, 0.0F), cubeColor),
|
|
MetaCoreMakeVertex(glm::vec3(-0.5F, -0.5F, -0.5F), glm::vec3(0.0F, -1.0F, 0.0F), cubeColor),
|
|
MetaCoreMakeVertex(glm::vec3( 0.5F, -0.5F, -0.5F), glm::vec3(0.0F, -1.0F, 0.0F), cubeColor),
|
|
MetaCoreMakeVertex(glm::vec3( 0.5F, -0.5F, 0.5F), glm::vec3(0.0F, -1.0F, 0.0F), cubeColor),
|
|
MetaCoreMakeVertex(glm::vec3(-0.5F, -0.5F, 0.5F), glm::vec3(0.0F, -1.0F, 0.0F), cubeColor)
|
|
};
|
|
|
|
std::vector<std::uint32_t> cubeIndices{
|
|
0, 1, 2, 0, 2, 3,
|
|
4, 6, 5, 4, 7, 6,
|
|
8, 9, 10, 8, 10, 11,
|
|
12, 14, 13, 12, 15, 14,
|
|
16, 17, 18, 16, 18, 19,
|
|
20, 22, 21, 20, 23, 22
|
|
};
|
|
|
|
return GridMesh_.Build(gridVertices, gridIndices, MetaCorePrimitiveType::Lines)
|
|
&& AxesMesh_.Build(axesVertices, axesIndices, MetaCorePrimitiveType::Lines)
|
|
&& CubeMesh_.Build(cubeVertices, cubeIndices, MetaCorePrimitiveType::Triangles);
|
|
}
|
|
|
|
void MetaCoreDebugGeometry::Shutdown() {
|
|
GridMesh_.Shutdown();
|
|
AxesMesh_.Shutdown();
|
|
CubeMesh_.Shutdown();
|
|
}
|
|
|
|
const MetaCoreMesh& MetaCoreDebugGeometry::GetGridMesh() const {
|
|
return GridMesh_;
|
|
}
|
|
|
|
const MetaCoreMesh& MetaCoreDebugGeometry::GetAxesMesh() const {
|
|
return AxesMesh_;
|
|
}
|
|
|
|
const MetaCoreMesh& MetaCoreDebugGeometry::GetCubeMesh() const {
|
|
return CubeMesh_;
|
|
}
|
|
|
|
} // namespace MetaCore
|