I originally planned to make this a render-to-texture demo, but this is fairly interesting by itself.
248 lines
12 KiB
C++
248 lines
12 KiB
C++
#pragma once
|
|
|
|
#include "geometry.hpp"
|
|
|
|
namespace heart {
|
|
constexpr position__color vertices[] = {
|
|
{ { 0.000000f, 0.400000f, -0.707107f}, { 1.000000f, 0.611800f, 0.211800f} },
|
|
{ { 0.144430f, -0.400000f, -0.831470f}, { 1.000000f, 0.000000f, 0.674500f} },
|
|
{ { 0.144430f, 0.400000f, -0.831470f}, { 1.000000f, 0.611800f, 0.215700f} },
|
|
{ { 0.317317f, -0.400000f, -0.923880f}, { 1.000000f, 0.000000f, 0.670600f} },
|
|
{ { 0.317317f, 0.400000f, -0.923880f}, { 1.000000f, 0.611800f, 0.211800f} },
|
|
{ { 0.504910f, -0.400000f, -0.980785f}, { 1.000000f, 0.011800f, 0.670600f} },
|
|
{ { 0.504910f, 0.400000f, -0.980785f}, { 1.000000f, 0.611800f, 0.211800f} },
|
|
{ { 0.700000f, -0.400000f, -1.000000f}, { 1.000000f, 0.000000f, 0.670600f} },
|
|
{ { 0.700000f, 0.400000f, -1.000000f}, { 1.000000f, 0.611800f, 0.211800f} },
|
|
{ { 0.895090f, -0.400000f, -0.980785f}, { 1.000000f, 0.000000f, 0.898000f} },
|
|
{ { 0.895090f, 0.400000f, -0.980785f}, { 1.000000f, 0.235300f, 0.843100f} },
|
|
{ { 1.082684f, -0.400000f, -0.923879f}, { 1.000000f, 0.023500f, 0.909800f} },
|
|
{ { 1.082684f, 0.400000f, -0.923879f}, { 1.000000f, 0.611800f, 0.211800f} },
|
|
{ { 1.255570f, -0.400000f, -0.831469f}, { 1.000000f, 0.329400f, 0.866600f} },
|
|
{ { 1.255570f, 0.400000f, -0.831469f}, { 1.000000f, 0.615700f, 0.219600f} },
|
|
{ { 1.407107f, -0.400000f, -0.707107f}, { 1.000000f, 0.282300f, 0.886200f} },
|
|
{ { 1.407107f, 0.400000f, -0.707107f}, { 1.000000f, 0.580400f, 0.384300f} },
|
|
{ { 1.531470f, -0.400000f, -0.555570f}, { 1.000000f, 0.282300f, 0.886200f} },
|
|
{ { 1.531470f, 0.400000f, -0.555570f}, { 1.000000f, 0.051000f, 0.600000f} },
|
|
{ { 1.623880f, -0.400000f, -0.382683f}, { 1.000000f, 0.282300f, 0.886200f} },
|
|
{ { 1.623880f, 0.400000f, -0.382683f}, { 1.000000f, 0.051000f, 0.603900f} },
|
|
{ { 1.680785f, -0.400000f, -0.195090f}, { 1.000000f, 0.615700f, 0.674500f} },
|
|
{ { 1.680785f, 0.400000f, -0.195090f}, { 1.000000f, 0.035300f, 0.776400f} },
|
|
{ { 1.700000f, -0.400000f, 0.000000f}, { 1.000000f, 0.623600f, 0.666700f} },
|
|
{ { 1.700000f, 0.400000f, 0.000000f}, { 0.988200f, 0.003900f, 0.996000f} },
|
|
{ { 1.680785f, -0.400000f, 0.195090f}, { 1.000000f, 0.000000f, 0.909800f} },
|
|
{ { 1.680785f, 0.400000f, 0.195090f}, { 0.843100f, 0.011800f, 0.956800f} },
|
|
{ { 1.623879f, -0.400000f, 0.382684f}, { 1.000000f, 0.011800f, 0.909800f} },
|
|
{ { 1.623879f, 0.400000f, 0.382684f}, { 0.611800f, 0.239200f, 0.976400f} },
|
|
{ { 1.531470f, -0.400000f, 0.555570f}, { 1.000000f, 0.643200f, 0.619700f} },
|
|
{ { 1.531470f, 0.400000f, 0.555570f}, { 0.611800f, 0.231400f, 0.976400f} },
|
|
{ { 1.407107f, 0.400000f, 0.707107f}, { 0.572500f, 0.235300f, 0.976400f} },
|
|
{ { 0.000000f, -0.400000f, -0.707107f}, { 1.000000f, 0.000000f, 0.670600f} },
|
|
{ {-0.000000f, 0.400000f, 2.121320f}, { 0.000000f, 0.807800f, 1.000000f} },
|
|
{ {-0.000000f, -0.400000f, 2.121320f}, { 1.000000f, 0.921500f, 0.000000f} },
|
|
{ { 1.407107f, -0.400000f, 0.707107f}, { 1.000000f, 0.780400f, 0.415700f} },
|
|
{ {-0.144430f, -0.400000f, -0.831470f}, { 0.901900f, 0.439200f, 0.603900f} },
|
|
{ {-0.144430f, 0.400000f, -0.831470f}, { 1.000000f, 0.611800f, 0.211800f} },
|
|
{ {-0.317317f, -0.400000f, -0.923880f}, { 0.670600f, 0.745100f, 0.603900f} },
|
|
{ {-0.317317f, 0.400000f, -0.923880f}, { 1.000000f, 0.607900f, 0.235300f} },
|
|
{ {-0.504910f, -0.400000f, -0.980785f}, { 0.235300f, 0.976400f, 0.196100f} },
|
|
{ {-0.504910f, 0.400000f, -0.980785f}, { 1.000000f, 0.047100f, 0.913700f} },
|
|
{ {-0.700000f, -0.400000f, -1.000000f}, { 0.403900f, 0.917600f, 0.360800f} },
|
|
{ {-0.700000f, 0.400000f, -1.000000f}, { 1.000000f, 0.000000f, 0.909800f} },
|
|
{ {-0.895090f, -0.400000f, -0.980785f}, { 0.403900f, 0.917600f, 0.360800f} },
|
|
{ {-0.895090f, 0.400000f, -0.980785f}, { 1.000000f, 0.000000f, 0.909800f} },
|
|
{ {-1.082683f, -0.400000f, -0.923880f}, { 0.262700f, 0.968600f, 0.223500f} },
|
|
{ {-1.082683f, 0.400000f, -0.923880f}, { 1.000000f, 0.117600f, 0.956800f} },
|
|
{ {-1.255570f, -0.400000f, -0.831470f}, { 0.560800f, 0.831300f, 0.505900f} },
|
|
{ {-1.255570f, 0.400000f, -0.831470f}, { 1.000000f, 0.000000f, 0.956800f} },
|
|
{ {-1.407107f, -0.400000f, -0.707107f}, { 0.776400f, 0.996000f, 0.090200f} },
|
|
{ {-1.407107f, 0.400000f, -0.707107f}, { 1.000000f, 0.117600f, 0.956800f} },
|
|
{ {-1.531470f, -0.400000f, -0.555570f}, { 0.878400f, 0.941100f, 0.305900f} },
|
|
{ {-1.531470f, 0.400000f, -0.555570f}, { 1.000000f, 0.000000f, 0.956800f} },
|
|
{ {-1.623880f, -0.400000f, -0.382683f}, { 0.882300f, 0.933300f, 0.325500f} },
|
|
{ {-1.623880f, 0.400000f, -0.382683f}, { 0.984300f, 1.000000f, 0.019600f} },
|
|
{ {-1.680785f, -0.400000f, -0.195090f}, { 0.745100f, 0.878400f, 0.458900f} },
|
|
{ {-1.680785f, 0.400000f, -0.195090f}, { 0.698000f, 0.741200f, 0.639300f} },
|
|
{ {-1.700000f, -0.400000f, -0.000000f}, { 0.219600f, 0.768600f, 0.639300f} },
|
|
{ {-1.700000f, 0.400000f, -0.000000f}, { 0.254900f, 1.000000f, 0.003900f} },
|
|
{ {-1.680785f, -0.400000f, 0.195090f}, { 0.051000f, 0.203900f, 0.980400f} },
|
|
{ {-1.680785f, 0.400000f, 0.195090f}, { 0.251000f, 1.000000f, 0.003900f} },
|
|
{ {-1.623879f, -0.400000f, 0.382683f}, { 0.054900f, 0.223500f, 0.976400f} },
|
|
{ {-1.623879f, 0.400000f, 0.382683f}, { 0.251000f, 1.000000f, 0.003900f} },
|
|
{ {-1.531470f, -0.400000f, 0.555570f}, { 0.098000f, 0.423500f, 0.901900f} },
|
|
{ {-1.531470f, 0.400000f, 0.555570f}, { 0.251000f, 1.000000f, 0.003900f} },
|
|
{ {-1.407107f, 0.400000f, 0.707107f}, { 0.254900f, 1.000000f, 0.007800f} },
|
|
{ {-1.407107f, -0.400000f, 0.707107f}, { 0.105900f, 0.203900f, 0.980400f} },
|
|
};
|
|
|
|
constexpr vec3 normals[] = {
|
|
{ -0.652500f, -0.000000f, -0.757800f },
|
|
{ -0.471400f, -0.000000f, -0.881900f },
|
|
{ -0.290300f, -0.000000f, -0.956900f },
|
|
{ -0.098000f, -0.000000f, -0.995200f },
|
|
{ 0.098000f, -0.000000f, -0.995200f },
|
|
{ 0.290300f, -0.000000f, -0.956900f },
|
|
{ 0.471400f, -0.000000f, -0.881900f },
|
|
{ 0.634400f, -0.000000f, -0.773000f },
|
|
{ 0.773000f, -0.000000f, -0.634400f },
|
|
{ 0.881900f, -0.000000f, -0.471400f },
|
|
{ 0.956900f, -0.000000f, -0.290300f },
|
|
{ 0.995200f, -0.000000f, -0.098000f },
|
|
{ 0.995200f, -0.000000f, 0.098000f },
|
|
{ 0.956900f, -0.000000f, 0.290300f },
|
|
{ 0.881900f, -0.000000f, 0.471400f },
|
|
{ 0.773000f, -0.000000f, 0.634400f },
|
|
{ -0.000000f, 1.000000f, -0.000000f },
|
|
{ -0.000000f, -1.000000f, -0.000000f },
|
|
{ 0.708900f, -0.000000f, 0.705300f },
|
|
{ 0.652500f, -0.000000f, -0.757800f },
|
|
{ -0.634400f, -0.000000f, -0.773000f },
|
|
{ -0.773000f, -0.000000f, -0.634400f },
|
|
{ -0.881900f, -0.000000f, -0.471400f },
|
|
{ -0.956900f, -0.000000f, -0.290300f },
|
|
{ -0.995200f, -0.000000f, -0.098000f },
|
|
{ -0.995200f, -0.000000f, 0.098000f },
|
|
{ -0.956900f, -0.000000f, 0.290300f },
|
|
{ -0.881900f, -0.000000f, 0.471400f },
|
|
{ -0.773000f, -0.000000f, 0.634400f },
|
|
{ -0.708900f, -0.000000f, 0.705300f },
|
|
};
|
|
|
|
constexpr face_vn faces[] = {
|
|
{{ 0, 0}, { 1, 0}, {32, 0}},
|
|
{{ 2, 1}, { 3, 1}, { 1, 1}},
|
|
{{ 4, 2}, { 5, 2}, { 3, 2}},
|
|
{{ 6, 3}, { 7, 3}, { 5, 3}},
|
|
{{ 8, 4}, { 9, 4}, { 7, 4}},
|
|
{{10, 5}, {11, 5}, { 9, 5}},
|
|
{{12, 6}, {13, 6}, {11, 6}},
|
|
{{14, 7}, {15, 7}, {13, 7}},
|
|
{{16, 8}, {17, 8}, {15, 8}},
|
|
{{18, 9}, {19, 9}, {17, 9}},
|
|
{{20, 10}, {21, 10}, {19, 10}},
|
|
{{22, 11}, {23, 11}, {21, 11}},
|
|
{{24, 12}, {25, 12}, {23, 12}},
|
|
{{26, 13}, {27, 13}, {25, 13}},
|
|
{{28, 14}, {29, 14}, {27, 14}},
|
|
{{30, 15}, {35, 15}, {29, 15}},
|
|
{{ 0, 16}, {18, 16}, {10, 16}},
|
|
{{ 1, 17}, {17, 17}, {25, 17}},
|
|
{{31, 18}, {34, 18}, {35, 18}},
|
|
{{35, 17}, {34, 17}, {32, 17}},
|
|
{{33, 16}, {31, 16}, { 0, 16}},
|
|
{{36, 19}, { 0, 19}, {32, 19}},
|
|
{{38, 6}, {37, 6}, {36, 6}},
|
|
{{40, 5}, {39, 5}, {38, 5}},
|
|
{{42, 4}, {41, 4}, {40, 4}},
|
|
{{44, 3}, {43, 3}, {42, 3}},
|
|
{{46, 2}, {45, 2}, {44, 2}},
|
|
{{48, 1}, {47, 1}, {46, 1}},
|
|
{{50, 20}, {49, 20}, {48, 20}},
|
|
{{52, 21}, {51, 21}, {50, 21}},
|
|
{{54, 22}, {53, 22}, {52, 22}},
|
|
{{56, 23}, {55, 23}, {54, 23}},
|
|
{{58, 24}, {57, 24}, {56, 24}},
|
|
{{60, 25}, {59, 25}, {58, 25}},
|
|
{{62, 26}, {61, 26}, {60, 26}},
|
|
{{64, 27}, {63, 27}, {62, 27}},
|
|
{{67, 28}, {65, 28}, {64, 28}},
|
|
{{39, 16}, {55, 16}, {63, 16}},
|
|
{{67, 17}, {50, 17}, {42, 17}},
|
|
{{34, 29}, {66, 29}, {67, 29}},
|
|
{{67, 17}, {32, 17}, {34, 17}},
|
|
{{33, 16}, { 0, 16}, {66, 16}},
|
|
{{ 0, 0}, { 2, 0}, { 1, 0}},
|
|
{{ 2, 1}, { 4, 1}, { 3, 1}},
|
|
{{ 4, 2}, { 6, 2}, { 5, 2}},
|
|
{{ 6, 3}, { 8, 3}, { 7, 3}},
|
|
{{ 8, 4}, {10, 4}, { 9, 4}},
|
|
{{10, 5}, {12, 5}, {11, 5}},
|
|
{{12, 6}, {14, 6}, {13, 6}},
|
|
{{14, 7}, {16, 7}, {15, 7}},
|
|
{{16, 8}, {18, 8}, {17, 8}},
|
|
{{18, 9}, {20, 9}, {19, 9}},
|
|
{{20, 10}, {22, 10}, {21, 10}},
|
|
{{22, 11}, {24, 11}, {23, 11}},
|
|
{{24, 12}, {26, 12}, {25, 12}},
|
|
{{26, 13}, {28, 13}, {27, 13}},
|
|
{{28, 14}, {30, 14}, {29, 14}},
|
|
{{30, 15}, {31, 15}, {35, 15}},
|
|
{{ 4, 16}, { 2, 16}, { 0, 16}},
|
|
{{ 0, 16}, {31, 16}, {30, 16}},
|
|
{{30, 16}, {28, 16}, {26, 16}},
|
|
{{26, 16}, {24, 16}, {22, 16}},
|
|
{{22, 16}, {20, 16}, {18, 16}},
|
|
{{18, 16}, {16, 16}, {14, 16}},
|
|
{{14, 16}, {12, 16}, {10, 16}},
|
|
{{10, 16}, { 8, 16}, { 6, 16}},
|
|
{{ 6, 16}, { 4, 16}, { 0, 16}},
|
|
{{ 0, 16}, {30, 16}, {26, 16}},
|
|
{{26, 16}, {22, 16}, {18, 16}},
|
|
{{18, 16}, {14, 16}, {10, 16}},
|
|
{{10, 16}, { 6, 16}, { 0, 16}},
|
|
{{ 0, 16}, {26, 16}, {18, 16}},
|
|
{{35, 17}, {32, 17}, { 1, 17}},
|
|
{{ 1, 17}, { 3, 17}, { 5, 17}},
|
|
{{ 5, 17}, { 7, 17}, { 9, 17}},
|
|
{{ 9, 17}, {11, 17}, {13, 17}},
|
|
{{13, 17}, {15, 17}, {17, 17}},
|
|
{{17, 17}, {19, 17}, {21, 17}},
|
|
{{21, 17}, {23, 17}, {25, 17}},
|
|
{{25, 17}, {27, 17}, {29, 17}},
|
|
{{29, 17}, {35, 17}, { 1, 17}},
|
|
{{ 1, 17}, { 5, 17}, { 9, 17}},
|
|
{{ 9, 17}, {13, 17}, {17, 17}},
|
|
{{17, 17}, {21, 17}, {25, 17}},
|
|
{{25, 17}, {29, 17}, { 1, 17}},
|
|
{{ 1, 17}, { 9, 17}, {17, 17}},
|
|
{{31, 18}, {33, 18}, {34, 18}},
|
|
{{36, 19}, {37, 19}, { 0, 19}},
|
|
{{38, 6}, {39, 6}, {37, 6}},
|
|
{{40, 5}, {41, 5}, {39, 5}},
|
|
{{42, 4}, {43, 4}, {41, 4}},
|
|
{{44, 3}, {45, 3}, {43, 3}},
|
|
{{46, 2}, {47, 2}, {45, 2}},
|
|
{{48, 1}, {49, 1}, {47, 1}},
|
|
{{50, 20}, {51, 20}, {49, 20}},
|
|
{{52, 21}, {53, 21}, {51, 21}},
|
|
{{54, 22}, {55, 22}, {53, 22}},
|
|
{{56, 23}, {57, 23}, {55, 23}},
|
|
{{58, 24}, {59, 24}, {57, 24}},
|
|
{{60, 25}, {61, 25}, {59, 25}},
|
|
{{62, 26}, {63, 26}, {61, 26}},
|
|
{{64, 27}, {65, 27}, {63, 27}},
|
|
{{67, 28}, {66, 28}, {65, 28}},
|
|
{{ 0, 16}, {37, 16}, {39, 16}},
|
|
{{39, 16}, {41, 16}, {43, 16}},
|
|
{{43, 16}, {45, 16}, {47, 16}},
|
|
{{47, 16}, {49, 16}, {51, 16}},
|
|
{{51, 16}, {53, 16}, {55, 16}},
|
|
{{55, 16}, {57, 16}, {59, 16}},
|
|
{{59, 16}, {61, 16}, {63, 16}},
|
|
{{63, 16}, {65, 16}, {66, 16}},
|
|
{{66, 16}, { 0, 16}, {39, 16}},
|
|
{{39, 16}, {43, 16}, {47, 16}},
|
|
{{47, 16}, {51, 16}, {55, 16}},
|
|
{{55, 16}, {59, 16}, {63, 16}},
|
|
{{63, 16}, {66, 16}, {39, 16}},
|
|
{{39, 16}, {47, 16}, {55, 16}},
|
|
{{36, 17}, {32, 17}, {67, 17}},
|
|
{{67, 17}, {64, 17}, {62, 17}},
|
|
{{62, 17}, {60, 17}, {58, 17}},
|
|
{{58, 17}, {56, 17}, {54, 17}},
|
|
{{54, 17}, {52, 17}, {50, 17}},
|
|
{{50, 17}, {48, 17}, {46, 17}},
|
|
{{46, 17}, {44, 17}, {42, 17}},
|
|
{{42, 17}, {40, 17}, {38, 17}},
|
|
{{38, 17}, {36, 17}, {67, 17}},
|
|
{{67, 17}, {62, 17}, {58, 17}},
|
|
{{58, 17}, {54, 17}, {50, 17}},
|
|
{{50, 17}, {46, 17}, {42, 17}},
|
|
{{42, 17}, {38, 17}, {67, 17}},
|
|
{{67, 17}, {58, 17}, {50, 17}},
|
|
{{34, 29}, {33, 29}, {66, 29}},
|
|
};
|
|
|
|
constexpr uint32_t num_faces = (sizeof (faces)) / (sizeof (face_vn));
|
|
|
|
}
|