dreamcast/geometry/icosphere.hpp

220 lines
8.3 KiB
C++

#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));
}