10 #ifndef hifi_shared_shapes
11 #define hifi_shared_shapes
18 #include <glm/glm.hpp>
22 using Index = uint32_t;
23 using Vec = glm::vec3;
24 using VertexVector = std::vector<Vec>;
25 using TexCoordVector = std::vector<glm::vec2>;
26 using IndexVector = std::vector<Index>;
29 using Face = std::array<Index, N>;
32 using FaceVector = std::vector<Face<N>>;
36 VertexVector vertices;
37 TexCoordVector texCoords;
40 Solid<N>& fitDimension(
float newMaxDimension) {
41 float maxDimension = 0;
42 for (
const auto& vertex : vertices) {
43 maxDimension = std::max(maxDimension, std::max(std::max(vertex.x, vertex.y), vertex.z));
45 float multiplier = newMaxDimension / maxDimension;
46 for (
auto& vertex : vertices) {
52 Vec getFaceNormal(
size_t faceIndex)
const {
54 const auto& face = faces[faceIndex];
55 for (
size_t i = 0; i < N; ++i) {
56 result += vertices[face[i]];
59 return glm::normalize(result);
64 size_t triangulatedFaceTriangleCount() {
69 size_t triangulatedFaceIndexCount() {
70 return triangulatedFaceTriangleCount<N>() * 3;
73 Solid<3> tesselate(
const Solid<3>& solid,
int count);
74 const Solid<3>& tetrahedron();
75 const Solid<4>& cube();
76 const Solid<3>& octahedron();
77 const Solid<5>& dodecahedron();
78 const Solid<3>& icosahedron();