#pragma once #include "geometry.hpp" namespace icosphere { constexpr vec3 vertices[] = { { 0.000000f, -1.000000f, 0.000000f }, { 0.723607f, -0.447220f, 0.525725f }, { -0.276388f, -0.447220f, 0.850649f }, { -0.894426f, -0.447216f, 0.000000f }, { -0.276388f, -0.447220f, -0.850649f }, { 0.723607f, -0.447220f, -0.525725f }, { 0.276388f, 0.447220f, 0.850649f }, { -0.723607f, 0.447220f, 0.525725f }, { -0.723607f, 0.447220f, -0.525725f }, { 0.276388f, 0.447220f, -0.850649f }, { 0.894426f, 0.447216f, 0.000000f }, { 0.000000f, 1.000000f, 0.000000f }, { -0.162456f, -0.850654f, 0.499995f }, { 0.425323f, -0.850654f, 0.309011f }, { 0.262869f, -0.525738f, 0.809012f }, { 0.850648f, -0.525736f, 0.000000f }, { 0.425323f, -0.850654f, -0.309011f }, { -0.525730f, -0.850652f, 0.000000f }, { -0.688189f, -0.525736f, 0.499997f }, { -0.162456f, -0.850654f, -0.499995f }, { -0.688189f, -0.525736f, -0.499997f }, { 0.262869f, -0.525738f, -0.809012f }, { 0.951058f, 0.000000f, 0.309013f }, { 0.951058f, 0.000000f, -0.309013f }, { 0.000000f, 0.000000f, 1.000000f }, { 0.587786f, 0.000000f, 0.809017f }, { -0.951058f, 0.000000f, 0.309013f }, { -0.587786f, 0.000000f, 0.809017f }, { -0.587786f, 0.000000f, -0.809017f }, { -0.951058f, 0.000000f, -0.309013f }, { 0.587786f, 0.000000f, -0.809017f }, { 0.000000f, 0.000000f, -1.000000f }, { 0.688189f, 0.525736f, 0.499997f }, { -0.262869f, 0.525738f, 0.809012f }, { -0.850648f, 0.525736f, 0.000000f }, { -0.262869f, 0.525738f, -0.809012f }, { 0.688189f, 0.525736f, -0.499997f }, { 0.162456f, 0.850654f, 0.499995f }, { 0.525730f, 0.850652f, 0.000000f }, { -0.425323f, 0.850654f, 0.309011f }, { -0.425323f, 0.850654f, -0.309011f }, { 0.162456f, 0.850654f, -0.499995f }, }; constexpr vec3 normals[] = { { 0.102400f, -0.943500f, 0.315100f }, { 0.700200f, -0.661700f, 0.268000f }, { -0.268000f, -0.943500f, 0.194700f }, { -0.268000f, -0.943500f, -0.194700f }, { 0.102400f, -0.943500f, -0.315100f }, { 0.905000f, -0.330400f, 0.268000f }, { 0.024700f, -0.330400f, 0.943500f }, { -0.889700f, -0.330400f, 0.315100f }, { -0.574600f, -0.330400f, -0.748800f }, { 0.534600f, -0.330400f, -0.777900f }, { 0.802600f, -0.125600f, 0.583100f }, { -0.306600f, -0.125600f, 0.943500f }, { -0.992100f, -0.125600f, -0.000000f }, { -0.306600f, -0.125600f, -0.943500f }, { 0.802600f, -0.125600f, -0.583100f }, { 0.408900f, 0.661700f, 0.628400f }, { -0.471300f, 0.661700f, 0.583100f }, { -0.700200f, 0.661700f, -0.268000f }, { 0.038500f, 0.661700f, -0.748800f }, { 0.724000f, 0.661700f, -0.194700f }, { 0.268000f, 0.943500f, -0.194700f }, { 0.491100f, 0.794700f, -0.356800f }, { 0.408900f, 0.661700f, -0.628400f }, { -0.102400f, 0.943500f, -0.315100f }, { -0.187600f, 0.794700f, -0.577300f }, { -0.471300f, 0.661700f, -0.583100f }, { -0.331300f, 0.943500f, -0.000000f }, { -0.607100f, 0.794700f, -0.000000f }, { -0.700200f, 0.661700f, 0.268000f }, { -0.102400f, 0.943500f, 0.315100f }, { -0.187600f, 0.794700f, 0.577300f }, { 0.038500f, 0.661700f, 0.748800f }, { 0.268000f, 0.943500f, 0.194700f }, { 0.491100f, 0.794700f, 0.356800f }, { 0.724000f, 0.661700f, 0.194700f }, { 0.889700f, 0.330400f, -0.315100f }, { 0.794700f, 0.187600f, -0.577300f }, { 0.574600f, 0.330400f, -0.748800f }, { -0.024700f, 0.330400f, -0.943500f }, { -0.303500f, 0.187600f, -0.934200f }, { -0.534600f, 0.330400f, -0.777900f }, { -0.905000f, 0.330400f, -0.268000f }, { -0.982200f, 0.187600f, -0.000000f }, { -0.905000f, 0.330400f, 0.268000f }, { -0.534600f, 0.330400f, 0.777900f }, { -0.303500f, 0.187600f, 0.934200f }, { -0.024700f, 0.330400f, 0.943500f }, { 0.574600f, 0.330400f, 0.748800f }, { 0.794700f, 0.187600f, 0.577300f }, { 0.889700f, 0.330400f, 0.315100f }, { 0.306600f, 0.125600f, -0.943500f }, { 0.303500f, -0.187600f, -0.934200f }, { 0.024700f, -0.330400f, -0.943500f }, { -0.802600f, 0.125600f, -0.583100f }, { -0.794700f, -0.187600f, -0.577300f }, { -0.889700f, -0.330400f, -0.315100f }, { -0.802600f, 0.125600f, 0.583100f }, { -0.794700f, -0.187600f, 0.577300f }, { -0.574600f, -0.330400f, 0.748800f }, { 0.306600f, 0.125600f, 0.943500f }, { 0.303500f, -0.187600f, 0.934200f }, { 0.534600f, -0.330400f, 0.777900f }, { 0.992100f, 0.125600f, -0.000000f }, { 0.982200f, -0.187600f, -0.000000f }, { 0.905000f, -0.330400f, -0.268000f }, { 0.471300f, -0.661700f, -0.583100f }, { 0.187600f, -0.794700f, -0.577300f }, { -0.038500f, -0.661700f, -0.748800f }, { -0.408900f, -0.661700f, -0.628400f }, { -0.491100f, -0.794700f, -0.356800f }, { -0.724000f, -0.661700f, -0.194700f }, { -0.724000f, -0.661700f, 0.194700f }, { -0.491100f, -0.794700f, 0.356800f }, { -0.408900f, -0.661700f, 0.628400f }, { 0.700200f, -0.661700f, -0.268000f }, { 0.607100f, -0.794700f, -0.000000f }, { 0.331300f, -0.943500f, -0.000000f }, { -0.038500f, -0.661700f, 0.748800f }, { 0.187600f, -0.794700f, 0.577300f }, { 0.471300f, -0.661700f, 0.583100f }, }; constexpr face_vn faces[] = { {{ 0, 0}, {13, 0}, {12, 0}}, {{ 1, 1}, {13, 1}, {15, 1}}, {{ 0, 2}, {12, 2}, {17, 2}}, {{ 0, 3}, {17, 3}, {19, 3}}, {{ 0, 4}, {19, 4}, {16, 4}}, {{ 1, 5}, {15, 5}, {22, 5}}, {{ 2, 6}, {14, 6}, {24, 6}}, {{ 3, 7}, {18, 7}, {26, 7}}, {{ 4, 8}, {20, 8}, {28, 8}}, {{ 5, 9}, {21, 9}, {30, 9}}, {{ 1, 10}, {22, 10}, {25, 10}}, {{ 2, 11}, {24, 11}, {27, 11}}, {{ 3, 12}, {26, 12}, {29, 12}}, {{ 4, 13}, {28, 13}, {31, 13}}, {{ 5, 14}, {30, 14}, {23, 14}}, {{ 6, 15}, {32, 15}, {37, 15}}, {{ 7, 16}, {33, 16}, {39, 16}}, {{ 8, 17}, {34, 17}, {40, 17}}, {{ 9, 18}, {35, 18}, {41, 18}}, {{10, 19}, {36, 19}, {38, 19}}, {{38, 20}, {41, 20}, {11, 20}}, {{38, 21}, {36, 21}, {41, 21}}, {{36, 22}, { 9, 22}, {41, 22}}, {{41, 23}, {40, 23}, {11, 23}}, {{41, 24}, {35, 24}, {40, 24}}, {{35, 25}, { 8, 25}, {40, 25}}, {{40, 26}, {39, 26}, {11, 26}}, {{40, 27}, {34, 27}, {39, 27}}, {{34, 28}, { 7, 28}, {39, 28}}, {{39, 29}, {37, 29}, {11, 29}}, {{39, 30}, {33, 30}, {37, 30}}, {{33, 31}, { 6, 31}, {37, 31}}, {{37, 32}, {38, 32}, {11, 32}}, {{37, 33}, {32, 33}, {38, 33}}, {{32, 34}, {10, 34}, {38, 34}}, {{23, 35}, {36, 35}, {10, 35}}, {{23, 36}, {30, 36}, {36, 36}}, {{30, 37}, { 9, 37}, {36, 37}}, {{31, 38}, {35, 38}, { 9, 38}}, {{31, 39}, {28, 39}, {35, 39}}, {{28, 40}, { 8, 40}, {35, 40}}, {{29, 41}, {34, 41}, { 8, 41}}, {{29, 42}, {26, 42}, {34, 42}}, {{26, 43}, { 7, 43}, {34, 43}}, {{27, 44}, {33, 44}, { 7, 44}}, {{27, 45}, {24, 45}, {33, 45}}, {{24, 46}, { 6, 46}, {33, 46}}, {{25, 47}, {32, 47}, { 6, 47}}, {{25, 48}, {22, 48}, {32, 48}}, {{22, 49}, {10, 49}, {32, 49}}, {{30, 50}, {31, 50}, { 9, 50}}, {{30, 51}, {21, 51}, {31, 51}}, {{21, 52}, { 4, 52}, {31, 52}}, {{28, 53}, {29, 53}, { 8, 53}}, {{28, 54}, {20, 54}, {29, 54}}, {{20, 55}, { 3, 55}, {29, 55}}, {{26, 56}, {27, 56}, { 7, 56}}, {{26, 57}, {18, 57}, {27, 57}}, {{18, 58}, { 2, 58}, {27, 58}}, {{24, 59}, {25, 59}, { 6, 59}}, {{24, 60}, {14, 60}, {25, 60}}, {{14, 61}, { 1, 61}, {25, 61}}, {{22, 62}, {23, 62}, {10, 62}}, {{22, 63}, {15, 63}, {23, 63}}, {{15, 64}, { 5, 64}, {23, 64}}, {{16, 65}, {21, 65}, { 5, 65}}, {{16, 66}, {19, 66}, {21, 66}}, {{19, 67}, { 4, 67}, {21, 67}}, {{19, 68}, {20, 68}, { 4, 68}}, {{19, 69}, {17, 69}, {20, 69}}, {{17, 70}, { 3, 70}, {20, 70}}, {{17, 71}, {18, 71}, { 3, 71}}, {{17, 72}, {12, 72}, {18, 72}}, {{12, 73}, { 2, 73}, {18, 73}}, {{15, 74}, {16, 74}, { 5, 74}}, {{15, 75}, {13, 75}, {16, 75}}, {{13, 76}, { 0, 76}, {16, 76}}, {{12, 77}, {14, 77}, { 2, 77}}, {{12, 78}, {13, 78}, {14, 78}}, {{13, 79}, { 1, 79}, {14, 79}}, }; constexpr uint32_t num_faces = (sizeof (faces)) / (sizeof (face_vn)); }