diff --git a/Makefile b/Makefile index 6e390cc..b2e11cd 100644 --- a/Makefile +++ b/Makefile @@ -40,8 +40,10 @@ OBJS = \ src/collada/scene.o \ src/collada/effect.o \ src/collada/node_state.o \ + src/collada/animate.o \ data/scenes/ship20/ship20.o \ - data/scenes/noodle/noodle.o + data/scenes/noodle/noodle.o \ + data/scenes/shadow_test/shadow_test.o all: test.so diff --git a/build_collada.sh b/build_collada.sh index 5a54879..5be176a 100644 --- a/build_collada.sh +++ b/build_collada.sh @@ -9,3 +9,15 @@ PYTHONPATH=~/d3d10 python -m collada.main \ PYTHONPATH=~/d3d10 python -m collada.main \ include/data/scenes/noodle.h + +# shadow_test + +PYTHONPATH=~/d3d10 python -m collada.main \ + ~/love-demo/scene/shadow_test/shadow_test.DAE \ + data/scenes/shadow_test/shadow_test.cpp \ + data/scenes/shadow_test/shadow_test.vtx \ + data/scenes/shadow_test/shadow_test.vjw \ + data/scenes/shadow_test/shadow_test.idx + +PYTHONPATH=~/d3d10 python -m collada.main \ + include/data/scenes/shadow_test.h diff --git a/data/scenes/shadow_test/shadow_test.cpp b/data/scenes/shadow_test/shadow_test.cpp new file mode 100644 index 0000000..1678d75 --- /dev/null +++ b/data/scenes/shadow_test/shadow_test.cpp @@ -0,0 +1,2279 @@ +#include "collada/types.h" + +#include "data/scenes/shadow_test.h" + +namespace shadow_test { + +using namespace collada::types; + +camera const camera_camera001_camera = { + .xfov = 45.0f, + .yfov = 0.0f, + .znear = 1.0f, + .zfar = 1000.0f, + .aspect_ratio = 0.0f, +}; + +light const light_environmentambientlight = { + .type = light_type::AMBIENT, + .color = {0.0f, 0.0f, 0.0f}, +}; + +light const light_direct001_light = { + .type = light_type::DIRECTIONAL, + .color = {1.0f, 1.0f, 1.0f}, +}; + +float const array_node_point001_translation_x_input_array[] = { + 0.0, + 0.2333333, + 0.4333333, + 0.6333333, + 0.8333334, + 1.066667, + 1.266667, + 1.466667, + 1.666667, + 1.9, + 2.1, + 2.3, + 2.5, + 2.733333, + 2.933333, + 3.133333, + 3.333333, +}; + +float const array_node_point001_translation_x_output_array[] = { + -42.21109, + -42.21108, + 64.55054, + 77.47449, + -42.21109, + -42.21108, + 64.55054, + 77.47449, + -42.21109, + -42.21108, + 64.55054, + 77.47449, + -42.21109, + -42.21108, + 64.55054, + 77.47449, + -42.21109, +}; + +float const array_node_point001_translation_x_intangent_array[] = { + -0.3329306, -42.21109, + 0.1556333, -42.21109, + 0.3667333, 51.6395, + 0.5667334, 77.47449, + 0.7667333, -42.21109, + 0.9889667, -42.21109, + 1.200067, 51.6395, + 1.400067, 77.47449, + 1.600067, -42.21109, + 1.8223, -42.21109, + 2.0334, 51.6395, + 2.2334, 77.47449, + 2.4334, -42.21109, + 2.655633, -42.21109, + 2.866733, 51.6395, + 3.066733, 77.47449, + 3.266733, -42.21109, +}; + +float const array_node_point001_translation_x_outtangent_array[] = { + 0.0777, -42.21109, + 0.2999333, -42.21107, + 0.4999333, 77.46157, + 0.6999334, 77.47449, + 0.9110333, -42.21109, + 1.133267, -42.21107, + 1.333267, 77.46157, + 1.533267, 77.47449, + 1.744367, -42.21109, + 1.9666, -42.21107, + 2.1666, 77.46157, + 2.3666, 77.47449, + 2.5777, -42.21109, + 2.799933, -42.21107, + 2.999933, 77.46157, + 3.199933, 77.47449, + 3.666264, -42.21109, +}; + +enum interpolation const array_node_point001_translation_x_interpolation_array[] = { + interpolation::BEZIER, + interpolation::BEZIER, + interpolation::BEZIER, + interpolation::BEZIER, + interpolation::BEZIER, + interpolation::BEZIER, + interpolation::BEZIER, + interpolation::BEZIER, + interpolation::BEZIER, + interpolation::BEZIER, + interpolation::BEZIER, + interpolation::BEZIER, + interpolation::BEZIER, + interpolation::BEZIER, + interpolation::BEZIER, + interpolation::BEZIER, + interpolation::BEZIER, +}; + +sampler const sampler_node_point001_translation_x_sampler = { + // node_point001_translation_x_input + .input = { + .float_array = array_node_point001_translation_x_input_array, + .count = 17, + .stride = 1, + }, + // node_point001_translation_x_output + .output = { + .float_array = array_node_point001_translation_x_output_array, + .count = 17, + .stride = 1, + }, + // node_point001_translation_x_intangent + .in_tangent = { + .float_array = array_node_point001_translation_x_intangent_array, + .count = 17, + .stride = 2, + }, + // node_point001_translation_x_outtangent + .out_tangent = { + .float_array = array_node_point001_translation_x_outtangent_array, + .count = 17, + .stride = 2, + }, + // node_point001_translation_x_interpolation + .interpolation = { + .interpolation_array = array_node_point001_translation_x_interpolation_array, + .count = 17, + .stride = 1, + }, +}; + +float const array_node_point001_translation_y_input_array[] = { + 0.0, + 0.2333333, + 0.4333333, + 0.6333333, + 0.8333334, + 1.066667, + 1.266667, + 1.466667, + 1.666667, + 1.9, + 2.1, + 2.3, + 2.5, + 2.733333, + 2.933333, + 3.133333, + 3.333333, +}; + +float const array_node_point001_translation_y_output_array[] = { + -40.46347, + 92.09061, + 92.09061, + -70.41342, + -40.46347, + 92.09061, + 92.09061, + -70.41342, + -40.46347, + 92.09061, + 92.09061, + -70.41342, + -40.46347, + 92.09061, + 92.09061, + -70.41342, + -40.46347, +}; + +float const array_node_point001_translation_y_intangent_array[] = { + -0.3329306, -40.46347, + 0.1556333, 92.09061, + 0.3667333, 92.09061, + 0.5667334, -70.41342, + 0.7667333, -65.43909, + 0.9889667, 92.09061, + 1.200067, 92.09061, + 1.400067, -70.41342, + 1.600067, -65.43909, + 1.8223, 92.09061, + 2.0334, 92.09061, + 2.2334, -70.41342, + 2.4334, -65.43909, + 2.655633, 92.09061, + 2.866733, 92.09061, + 3.066733, -70.41342, + 3.266733, -40.46347, +}; + +float const array_node_point001_translation_y_outtangent_array[] = { + 0.0777, -40.46347, + 0.2999333, 92.09061, + 0.4999333, 92.09061, + 0.6999334, -70.41342, + 0.9110333, -11.32525, + 1.133267, 92.09061, + 1.333267, 92.09061, + 1.533267, -70.41342, + 1.744367, -11.32525, + 1.9666, 92.09061, + 2.1666, 92.09061, + 2.3666, -70.41342, + 2.5777, -11.32525, + 2.799933, 92.09061, + 2.999933, 92.09061, + 3.199933, -70.41342, + 3.666264, -40.46347, +}; + +enum interpolation const array_node_point001_translation_y_interpolation_array[] = { + interpolation::BEZIER, + interpolation::BEZIER, + interpolation::BEZIER, + interpolation::BEZIER, + interpolation::BEZIER, + interpolation::BEZIER, + interpolation::BEZIER, + interpolation::BEZIER, + interpolation::BEZIER, + interpolation::BEZIER, + interpolation::BEZIER, + interpolation::BEZIER, + interpolation::BEZIER, + interpolation::BEZIER, + interpolation::BEZIER, + interpolation::BEZIER, + interpolation::BEZIER, +}; + +sampler const sampler_node_point001_translation_y_sampler = { + // node_point001_translation_y_input + .input = { + .float_array = array_node_point001_translation_y_input_array, + .count = 17, + .stride = 1, + }, + // node_point001_translation_y_output + .output = { + .float_array = array_node_point001_translation_y_output_array, + .count = 17, + .stride = 1, + }, + // node_point001_translation_y_intangent + .in_tangent = { + .float_array = array_node_point001_translation_y_intangent_array, + .count = 17, + .stride = 2, + }, + // node_point001_translation_y_outtangent + .out_tangent = { + .float_array = array_node_point001_translation_y_outtangent_array, + .count = 17, + .stride = 2, + }, + // node_point001_translation_y_interpolation + .interpolation = { + .interpolation_array = array_node_point001_translation_y_interpolation_array, + .count = 17, + .stride = 1, + }, +}; + +float const array_node_point001_translation_z_input_array[] = { + 0.0, + 0.2333333, + 0.4333333, + 0.6333333, + 0.8333334, + 1.066667, + 1.266667, + 1.466667, + 1.666667, + 1.9, + 2.1, + 2.3, + 2.5, + 2.733333, + 2.933333, + 3.133333, + 3.333333, +}; + +float const array_node_point001_translation_z_output_array[] = { + 156.481, + 156.481, + 156.481, + 156.481, + 156.481, + 156.481, + 156.481, + 156.481, + 156.481, + 156.481, + 156.481, + 156.481, + 156.481, + 156.481, + 156.481, + 156.481, + 156.481, +}; + +float const array_node_point001_translation_z_intangent_array[] = { + -0.3329306, 156.481, + 0.1556333, 156.481, + 0.3667333, 156.481, + 0.5667334, 156.481, + 0.7667333, 156.481, + 0.9889667, 156.481, + 1.200067, 156.481, + 1.400067, 156.481, + 1.600067, 156.481, + 1.8223, 156.481, + 2.0334, 156.481, + 2.2334, 156.481, + 2.4334, 156.481, + 2.655633, 156.481, + 2.866733, 156.481, + 3.066733, 156.481, + 3.266733, 156.481, +}; + +float const array_node_point001_translation_z_outtangent_array[] = { + 0.0777, 156.481, + 0.2999333, 156.481, + 0.4999333, 156.481, + 0.6999334, 156.481, + 0.9110333, 156.481, + 1.133267, 156.481, + 1.333267, 156.481, + 1.533267, 156.481, + 1.744367, 156.481, + 1.9666, 156.481, + 2.1666, 156.481, + 2.3666, 156.481, + 2.5777, 156.481, + 2.799933, 156.481, + 2.999933, 156.481, + 3.199933, 156.481, + 3.666264, 156.481, +}; + +enum interpolation const array_node_point001_translation_z_interpolation_array[] = { + interpolation::BEZIER, + interpolation::BEZIER, + interpolation::BEZIER, + interpolation::BEZIER, + interpolation::BEZIER, + interpolation::BEZIER, + interpolation::BEZIER, + interpolation::BEZIER, + interpolation::BEZIER, + interpolation::BEZIER, + interpolation::BEZIER, + interpolation::BEZIER, + interpolation::BEZIER, + interpolation::BEZIER, + interpolation::BEZIER, + interpolation::BEZIER, + interpolation::BEZIER, +}; + +sampler const sampler_node_point001_translation_z_sampler = { + // node_point001_translation_z_input + .input = { + .float_array = array_node_point001_translation_z_input_array, + .count = 17, + .stride = 1, + }, + // node_point001_translation_z_output + .output = { + .float_array = array_node_point001_translation_z_output_array, + .count = 17, + .stride = 1, + }, + // node_point001_translation_z_intangent + .in_tangent = { + .float_array = array_node_point001_translation_z_intangent_array, + .count = 17, + .stride = 2, + }, + // node_point001_translation_z_outtangent + .out_tangent = { + .float_array = array_node_point001_translation_z_outtangent_array, + .count = 17, + .stride = 2, + }, + // node_point001_translation_z_interpolation + .interpolation = { + .interpolation_array = array_node_point001_translation_z_interpolation_array, + .count = 17, + .stride = 1, + }, +}; + +float const array_node_direct001_matrix_input_array[] = { + 0.0, + 0.03333333, + 0.06666667, + 0.1, + 0.1333333, + 0.1666667, + 0.2, + 0.2333333, + 0.2666667, + 0.3, + 0.3333333, + 0.3666667, + 0.4, + 0.4333333, + 0.4666667, + 0.5, + 0.5333333, + 0.5666667, + 0.6, + 0.6333333, + 0.6666667, + 0.7, + 0.7333333, + 0.7666667, + 0.8, + 0.8333333, + 0.8666667, + 0.9, + 0.9333333, + 0.9666667, + 1.0, + 1.033333, + 1.066667, + 1.1, + 1.133333, + 1.166667, + 1.2, + 1.233333, + 1.266667, + 1.3, + 1.333333, + 1.366667, + 1.4, + 1.433333, + 1.466667, + 1.5, + 1.533333, + 1.566667, + 1.6, + 1.633333, + 1.666667, + 1.7, + 1.733333, + 1.766667, + 1.8, + 1.833333, + 1.866667, + 1.9, + 1.933333, + 1.966667, + 2.0, + 2.033333, + 2.066667, + 2.1, + 2.133333, + 2.166667, + 2.2, + 2.233333, + 2.266667, + 2.3, + 2.333333, + 2.366667, + 2.4, + 2.433333, + 2.466667, + 2.5, + 2.533333, + 2.566667, + 2.6, + 2.633333, + 2.666667, + 2.7, + 2.733333, + 2.766667, + 2.8, + 2.833333, + 2.866667, + 2.9, + 2.933333, + 2.966667, + 3.0, + 3.033333, + 3.066667, + 3.1, + 3.133333, + 3.166667, + 3.2, + 3.233333, + 3.266667, + 3.3, + 3.333333, +}; + +float const array_node_direct001_matrix_output_array[] = { + 0.692005, 0.6737756, -0.2591438, -4.146301, -0.7218927, 0.64588, -0.2484148, -3.974632, 0.0, 0.3589784, 0.9333459, 10.48219, 0.0, 0.0, 0.0, 1.0, + 0.6247931, 0.7356614, -0.2616025, -4.146301, -0.7807903, 0.5886807, -0.2093359, -3.974632, 0.0, 0.3350483, 0.942201, 10.48219, 0.0, 0.0, 0.0, 1.0, + 0.3647357, 0.8922853, -0.2660729, -4.146301, -0.9311111, 0.3495269, -0.1042263, -3.974632, 0.0, 0.2857584, 0.9583017, 10.48219, 0.0, 0.0, 0.0, 1.0, + -0.1645458, 0.9494708, -0.2672639, -4.146301, -0.9863694, -0.1583904, 0.04458487, -3.974632, 0.0, 0.2709572, 0.9625914, 10.48219, 0.0, 0.0, 0.0, 1.0, + -0.6127588, 0.7455918, -0.2619534, -4.146301, -0.79027, -0.5781162, 0.2031131, -3.974632, 0.0, 0.3314732, 0.9434646, 10.48219, 0.0, 0.0, 0.0, 1.0, + -0.8001267, 0.5443439, -0.2519664, -4.146301, -0.5998311, -0.7261112, 0.336103, -3.974632, 0.0, 0.4200623, 0.9074953, 10.48219, 0.0, 0.0, 0.0, 1.0, + -0.867311, 0.4347129, -0.2424795, -4.146301, -0.4977666, -0.7574459, 0.4224975, -3.974632, 0.0, 0.4871349, 0.8733267, 10.48219, 0.0, 0.0, 0.0, 1.0, + -0.8849987, 0.3998879, -0.2384678, -4.146301, -0.4655935, -0.7601059, 0.4532788, -3.974632, 0.0, 0.5121803, 0.858878, 10.48219, 0.0, 0.0, 0.0, 1.0, + -0.9131027, 0.3530076, -0.2040321, -4.146301, -0.4077296, -0.7905538, 0.4569259, -3.974632, 0.0, 0.5004102, 0.8657885, 10.48219, 0.0, 0.0, 0.0, 1.0, + -0.9713711, 0.2087469, -0.1134146, -4.146301, -0.2375671, -0.8535302, 0.4637327, -3.974632, 0.0, 0.4774001, 0.878686, 10.48219, 0.0, 0.0, 0.0, 1.0, + -0.999695, -0.02184122, 0.01153033, -4.146301, 0.02469789, -0.8840638, 0.4667132, -3.974632, 0.0, 0.4668557, 0.8843336, 10.48219, 0.0, 0.0, 0.0, 1.0, + -0.9561786, -0.2563314, 0.1414806, -4.146301, 0.2927841, -0.8371307, 0.4620493, -3.974632, 0.0, 0.4832249, 0.8754963, 10.48219, 0.0, 0.0, 0.0, 1.0, + -0.878125, -0.4100697, 0.2464537, -4.146301, 0.4784314, -0.7526522, 0.4523473, -3.974632, 0.0, 0.5151287, 0.8571129, 10.48219, 0.0, 0.0, 0.0, 1.0, + -0.8248081, -0.4762625, 0.3047387, -4.146301, 0.5654128, -0.6947582, 0.444544, -3.974632, 0.0, 0.5389667, 0.8423271, 10.48219, 0.0, 0.0, 0.0, 1.0, + -0.7561108, -0.5605273, 0.3377951, -4.146301, 0.6544436, -0.6476047, 0.3902713, -3.974632, 0.0, 0.5161563, 0.8564944, 10.48219, 0.0, 0.0, 0.0, 1.0, + -0.5518118, -0.7461859, 0.3724384, -4.146301, 0.8339686, -0.4937286, 0.2464312, -3.974632, 0.0, 0.4465855, 0.8947409, 10.48219, 0.0, 0.0, 0.0, 1.0, + -0.09527921, -0.9139998, 0.3943681, -4.146301, 0.9954506, -0.08748322, 0.03774678, -3.974632, 0.0, 0.3961705, 0.918177, 10.48219, 0.0, 0.0, 0.0, 1.0, + 0.4048784, -0.8252312, 0.3937853, -4.146301, 0.9143705, 0.365408, -0.174366, -3.974634, 0.0, 0.4306628, 0.9025129, 10.48219, 0.0, 0.0, 0.0, 1.0, + 0.6480864, -0.6598591, 0.3802236, -4.146301, 0.7615668, 0.5615341, -0.3235668, -3.974632, 0.0, 0.499265, 0.8664494, 10.48219, 0.0, 0.0, 0.0, 1.0, + 0.712162, -0.5951445, 0.3723284, -4.146301, 0.7020152, 0.6037465, -0.3777099, -3.974632, 0.0, 0.5303709, 0.8477658, 10.48219, 0.0, 0.0, 0.0, 1.0, + 0.7536112, -0.5667818, 0.3329093, -4.146301, 0.6573205, 0.6498095, -0.381677, -3.974632, 0.0, 0.5064642, 0.862261, 10.48219, 0.0, 0.0, 0.0, 1.0, + 0.8627668, -0.452031, 0.2264981, -4.146301, 0.5056021, 0.7713524, -0.3864998, -3.974632, 0.0, 0.4479772, 0.894045, 10.48219, 0.0, 0.0, 0.0, 1.0, + 0.9813205, -0.1773812, 0.07447159, -4.146301, 0.1923801, 0.9048118, -0.3798756, -3.974632, 0.0, 0.3871066, 0.922035, 10.48219, 0.0, 0.0, 0.0, 1.0, + 0.9719243, 0.2192002, -0.08552432, -4.146301, -0.2352937, 0.905447, -0.3532741, -3.974632, 0.0, 0.363479, 0.9316024, 10.48219, 0.0, 0.0, 0.0, 1.0, + 0.8278828, 0.5207226, -0.2084661, -4.146301, -0.5609012, 0.7685797, -0.3076933, -3.974632, 0.0, 0.3716629, 0.9283677, 10.48219, 0.0, 0.0, 0.0, 1.0, + 0.692005, 0.6737756, -0.2591438, -4.146301, -0.7218927, 0.64588, -0.2484148, -3.974632, 0.0, 0.3589784, 0.9333459, 10.48219, 0.0, 0.0, 0.0, 1.0, + 0.515815, 0.8149679, -0.2641254, -4.146301, -0.8567, 0.4906883, -0.1590286, -3.974632, 0.0, 0.3083055, 0.9512874, 10.48219, 0.0, 0.0, 0.0, 1.0, + 0.1157832, 0.9566042, -0.2673999, -4.146301, -0.9932745, 0.1115087, -0.03117007, -3.974632, 0.0, 0.2692105, 0.9630814, 10.48219, 0.0, 0.0, 0.0, 1.0, + -0.3957774, 0.8790489, -0.2657693, -4.146301, -0.9183465, -0.3788414, 0.1145378, -3.974632, 0.0, 0.2893998, 0.9572083, 10.48219, 0.0, 0.0, 0.0, 1.0, + -0.6975451, 0.6681353, -0.2588939, -4.146301, -0.7165409, -0.6504228, 0.2520305, -3.974632, 0.0, 0.3613107, 0.9324455, 10.48219, 0.0, 0.0, 0.0, 1.0, + -0.8221068, 0.5117248, -0.249556, -4.146301, -0.5693334, -0.7389211, 0.3603543, -3.974632, 0.0, 0.4383303, 0.898814, 10.48219, 0.0, 0.0, 0.0, 1.0, + -0.8712977, 0.4271333, -0.2416557, -4.146301, -0.4907549, -0.7583425, 0.4290412, -3.974632, 0.0, 0.4924163, 0.8703598, 10.48219, 0.0, 0.0, 0.0, 1.0, + -0.8849987, 0.3998879, -0.2384678, -4.146301, -0.4655935, -0.7601059, 0.4532788, -3.974632, 0.0, 0.5121803, 0.858878, 10.48219, 0.0, 0.0, 0.0, 1.0, + -0.9131027, 0.3530076, -0.2040321, -4.146301, -0.4077296, -0.7905538, 0.4569259, -3.974632, 0.0, 0.5004102, 0.8657885, 10.48219, 0.0, 0.0, 0.0, 1.0, + -0.9713711, 0.2087469, -0.1134146, -4.146301, -0.2375671, -0.8535302, 0.4637327, -3.974632, 0.0, 0.4774001, 0.878686, 10.48219, 0.0, 0.0, 0.0, 1.0, + -0.999695, -0.02184122, 0.01153033, -4.146301, 0.02469789, -0.8840638, 0.4667132, -3.974632, 0.0, 0.4668557, 0.8843336, 10.48219, 0.0, 0.0, 0.0, 1.0, + -0.9561786, -0.2563314, 0.1414806, -4.146301, 0.2927841, -0.8371307, 0.4620493, -3.974632, 0.0, 0.4832249, 0.8754963, 10.48219, 0.0, 0.0, 0.0, 1.0, + -0.878125, -0.4100697, 0.2464537, -4.146301, 0.4784314, -0.7526522, 0.4523473, -3.974632, 0.0, 0.5151287, 0.8571129, 10.48219, 0.0, 0.0, 0.0, 1.0, + -0.8248081, -0.4762625, 0.3047387, -4.146301, 0.5654128, -0.6947582, 0.444544, -3.974632, 0.0, 0.5389667, 0.8423271, 10.48219, 0.0, 0.0, 0.0, 1.0, + -0.7561108, -0.5605273, 0.3377951, -4.146301, 0.6544436, -0.6476047, 0.3902713, -3.974632, 0.0, 0.5161563, 0.8564944, 10.48219, 0.0, 0.0, 0.0, 1.0, + -0.5518118, -0.7461859, 0.3724384, -4.146301, 0.8339686, -0.4937286, 0.2464312, -3.974632, 0.0, 0.4465855, 0.8947409, 10.48219, 0.0, 0.0, 0.0, 1.0, + -0.09527921, -0.9139998, 0.3943681, -4.146301, 0.9954506, -0.08748322, 0.03774678, -3.974632, 0.0, 0.3961705, 0.918177, 10.48219, 0.0, 0.0, 0.0, 1.0, + 0.4048784, -0.8252312, 0.3937853, -4.146301, 0.9143705, 0.365408, -0.174366, -3.974634, 0.0, 0.4306628, 0.9025129, 10.48219, 0.0, 0.0, 0.0, 1.0, + 0.6480864, -0.6598591, 0.3802236, -4.146301, 0.7615668, 0.5615341, -0.3235668, -3.974632, 0.0, 0.499265, 0.8664494, 10.48219, 0.0, 0.0, 0.0, 1.0, + 0.712162, -0.5951445, 0.3723284, -4.146301, 0.7020152, 0.6037465, -0.3777099, -3.974632, 0.0, 0.5303709, 0.8477658, 10.48219, 0.0, 0.0, 0.0, 1.0, + 0.7536112, -0.5667818, 0.3329093, -4.146301, 0.6573205, 0.6498095, -0.381677, -3.974632, 0.0, 0.5064642, 0.862261, 10.48219, 0.0, 0.0, 0.0, 1.0, + 0.8627668, -0.452031, 0.2264981, -4.146301, 0.5056021, 0.7713524, -0.3864998, -3.974632, 0.0, 0.4479772, 0.894045, 10.48219, 0.0, 0.0, 0.0, 1.0, + 0.9813205, -0.1773812, 0.07447159, -4.146301, 0.1923801, 0.9048118, -0.3798756, -3.974632, 0.0, 0.3871066, 0.922035, 10.48219, 0.0, 0.0, 0.0, 1.0, + 0.9719243, 0.2192002, -0.08552432, -4.146301, -0.2352937, 0.905447, -0.3532741, -3.974632, 0.0, 0.363479, 0.9316024, 10.48219, 0.0, 0.0, 0.0, 1.0, + 0.8278828, 0.5207226, -0.2084661, -4.146301, -0.5609012, 0.7685797, -0.3076933, -3.974632, 0.0, 0.3716629, 0.9283677, 10.48219, 0.0, 0.0, 0.0, 1.0, + 0.692005, 0.6737756, -0.2591438, -4.146301, -0.7218927, 0.64588, -0.2484148, -3.974632, 0.0, 0.3589784, 0.9333459, 10.48219, 0.0, 0.0, 0.0, 1.0, + 0.5158147, 0.8149681, -0.2641254, -4.146301, -0.8567002, 0.490688, -0.1590285, -3.974632, 0.0, 0.3083055, 0.9512874, 10.48219, 0.0, 0.0, 0.0, 1.0, + 0.1157825, 0.9566043, -0.2673999, -4.146301, -0.9932746, 0.111508, -0.03116983, -3.974632, 0.0, 0.2692105, 0.9630814, 10.48219, 0.0, 0.0, 0.0, 1.0, + -0.3957779, 0.8790487, -0.2657693, -4.146301, -0.9183463, -0.3788419, 0.114538, -3.974632, 0.0, 0.2893999, 0.9572083, 10.48219, 0.0, 0.0, 0.0, 1.0, + -0.6975453, 0.6681351, -0.2588939, -4.146301, -0.7165407, -0.6504229, 0.2520306, -3.974632, 0.0, 0.3613108, 0.9324455, 10.48219, 0.0, 0.0, 0.0, 1.0, + -0.8221068, 0.5117247, -0.249556, -4.146301, -0.5693333, -0.7389211, 0.3603543, -3.974632, 0.0, 0.4383303, 0.898814, 10.48219, 0.0, 0.0, 0.0, 1.0, + -0.8712977, 0.4271333, -0.2416557, -4.146301, -0.4907549, -0.7583425, 0.4290412, -3.974632, 0.0, 0.4924163, 0.8703598, 10.48219, 0.0, 0.0, 0.0, 1.0, + -0.8849987, 0.3998879, -0.2384678, -4.146301, -0.4655935, -0.7601059, 0.4532788, -3.974632, 0.0, 0.5121803, 0.858878, 10.48219, 0.0, 0.0, 0.0, 1.0, + -0.9131027, 0.3530076, -0.2040321, -4.146301, -0.4077296, -0.7905538, 0.4569259, -3.974632, 0.0, 0.5004102, 0.8657885, 10.48219, 0.0, 0.0, 0.0, 1.0, + -0.9713711, 0.2087469, -0.1134146, -4.146301, -0.2375671, -0.8535302, 0.4637327, -3.974632, 0.0, 0.4774001, 0.878686, 10.48219, 0.0, 0.0, 0.0, 1.0, + -0.999695, -0.02184122, 0.01153033, -4.146301, 0.02469789, -0.8840638, 0.4667132, -3.974632, 0.0, 0.4668557, 0.8843336, 10.48219, 0.0, 0.0, 0.0, 1.0, + -0.9561786, -0.2563314, 0.1414806, -4.146301, 0.2927841, -0.8371307, 0.4620493, -3.974632, 0.0, 0.4832249, 0.8754963, 10.48219, 0.0, 0.0, 0.0, 1.0, + -0.878125, -0.4100697, 0.2464537, -4.146301, 0.4784314, -0.7526522, 0.4523473, -3.974632, 0.0, 0.5151287, 0.8571129, 10.48219, 0.0, 0.0, 0.0, 1.0, + -0.8248081, -0.4762625, 0.3047387, -4.146301, 0.5654128, -0.6947582, 0.444544, -3.974632, 0.0, 0.5389667, 0.8423271, 10.48219, 0.0, 0.0, 0.0, 1.0, + -0.7561108, -0.5605273, 0.3377951, -4.146301, 0.6544436, -0.6476047, 0.3902713, -3.974632, 0.0, 0.5161563, 0.8564944, 10.48219, 0.0, 0.0, 0.0, 1.0, + -0.5518118, -0.7461859, 0.3724384, -4.146301, 0.8339686, -0.4937286, 0.2464312, -3.974632, 0.0, 0.4465855, 0.8947409, 10.48219, 0.0, 0.0, 0.0, 1.0, + -0.09527921, -0.9139998, 0.3943681, -4.146301, 0.9954506, -0.08748322, 0.03774678, -3.974632, 0.0, 0.3961705, 0.918177, 10.48219, 0.0, 0.0, 0.0, 1.0, + 0.4048784, -0.8252312, 0.3937853, -4.146301, 0.9143705, 0.365408, -0.174366, -3.974634, 0.0, 0.4306628, 0.9025129, 10.48219, 0.0, 0.0, 0.0, 1.0, + 0.6480864, -0.6598591, 0.3802236, -4.146301, 0.7615668, 0.5615341, -0.3235668, -3.974632, 0.0, 0.499265, 0.8664494, 10.48219, 0.0, 0.0, 0.0, 1.0, + 0.712162, -0.5951445, 0.3723284, -4.146301, 0.7020152, 0.6037465, -0.3777099, -3.974632, 0.0, 0.5303709, 0.8477658, 10.48219, 0.0, 0.0, 0.0, 1.0, + 0.7536112, -0.5667818, 0.3329093, -4.146301, 0.6573205, 0.6498095, -0.381677, -3.974632, 0.0, 0.5064642, 0.862261, 10.48219, 0.0, 0.0, 0.0, 1.0, + 0.8627668, -0.452031, 0.2264981, -4.146301, 0.5056021, 0.7713524, -0.3864998, -3.974632, 0.0, 0.4479772, 0.894045, 10.48219, 0.0, 0.0, 0.0, 1.0, + 0.9813205, -0.1773812, 0.07447159, -4.146301, 0.1923801, 0.9048118, -0.3798756, -3.974632, 0.0, 0.3871066, 0.922035, 10.48219, 0.0, 0.0, 0.0, 1.0, + 0.9719243, 0.2192002, -0.08552432, -4.146301, -0.2352937, 0.905447, -0.3532741, -3.974632, 0.0, 0.363479, 0.9316024, 10.48219, 0.0, 0.0, 0.0, 1.0, + 0.8278828, 0.5207226, -0.2084661, -4.146301, -0.5609012, 0.7685797, -0.3076933, -3.974632, 0.0, 0.3716629, 0.9283677, 10.48219, 0.0, 0.0, 0.0, 1.0, + 0.692005, 0.6737756, -0.2591438, -4.146301, -0.7218927, 0.64588, -0.2484148, -3.974632, 0.0, 0.3589784, 0.9333459, 10.48219, 0.0, 0.0, 0.0, 1.0, + 0.5158147, 0.8149681, -0.2641254, -4.146301, -0.8567002, 0.490688, -0.1590285, -3.974632, 0.0, 0.3083055, 0.9512874, 10.48219, 0.0, 0.0, 0.0, 1.0, + 0.1157825, 0.9566043, -0.2673999, -4.146301, -0.9932746, 0.111508, -0.03116983, -3.974632, 0.0, 0.2692105, 0.9630814, 10.48219, 0.0, 0.0, 0.0, 1.0, + -0.3957779, 0.8790487, -0.2657693, -4.146301, -0.9183463, -0.3788419, 0.114538, -3.974632, 0.0, 0.2893999, 0.9572083, 10.48219, 0.0, 0.0, 0.0, 1.0, + -0.6975453, 0.6681351, -0.2588939, -4.146301, -0.7165407, -0.6504229, 0.2520306, -3.974632, 0.0, 0.3613108, 0.9324455, 10.48219, 0.0, 0.0, 0.0, 1.0, + -0.8221068, 0.5117247, -0.249556, -4.146301, -0.5693333, -0.7389211, 0.3603543, -3.974632, 0.0, 0.4383303, 0.898814, 10.48219, 0.0, 0.0, 0.0, 1.0, + -0.8712977, 0.4271333, -0.2416557, -4.146301, -0.4907549, -0.7583425, 0.4290412, -3.974632, 0.0, 0.4924163, 0.8703598, 10.48219, 0.0, 0.0, 0.0, 1.0, + -0.8849987, 0.3998879, -0.2384678, -4.146301, -0.4655935, -0.7601059, 0.4532788, -3.974632, 0.0, 0.5121803, 0.858878, 10.48219, 0.0, 0.0, 0.0, 1.0, + -0.9131027, 0.3530076, -0.2040321, -4.146301, -0.4077296, -0.7905538, 0.4569259, -3.974632, 0.0, 0.5004102, 0.8657885, 10.48219, 0.0, 0.0, 0.0, 1.0, + -0.9713711, 0.2087469, -0.1134146, -4.146301, -0.2375671, -0.8535302, 0.4637327, -3.974632, 0.0, 0.4774001, 0.878686, 10.48219, 0.0, 0.0, 0.0, 1.0, + -0.999695, -0.02184122, 0.01153033, -4.146301, 0.02469789, -0.8840638, 0.4667132, -3.974632, 0.0, 0.4668557, 0.8843336, 10.48219, 0.0, 0.0, 0.0, 1.0, + -0.9561786, -0.2563314, 0.1414806, -4.146301, 0.2927841, -0.8371307, 0.4620493, -3.974632, 0.0, 0.4832249, 0.8754963, 10.48219, 0.0, 0.0, 0.0, 1.0, + -0.878125, -0.4100697, 0.2464537, -4.146301, 0.4784314, -0.7526522, 0.4523473, -3.974632, 0.0, 0.5151287, 0.8571129, 10.48219, 0.0, 0.0, 0.0, 1.0, + -0.8248081, -0.4762625, 0.3047387, -4.146301, 0.5654128, -0.6947582, 0.444544, -3.974632, 0.0, 0.5389667, 0.8423271, 10.48219, 0.0, 0.0, 0.0, 1.0, + -0.7561108, -0.5605273, 0.3377951, -4.146301, 0.6544436, -0.6476047, 0.3902713, -3.974632, 0.0, 0.5161563, 0.8564944, 10.48219, 0.0, 0.0, 0.0, 1.0, + -0.5518118, -0.7461859, 0.3724384, -4.146301, 0.8339686, -0.4937286, 0.2464312, -3.974632, 0.0, 0.4465855, 0.8947409, 10.48219, 0.0, 0.0, 0.0, 1.0, + -0.09527921, -0.9139998, 0.3943681, -4.146301, 0.9954506, -0.08748322, 0.03774678, -3.974632, 0.0, 0.3961705, 0.918177, 10.48219, 0.0, 0.0, 0.0, 1.0, + 0.4048784, -0.8252312, 0.3937853, -4.146301, 0.9143705, 0.365408, -0.174366, -3.974634, 0.0, 0.4306628, 0.9025129, 10.48219, 0.0, 0.0, 0.0, 1.0, + 0.6480864, -0.6598591, 0.3802236, -4.146301, 0.7615668, 0.5615341, -0.3235668, -3.974632, 0.0, 0.499265, 0.8664494, 10.48219, 0.0, 0.0, 0.0, 1.0, + 0.712162, -0.5951445, 0.3723284, -4.146301, 0.7020152, 0.6037465, -0.3777099, -3.974632, 0.0, 0.5303709, 0.8477658, 10.48219, 0.0, 0.0, 0.0, 1.0, + 0.7458067, -0.5763584, 0.3340409, -4.146301, 0.6661624, 0.6452661, -0.3739778, -3.974632, 0.0, 0.5014407, 0.8651921, 10.48219, 0.0, 0.0, 0.0, 1.0, + 0.8442236, -0.4845876, 0.2290445, -4.146301, 0.5359911, 0.7632594, -0.3607612, -3.974632, 0.0, 0.427329, 0.9040962, 10.48219, 0.0, 0.0, 0.0, 1.0, + 0.9751951, -0.207936, 0.07587516, -4.146301, 0.2213469, 0.9161106, -0.3342857, -3.974632, 0.0, 0.3427885, 0.9394126, 10.48219, 0.0, 0.0, 0.0, 1.0, + 0.9594948, 0.2678636, -0.08728611, -4.146301, -0.2817264, 0.9122812, -0.2972762, -3.974632, 0.0, 0.3098258, 0.9507933, 10.48219, 0.0, 0.0, 0.0, 1.0, + 0.7795101, 0.5896463, -0.2113793, -4.146301, -0.6263897, 0.7337849, -0.2630508, -3.974632, 0.0, 0.3374566, 0.9413411, 10.48219, 0.0, 0.0, 0.0, 1.0, + 0.692005, 0.6737756, -0.2591438, -4.146301, -0.7218927, 0.64588, -0.2484148, -3.974632, 0.0, 0.3589784, 0.9333459, 10.48219, 0.0, 0.0, 0.0, 1.0, +}; + +enum interpolation const array_node_direct001_matrix_interpolation_array[] = { + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, +}; + +sampler const sampler_node_direct001_matrix_sampler = { + // node_direct001_matrix_input + .input = { + .float_array = array_node_direct001_matrix_input_array, + .count = 101, + .stride = 1, + }, + // node_direct001_matrix_output + .output = { + .float_array = array_node_direct001_matrix_output_array, + .count = 101, + .stride = 16, + }, + // node_direct001_matrix_interpolation + .interpolation = { + .interpolation_array = array_node_direct001_matrix_interpolation_array, + .count = 101, + .stride = 1, + }, +}; + +float const array_node_point002_translation_x_input_array[] = { + 0.0, + 0.8333334, + 1.666667, + 2.5, + 3.333333, +}; + +float const array_node_point002_translation_x_output_array[] = { + -57.36452, + -158.3051, + 6.142715, + 214.8339, + -57.36452, +}; + +float const array_node_point002_translation_x_intangent_array[] = { + -0.3329306, -57.36452, + 0.5558333, -158.3051, + 1.389167, -55.98494, + 2.2225, 214.8339, + 3.055833, -57.36452, +}; + +float const array_node_point002_translation_x_outtangent_array[] = { + 0.2775, -57.36452, + 1.110833, -158.3051, + 1.944167, 68.27037, + 2.7775, 214.8339, + 3.666264, -57.36452, +}; + +enum interpolation const array_node_point002_translation_x_interpolation_array[] = { + interpolation::BEZIER, + interpolation::BEZIER, + interpolation::BEZIER, + interpolation::BEZIER, + interpolation::BEZIER, +}; + +sampler const sampler_node_point002_translation_x_sampler = { + // node_point002_translation_x_input + .input = { + .float_array = array_node_point002_translation_x_input_array, + .count = 5, + .stride = 1, + }, + // node_point002_translation_x_output + .output = { + .float_array = array_node_point002_translation_x_output_array, + .count = 5, + .stride = 1, + }, + // node_point002_translation_x_intangent + .in_tangent = { + .float_array = array_node_point002_translation_x_intangent_array, + .count = 5, + .stride = 2, + }, + // node_point002_translation_x_outtangent + .out_tangent = { + .float_array = array_node_point002_translation_x_outtangent_array, + .count = 5, + .stride = 2, + }, + // node_point002_translation_x_interpolation + .interpolation = { + .interpolation_array = array_node_point002_translation_x_interpolation_array, + .count = 5, + .stride = 1, + }, +}; + +float const array_node_point002_translation_y_input_array[] = { + 0.0, + 0.8333334, + 1.666667, + 2.5, + 3.333333, +}; + +float const array_node_point002_translation_y_output_array[] = { + 159.98, + -1.736969, + -219.6883, + -4.115463, + 159.98, +}; + +float const array_node_point002_translation_y_intangent_array[] = { + -0.3329306, 159.98, + 0.5558333, 61.4778, + 1.389167, -219.6883, + 2.2225, -67.33023, + 3.055833, 159.98, +}; + +float const array_node_point002_translation_y_outtangent_array[] = { + 0.2775, 159.98, + 1.110833, -64.95174, + 1.944167, -219.6883, + 2.7775, 59.0993, + 3.666264, 159.98, +}; + +enum interpolation const array_node_point002_translation_y_interpolation_array[] = { + interpolation::BEZIER, + interpolation::BEZIER, + interpolation::BEZIER, + interpolation::BEZIER, + interpolation::BEZIER, +}; + +sampler const sampler_node_point002_translation_y_sampler = { + // node_point002_translation_y_input + .input = { + .float_array = array_node_point002_translation_y_input_array, + .count = 5, + .stride = 1, + }, + // node_point002_translation_y_output + .output = { + .float_array = array_node_point002_translation_y_output_array, + .count = 5, + .stride = 1, + }, + // node_point002_translation_y_intangent + .in_tangent = { + .float_array = array_node_point002_translation_y_intangent_array, + .count = 5, + .stride = 2, + }, + // node_point002_translation_y_outtangent + .out_tangent = { + .float_array = array_node_point002_translation_y_outtangent_array, + .count = 5, + .stride = 2, + }, + // node_point002_translation_y_interpolation + .interpolation = { + .interpolation_array = array_node_point002_translation_y_interpolation_array, + .count = 5, + .stride = 1, + }, +}; + +float const array_node_point002_translation_z_input_array[] = { + 0.0, + 0.8333334, + 1.666667, + 2.5, + 3.333333, +}; + +float const array_node_point002_translation_z_output_array[] = { + 269.2574, + 269.2574, + 269.2574, + 269.2574, + 269.2574, +}; + +float const array_node_point002_translation_z_intangent_array[] = { + -0.3329306, 269.2574, + 0.5558333, 269.2574, + 1.389167, 269.2574, + 2.2225, 269.2574, + 3.055833, 269.2574, +}; + +float const array_node_point002_translation_z_outtangent_array[] = { + 0.2775, 269.2574, + 1.110833, 269.2574, + 1.944167, 269.2574, + 2.7775, 269.2574, + 3.666264, 269.2574, +}; + +enum interpolation const array_node_point002_translation_z_interpolation_array[] = { + interpolation::BEZIER, + interpolation::BEZIER, + interpolation::BEZIER, + interpolation::BEZIER, + interpolation::BEZIER, +}; + +sampler const sampler_node_point002_translation_z_sampler = { + // node_point002_translation_z_input + .input = { + .float_array = array_node_point002_translation_z_input_array, + .count = 5, + .stride = 1, + }, + // node_point002_translation_z_output + .output = { + .float_array = array_node_point002_translation_z_output_array, + .count = 5, + .stride = 1, + }, + // node_point002_translation_z_intangent + .in_tangent = { + .float_array = array_node_point002_translation_z_intangent_array, + .count = 5, + .stride = 2, + }, + // node_point002_translation_z_outtangent + .out_tangent = { + .float_array = array_node_point002_translation_z_outtangent_array, + .count = 5, + .stride = 2, + }, + // node_point002_translation_z_interpolation + .interpolation = { + .interpolation_array = array_node_point002_translation_z_interpolation_array, + .count = 5, + .stride = 1, + }, +}; + +float const array_node_camera001_matrix_input_array[] = { + 0.0, + 0.03333333, + 0.06666667, + 0.1, + 0.1333333, + 0.1666667, + 0.2, + 0.2333333, + 0.2666667, + 0.3, + 0.3333333, + 0.3666667, + 0.4, + 0.4333333, + 0.4666667, + 0.5, + 0.5333333, + 0.5666667, + 0.6, + 0.6333333, + 0.6666667, + 0.7, + 0.7333333, + 0.7666667, + 0.8, + 0.8333333, + 0.8666667, + 0.9, + 0.9333333, + 0.9666667, + 1.0, + 1.033333, + 1.066667, + 1.1, + 1.133333, + 1.166667, + 1.2, + 1.233333, + 1.266667, + 1.3, + 1.333333, + 1.366667, + 1.4, + 1.433333, + 1.466667, + 1.5, + 1.533333, + 1.566667, + 1.6, + 1.633333, + 1.666667, + 1.7, + 1.733333, + 1.766667, + 1.8, + 1.833333, + 1.866667, + 1.9, + 1.933333, + 1.966667, + 2.0, + 2.033333, + 2.066667, + 2.1, + 2.133333, + 2.166667, + 2.2, + 2.233333, + 2.266667, + 2.3, + 2.333333, + 2.366667, + 2.4, + 2.433333, + 2.466667, + 2.5, + 2.533333, + 2.566667, + 2.6, + 2.633333, + 2.666667, + 2.7, + 2.733333, + 2.766667, + 2.8, + 2.833333, + 2.866667, + 2.9, + 2.933333, + 2.966667, + 3.0, + 3.033333, + 3.066667, + 3.1, + 3.133333, + 3.166667, + 3.2, + 3.233333, + 3.266667, + 3.3, + 3.333333, +}; + +float const array_node_camera001_matrix_output_array[] = { + -0.9161802, 0.3124457, -0.2509807, -3.604237, -0.4006261, -0.7305838, 0.5529431, 4.948456, -0.0105977, 0.6071451, 0.7945203, 0.0, 0.0, 0.0, 0.0, 1.0, + -0.9147312, 0.3152406, -0.2527647, -3.604237, -0.4039238, -0.7298013, 0.5515756, 4.948456, -0.01058894, 0.6066412, 0.7949053, 0.0, 0.0, 0.0, 0.0, 1.0, + -0.9104375, 0.3233804, -0.2579314, -3.604237, -0.4135115, -0.7274532, 0.5475583, 4.948456, -0.01056331, 0.6051753, 0.7960221, 0.0, 0.0, 0.0, 0.0, 1.0, + -0.9032655, 0.3365206, -0.2662051, -3.604237, -0.4289529, -0.7234153, 0.5409896, 4.948456, -0.01052272, 0.6028467, 0.7977876, 0.0, 0.0, 0.0, 0.0, 1.0, + -0.8930569, 0.3543281, -0.2773098, -3.604233, -0.4498215, -0.717428, 0.5319375, 4.948456, -0.01046937, 0.5997905, 0.8000885, 0.0, 0.0, 0.0, 0.0, 1.0, + -0.8795596, 0.3764506, -0.2909633, -3.60424, -0.4756746, -0.7091289, 0.5204514, 4.948456, -0.01040619, 0.5961721, 0.8027892, 0.0, 0.0, 0.0, 0.0, 1.0, + -0.8624583, 0.4024851, -0.3068735, -3.604233, -0.5060223, -0.6980872, 0.5065724, 4.948456, -0.01033657, 0.5921825, 0.8057376, 0.0, 0.0, 0.0, 0.0, 1.0, + -0.8414103, 0.4319453, -0.3247333, -3.604233, -0.540299, -0.6838416, 0.4903444, 4.948456, -0.01026415, 0.5880341, 0.808771, 0.0, 0.0, 0.0, 0.0, 1.0, + -0.8160866, 0.4642367, -0.344219, -3.60424, -0.5778395, -0.6659454, 0.4718243, 4.948456, -0.01019293, 0.583953, 0.8117235, 0.0, 0.0, 0.0, 0.0, 1.0, + -0.7862181, 0.4986422, -0.3649891, -3.60424, -0.617866, -0.644018, 0.4510903, 4.948456, -0.01012688, 0.5801698, 0.8144326, 0.0, 0.0, 0.0, 0.0, 1.0, + -0.7516461, 0.5343239, -0.3866859, -3.604233, -0.6594896, -0.6177988, 0.4282499, 4.948456, -0.0100699, 0.5769079, 0.8167472, 0.0, 0.0, 0.0, 0.0, 1.0, + -0.7123689, 0.570349, -0.4089409, -3.604233, -0.7017336, -0.5871991, 0.4034442, 4.948456, -0.01002562, 0.5743688, 0.8185353, 0.0, 0.0, 0.0, 0.0, 1.0, + -0.668578, 0.6057349, -0.4313799, -3.60424, -0.7435747, -0.5523406, 0.3768509, 4.948456, -0.009996771, 0.5727175, 0.8196918, 0.0, 0.0, 0.0, 0.0, 1.0, + -0.6206752, 0.6395153, -0.4536326, -3.60424, -0.7840041, -0.5135734, 0.348683, 4.948456, -0.009985446, 0.5720688, 0.8201448, 0.0, 0.0, 0.0, 0.0, 1.0, + -0.569261, 0.6708149, -0.4753412, -3.60424, -0.8220961, -0.4714647, 0.3191848, 4.948456, -0.009992539, 0.5724757, 0.8198608, 0.0, 0.0, 0.0, 0.0, 1.0, + -0.5150982, 0.69892, -0.4961699, -3.60424, -0.8570724, -0.4267573, 0.2886257, 4.948456, -0.01001787, 0.5739243, 0.8188471, 0.0, 0.0, 0.0, 0.0, 1.0, + -0.4590522, 0.7233312, -0.5158131, -3.604233, -0.8883522, -0.3803048, 0.2572905, 4.948456, -0.01005989, 0.5763336, 0.8171526, 0.0, 0.0, 0.0, 0.0, 1.0, + -0.402018, 0.7437905, -0.5340011, -3.604233, -0.9155757, -0.3329929, 0.2254698, 4.948456, -0.01011627, 0.5795615, 0.8148657, 0.0, 0.0, 0.0, 0.0, 1.0, + -0.3448514, 0.7602781, -0.5505042, -3.604233, -0.9386019, -0.2856634, 0.1934494, 4.948456, -0.01018351, 0.5834156, 0.81211, 0.0, 0.0, 0.0, 0.0, 1.0, + -0.2883096, 0.7729834, -0.5651322, -3.604233, -0.9574822, -0.2390505, 0.1615007, 4.948456, -0.01025772, 0.5876663, 0.8090384, 0.0, 0.0, 0.0, 0.0, 1.0, + -0.233012, 0.7822599, -0.5777325, -3.604233, -0.9724189, -0.1937381, 0.1298729, 4.948456, -0.01033443, 0.59206, 0.8058276, 0.0, 0.0, 0.0, 0.0, 1.0, + -0.1794223, 0.7885726, -0.5881846, -3.604233, -0.983717, -0.1501394, 0.09878695, 4.948456, -0.01040899, 0.5963318, 0.8026705, 0.0, 0.0, 0.0, 0.0, 1.0, + -0.1278461, 0.7924466, -0.5963924, -3.604233, -0.9917386, -0.1084958, 0.06843274, 4.948456, -0.01047676, 0.6002143, 0.7997705, 0.0, 0.0, 0.0, 0.0, 1.0, + -0.07844251, 0.7944254, -0.602275, -3.604233, -0.9968628, -0.06888896, 0.03896778, 4.948456, -0.01053309, 0.6034424, 0.797337, 0.0, 0.0, 0.0, 0.0, 1.0, + -0.03124159, 0.7950362, -0.6057569, -3.604233, -0.9994558, -0.03126019, 0.01051843, 4.948456, -0.0105735, 0.605756, 0.7955802, 0.0, 0.0, 0.0, 0.0, 1.0, + 0.01383662, 0.7947676, -0.6067563, -3.604233, -0.9998481, 0.004568517, -0.01681673, 4.948456, -0.01059341, 0.6068968, 0.79471, 0.0, 0.0, 0.0, 0.0, 1.0, + 0.06043201, 0.7938129, -0.6051521, -3.604233, -0.998116, 0.04162442, -0.04507321, 4.948456, -0.01059061, 0.606736, 0.7948329, 0.0, 0.0, 0.0, 0.0, 1.0, + 0.1119688, 0.7914763, -0.6008564, -3.604233, -0.9936554, 0.08274453, -0.07617139, 4.948456, -0.01057028, 0.6055732, 0.7957195, 0.0, 0.0, 0.0, 0.0, 1.0, + 0.168173, 0.7868309, -0.593814, -3.604233, -0.9857011, 0.1277874, -0.1098346, 4.948456, -0.01053923, 0.6037944, 0.7970705, 0.0, 0.0, 0.0, 0.0, 1.0, + 0.2285881, 0.7789272, -0.5839691, -3.604233, -0.9734665, 0.176413, -0.145744, 4.948456, -0.01050424, 0.6017897, 0.7985855, 0.0, 0.0, 0.0, 0.0, 1.0, + 0.2925263, 0.7668539, -0.5712824, -3.604233, -0.9562, 0.2280299, -0.1835311, 4.948456, -0.01047211, 0.599948, 0.7999704, 0.0, 0.0, 0.0, 0.0, 1.0, + 0.3590423, 0.7498221, -0.5557476, -3.604233, -0.9332627, 0.2817667, -0.2227736, 4.948456, -0.01044934, 0.5986438, 0.8009471, 0.0, 0.0, 0.0, 0.0, 1.0, + 0.4269425, 0.7272649, -0.5374066, -3.604233, -0.9042184, 0.3364825, -0.2629989, 4.948456, -0.01044189, 0.5982185, 0.801265, 0.0, 0.0, 0.0, 0.0, 1.0, + 0.4948382, 0.6989327, -0.5163607, -3.604233, -0.8689221, 0.3908252, -0.3036938, 4.948456, -0.01045477, 0.5989566, 0.8007133, 0.0, 0.0, 0.0, 0.0, 1.0, + 0.5612462, 0.664961, -0.4927772, -3.604233, -0.8275823, 0.4433405, -0.3443204, 4.948456, -0.01049154, 0.6010624, 0.7991332, 0.0, 0.0, 0.0, 0.0, 1.0, + 0.6247192, 0.62589, -0.4668914, -3.604233, -0.7807779, 0.4926165, -0.3843365, 4.948456, -0.01055401, 0.604641, 0.7964282, 0.0, 0.0, 0.0, 0.0, 1.0, + 0.6839853, 0.5826182, -0.4389991, -3.604233, -0.7294181, 0.5374337, -0.423219, 4.948456, -0.01064211, 0.6096895, 0.7925689, 0.0, 0.0, 0.0, 0.0, 1.0, + 0.7380611, 0.5363017, -0.4094463, -3.60424, -0.6746481, 0.5768902, -0.4604864, 4.948456, -0.01075404, 0.6160994, 0.7875951, 0.0, 0.0, 0.0, 0.0, 1.0, + 0.7863181, 0.488218, -0.3786118, -3.60424, -0.6177257, 0.6104735, -0.4957187, 4.948456, -0.01088619, 0.6236709, 0.7816112, 0.0, 0.0, 0.0, 0.0, 1.0, + 0.8284913, 0.4396249, -0.3468888, -3.60424, -0.559893, 0.6380691, -0.5285713, 4.948456, -0.01103395, 0.6321375, 0.7747777, 0.0, 0.0, 0.0, 0.0, 1.0, + 0.8646382, 0.3916457, -0.3146654, -3.60424, -0.5022702, 0.659915, -0.5587815, 4.948456, -0.01119202, 0.641191, 0.7672997, 0.0, 0.0, 0.0, 0.0, 1.0, + 0.8950666, 0.3451928, -0.2823074, -3.604233, -0.4457876, 0.67652, -0.586169, 4.948456, -0.01135462, 0.6505096, 0.7594133, 0.0, 0.0, 0.0, 0.0, 1.0, + 0.9202526, 0.3009354, -0.2501456, -3.604237, -0.391155, 0.6885716, -0.6106284, 4.948456, -0.01151645, 0.6597782, 0.7513722, 0.0, 0.0, 0.0, 0.0, 1.0, + 0.9407628, 0.2593024, -0.218466, -3.604237, -0.3388641, 0.6968481, -0.6321186, 4.948456, -0.01167225, 0.6687042, 0.743437, 0.0, 0.0, 0.0, 0.0, 1.0, + 0.9571921, 0.22051, -0.1875058, -3.604237, -0.2892117, 0.7021489, -0.6506484, 4.948456, -0.01181745, 0.6770246, 0.7358655, 0.0, 0.0, 0.0, 0.0, 1.0, + 0.9701195, 0.1845988, -0.1574525, -3.604237, -0.2423329, 0.7052459, -0.6662606, 4.948456, -0.0119481, 0.6845084, 0.7289071, 0.0, 0.0, 0.0, 0.0, 1.0, + 0.9800799, 0.1514748, -0.128447, -3.604237, -0.1982367, 0.7068525, -0.6790153, 4.948456, -0.01206058, 0.6909522, 0.7227997, 0.0, 0.0, 0.0, 0.0, 1.0, + 0.9875495, 0.120946, -0.1005881, -3.604237, -0.1568382, 0.7076109, -0.6889765, 4.948456, -0.01215171, 0.6961746, 0.7177697, 0.0, 0.0, 0.0, 0.0, 1.0, + 0.99294, 0.09275209, -0.07393854, -3.604237, -0.1179854, 0.708089, -0.6961964, 4.948456, -0.01221859, 0.7000051, 0.7140333, 0.0, 0.0, 0.0, 0.0, 1.0, + 0.9965996, 0.06658637, -0.04853224, -3.604237, -0.08147919, 0.708786, -0.7007022, 4.948456, -0.01225823, 0.702274, 0.7118012, 0.0, 0.0, 0.0, 0.0, 1.0, + 0.9988154, 0.04210954, -0.02438092, -3.604237, -0.04708665, 0.7101408, -0.7024834, 4.948456, -0.01226735, 0.7027994, 0.7112823, 0.0, 0.0, 0.0, 0.0, 1.0, + 0.9998543, 0.01705855, 0.000387729, -3.604237, -0.01188439, 0.7125244, -0.7015467, 4.948456, -0.01224362, 0.7014401, 0.7126233, 0.0, 0.0, 0.0, 0.0, 1.0, + 0.9995603, -0.01083302, 0.02759671, -3.604237, 0.02702486, 0.7156738, -0.6979117, 4.948456, -0.01218974, 0.6983508, 0.7156518, 0.0, 0.0, 0.0, 0.0, 1.0, + 0.9974842, -0.04192149, 0.05716305, -3.604237, 0.06984543, 0.7189788, -0.6915135, 4.948456, -0.01210969, 0.6937665, 0.7200981, 0.0, 0.0, 0.0, 0.0, 1.0, + 0.9930891, -0.07652801, 0.08897829, -3.604237, 0.1167454, 0.7217376, -0.6822502, 4.948456, -0.01200771, 0.6879233, 0.7256841, 0.0, 0.0, 0.0, 0.0, 1.0, + 0.985746, -0.1148985, 0.122894, -3.604237, 0.1678192, 0.7231443, -0.6699993, 4.948456, -0.01188814, 0.6810733, 0.7321189, 0.0, 0.0, 0.0, 0.0, 1.0, + 0.9747384, -0.1571519, 0.1587079, -3.604237, 0.2230396, 0.7222912, -0.6546365, 4.948456, -0.01175588, 0.6734976, 0.739096, 0.0, 0.0, 0.0, 0.0, 1.0, + 0.9592842, -0.2032183, 0.1961527, -3.604233, 0.2822031, 0.7181887, -0.6360554, 4.948456, -0.01161652, 0.6655129, 0.746296, 0.0, 0.0, 0.0, 0.0, 1.0, + 0.9385799, -0.2527742, 0.234889, -3.604233, 0.3448709, 0.7098136, -0.6141895, 4.948456, -0.01147621, 0.6574724, 0.7533912, 0.0, 0.0, 0.0, 0.0, 1.0, + 0.911872, -0.3051843, 0.274503, -3.604233, 0.4103178, 0.696188, -0.5890346, 4.948456, -0.01134151, 0.6497576, 0.7600569, 0.0, 0.0, 0.0, 0.0, 1.0, + 0.8785563, -0.3594729, 0.3145123, -3.604233, 0.4775069, 0.6764898, -0.5606681, 4.948456, -0.01121938, 0.6427604, 0.7659851, 0.0, 0.0, 0.0, 0.0, 1.0, + 0.8382939, -0.41434, 0.3543803, -3.60424, 0.545105, 0.6501834, -0.5292655, 4.948456, -0.01111632, 0.6368547, 0.7709037, 0.0, 0.0, 0.0, 0.0, 1.0, + 0.7911232, -0.4682437, 0.3935378, -3.604233, 0.6115571, 0.6171433, -0.4951081, 4.948456, -0.01103788, 0.6323625, 0.7745941, 0.0, 0.0, 0.0, 0.0, 1.0, + 0.737534, -0.5195459, 0.4314111, -3.604233, 0.6752205, 0.5777373, -0.4585812, 4.948456, -0.01098823, 0.6295169, 0.7769091, 0.0, 0.0, 0.0, 0.0, 1.0, + 0.6784772, -0.5667056, 0.4674542, -3.604233, 0.7345395, 0.5328377, -0.4201615, 4.948456, -0.01096934, 0.6284337, 0.7777858, 0.0, 0.0, 0.0, 0.0, 1.0, + 0.6152917, -0.6084707, 0.5011781, -3.604233, 0.7882229, 0.48374, -0.3803946, 4.948456, -0.01098084, 0.6290938, 0.7772518, 0.0, 0.0, 0.0, 0.0, 1.0, + 0.5495616, -0.6440277, 0.532175, -3.604233, 0.8353804, 0.4320074, -0.3398663, 4.948456, -0.01102018, 0.6313462, 0.7754228, 0.0, 0.0, 0.0, 0.0, 1.0, + 0.4829367, -0.6730687, 0.5601345, -3.604233, 0.875585, 0.3792735, -0.2991694, 4.948456, -0.01108264, 0.6349254, 0.7724939, 0.0, 0.0, 0.0, 0.0, 1.0, + 0.4169639, -0.6957691, 0.5848475, -3.604233, 0.9088544, 0.3270586, -0.2588749, 4.948456, -0.01116216, 0.6394828, 0.7687244, 0.0, 0.0, 0.0, 0.0, 1.0, + 0.3529599, -0.712699, 0.6062008, -3.604233, 0.9355707, 0.2766305, -0.219506, 4.948456, -0.01125186, 0.6446207, 0.7644199, 0.0, 0.0, 0.0, 0.0, 1.0, + 0.2919477, -0.7246976, 0.6241635, -3.604233, 0.9563669, 0.2289359, -0.1815226, 4.948456, -0.01134443, 0.6499245, 0.7599141, 0.0, 0.0, 0.0, 0.0, 1.0, + 0.2346459, -0.732747, 0.638767, -3.604233, 0.9720136, 0.1845905, -0.1453127, 4.948456, -0.01143282, 0.6549873, 0.7555534, 0.0, 0.0, 0.0, 0.0, 1.0, + 0.181502, -0.737869, 0.6500818, -3.604233, 0.9833232, 0.1439149, -0.1111934, 4.948456, -0.01151025, 0.6594224, 0.7516846, 0.0, 0.0, 0.0, 0.0, 1.0, + 0.1327444, -0.741052, 0.6581952, -3.604233, 0.9910826, 0.1069943, -0.07941782, 4.948456, -0.01157039, 0.6628683, 0.7486467, 0.0, 0.0, 0.0, 0.0, 1.0, + 0.08844393, -0.7432092, 0.6631875, -3.604233, 0.9960134, 0.07374501, -0.05018699, 4.948456, -0.01160728, 0.6649825, 0.7467687, 0.0, 0.0, 0.0, 0.0, 1.0, + 0.04857146, -0.7451631, 0.6651111, -3.604233, 0.9987521, 0.04397761, -0.02366578, 4.948456, -0.01161509, 0.6654308, 0.7463693, 0.0, 0.0, 0.0, 0.0, 1.0, + 0.00999093, -0.7486063, 0.6629396, -3.604233, 0.9998831, 0.01515007, 0.002038896, 4.948456, -0.01156991, 0.6628418, 0.74867, 0.0, 0.0, 0.0, 0.0, 1.0, + -0.03110986, -0.7543451, 0.6557404, -3.604233, 0.9994502, -0.0159583, 0.02905827, 4.948456, -0.01145547, 0.6562842, 0.7544269, 0.0, 0.0, 0.0, 0.0, 1.0, + -0.07583332, -0.7616494, 0.6435368, -3.604233, 0.9970566, -0.05062294, 0.05757743, 4.948456, -0.01127612, 0.646009, 0.7632465, 0.0, 0.0, 0.0, 0.0, 1.0, + -0.125339, -0.7695158, 0.6262073, -3.604233, 0.9920525, -0.09019017, 0.08773475, 4.948456, -0.01103556, 0.6322273, 0.7747045, 0.0, 0.0, 0.0, 0.0, 1.0, + -0.1808623, -0.7765536, 0.6035341, -3.604233, 0.9834498, -0.136096, 0.1196008, 4.948456, -0.01073789, 0.6151768, 0.7883161, 0.0, 0.0, 0.0, 0.0, 1.0, + -0.2436821, -0.7808338, 0.5752544, -3.604233, 0.9697994, -0.1898243, 0.1531524, 4.948456, -0.01038926, 0.595202, 0.8035089, 0.0, 0.0, 0.0, 0.0, 1.0, + -0.3149999, -0.779716, 0.5411265, -3.604233, 0.9490389, -0.2527637, 0.1882431, 4.948456, -0.009999036, 0.5728468, 0.8196014, 0.0, 0.0, 0.0, 0.0, 1.0, + -0.3956635, -0.7697027, 0.5010071, -3.604233, 0.9183455, -0.3258939, 0.2245765, 4.948452, -0.009581983, 0.5489544, 0.8357974, 0.0, 0.0, 0.0, 0.0, 1.0, + -0.485654, -0.7464366, 0.4549424, -3.604233, 0.874103, -0.4092234, 0.2616869, 4.948456, -0.009159624, 0.5247558, 0.8512035, 0.0, 0.0, 0.0, 0.0, 1.0, + -0.5833081, -0.705078, 0.4032577, -3.60424, 0.8122037, -0.5009589, 0.2989403, 4.948456, -0.00876069, 0.5019018, 0.8648803, 0.0, 0.0, 0.0, 0.0, 1.0, + -0.6844569, -0.6413787, 0.3466296, -3.604233, 0.7290046, -0.5966141, 0.3355647, 4.948456, -0.008419811, 0.4823743, 0.8759248, 0.0, 0.0, 0.0, 0.0, 1.0, + -0.7821014, -0.5535855, 0.2861125, -3.60424, 0.6230974, -0.6887102, 0.3707128, 4.948456, -0.008172631, 0.468211, 0.8835788, 0.0, 0.0, 0.0, 0.0, 1.0, + -0.8675363, -0.4445291, 0.2231022, -3.60424, 0.4973086, -0.7680035, 0.4035527, 4.948456, -0.00804758, 0.4610474, 0.8873391, 0.0, 0.0, 0.0, 0.0, 1.0, + -0.9331629, -0.3222609, 0.1592317, -3.604237, 0.3593631, -0.8264684, 0.4333685, 4.948456, -0.008057653, 0.4616255, 0.8870384, 0.0, 0.0, 0.0, 0.0, 1.0, + -0.9754795, -0.1979443, 0.09621655, -3.604237, 0.2199372, -0.8604382, 0.4596453, 4.948456, -0.008195757, 0.4695363, 0.8828752, 0.0, 0.0, 0.0, 0.0, 1.0, + -0.9959915, -0.08201849, 0.03568905, -3.604237, 0.08904808, -0.8715689, 0.4821185, 4.948456, -0.008437097, 0.4833641, 0.8753788, 0.0, 0.0, 0.0, 0.0, 1.0, + -0.9996056, 0.01870596, -0.02093797, -3.604237, -0.02667945, -0.8651663, 0.5007749, 4.948456, -0.008747339, 0.5011361, 0.8653243, 0.0, 0.0, 0.0, 0.0, 1.0, + -0.9921768, 0.1015939, -0.07255089, -3.604237, -0.1245082, -0.8476041, 0.5158149, 4.948456, -0.009090781, 0.5208129, 0.8536225, 0.0, 0.0, 0.0, 0.0, 1.0, + -0.9788163, 0.167069, -0.1183493, -3.604237, -0.2045227, -0.824512, 0.5275895, 4.948456, -0.009436488, 0.5406184, 0.8412151, 0.0, 0.0, 0.0, 0.0, 1.0, + -0.9632999, 0.2171407, -0.1578071, -3.604235, -0.2682497, -0.8001105, 0.536531, 4.948456, -0.00976032, 0.559172, 0.8289943, 0.0, 0.0, 0.0, 0.0, 1.0, + -0.9481591, 0.2542938, -0.1906011, -3.604237, -0.3176369, -0.7772766, 0.5430913, 4.948456, -0.01004499, 0.5754789, 0.8177549, 0.0, 0.0, 0.0, 0.0, 1.0, + -0.9350079, 0.2808505, -0.2165246, -3.604237, -0.3544774, -0.757876, 0.5476949, 4.948456, -0.0102784, 0.5888522, 0.8081753, 0.0, 0.0, 0.0, 0.0, 1.0, + -0.9248695, 0.2986678, -0.2354014, -3.604237, -0.3801407, -0.7431137, 0.5507043, 4.948456, -0.01045233, 0.5988154, 0.8008189, 0.0, 0.0, 0.0, 0.0, 1.0, + -0.9184251, 0.3090049, -0.2470043, -3.604237, -0.3954536, -0.7338082, 0.5523966, 4.948456, -0.01056051, 0.6050138, 0.796145, 0.0, 0.0, 0.0, 0.0, 1.0, + -0.9161802, 0.3124457, -0.2509807, -3.604237, -0.4006261, -0.7305838, 0.5529431, 4.948456, -0.0105977, 0.6071451, 0.7945203, 0.0, 0.0, 0.0, 0.0, 1.0, +}; + +enum interpolation const array_node_camera001_matrix_interpolation_array[] = { + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, + interpolation::LINEAR, +}; + +sampler const sampler_node_camera001_matrix_sampler = { + // node_camera001_matrix_input + .input = { + .float_array = array_node_camera001_matrix_input_array, + .count = 101, + .stride = 1, + }, + // node_camera001_matrix_output + .output = { + .float_array = array_node_camera001_matrix_output_array, + .count = 101, + .stride = 16, + }, + // node_camera001_matrix_interpolation + .interpolation = { + .interpolation_array = array_node_camera001_matrix_interpolation_array, + .count = 101, + .stride = 1, + }, +}; + +channel const node_channel_node_point001_translation_x = { + .source_sampler = &sampler_node_point001_translation_x_sampler, + .target_transform_index = 0, + .target_attribute = target_attribute::X, +}; + +channel const node_channel_node_point001_translation_y = { + .source_sampler = &sampler_node_point001_translation_y_sampler, + .target_transform_index = 0, + .target_attribute = target_attribute::Y, +}; + +channel const node_channel_node_point001_translation_z = { + .source_sampler = &sampler_node_point001_translation_z_sampler, + .target_transform_index = 0, + .target_attribute = target_attribute::Z, +}; + +channel const node_channel_node_point002_translation_x = { + .source_sampler = &sampler_node_point002_translation_x_sampler, + .target_transform_index = 0, + .target_attribute = target_attribute::X, +}; + +channel const node_channel_node_point002_translation_y = { + .source_sampler = &sampler_node_point002_translation_y_sampler, + .target_transform_index = 0, + .target_attribute = target_attribute::Y, +}; + +channel const node_channel_node_point002_translation_z = { + .source_sampler = &sampler_node_point002_translation_z_sampler, + .target_transform_index = 0, + .target_attribute = target_attribute::Z, +}; + +image const * const images[] = { +}; + +effect const effect_material__148 = { + .type = effect_type::BLINN, + .blinn = { + .emission = { + .type = color_or_texture_type::COLOR, + .color = {0.0f, 0.0f, 0.0f, 1.0f}, + }, + .ambient = { + .type = color_or_texture_type::COLOR, + .color = {0.588f, 0.588f, 0.588f, 1.0f}, + }, + .diffuse = { + .type = color_or_texture_type::COLOR, + .color = {0.588f, 0.588f, 0.588f, 1.0f}, + }, + .specular = { + .type = color_or_texture_type::COLOR, + .color = {0.0f, 0.0f, 0.0f, 1.0f}, + }, + .shininess = 10.0f, + .reflective = { + .type = color_or_texture_type::COLOR, + .color = {0.0f, 0.0f, 0.0f, 1.0f}, + }, + .reflectivity = 0.0f, + .transparent = { + .type = color_or_texture_type::COLOR, + .color = {1.0f, 1.0f, 1.0f, 1.0f}, + }, + .transparency = 1.0f, + .index_of_refraction = 0.0f, + } +}; + +effect const effect_coloreffectr5g54b179 = { + .type = effect_type::PHONG, + .phong = { + .emission = { + .type = color_or_texture_type::COLOR, + .color = {0.0f, 0.0f, 0.0f, 0.0f}, + }, + .ambient = { + .type = color_or_texture_type::COLOR, + .color = {0.01960784f, 0.2117647f, 0.7019608f, 1.0f}, + }, + .diffuse = { + .type = color_or_texture_type::COLOR, + .color = {0.01960784f, 0.2117647f, 0.7019608f, 1.0f}, + }, + .specular = { + .type = color_or_texture_type::COLOR, + .color = {1.0f, 1.0f, 1.0f, 1.0f}, + }, + .shininess = 10.0f, + .reflective = { + .type = color_or_texture_type::COLOR, + .color = {0.0f, 0.0f, 0.0f, 1.0f}, + }, + .reflectivity = 0.0f, + .transparent = { + .type = color_or_texture_type::COLOR, + .color = {1.0f, 1.0f, 1.0f, 1.0f}, + }, + .transparency = 1.0f, + .index_of_refraction = 0.0f, + } +}; + +effect const effect_coloreffectr134g110b8 = { + .type = effect_type::PHONG, + .phong = { + .emission = { + .type = color_or_texture_type::COLOR, + .color = {0.0f, 0.0f, 0.0f, 0.0f}, + }, + .ambient = { + .type = color_or_texture_type::COLOR, + .color = {0.5254902f, 0.4313725f, 0.03137255f, 1.0f}, + }, + .diffuse = { + .type = color_or_texture_type::COLOR, + .color = {0.5254902f, 0.4313725f, 0.03137255f, 1.0f}, + }, + .specular = { + .type = color_or_texture_type::COLOR, + .color = {1.0f, 1.0f, 1.0f, 1.0f}, + }, + .shininess = 10.0f, + .reflective = { + .type = color_or_texture_type::COLOR, + .color = {0.0f, 0.0f, 0.0f, 1.0f}, + }, + .reflectivity = 0.0f, + .transparent = { + .type = color_or_texture_type::COLOR, + .color = {1.0f, 1.0f, 1.0f, 1.0f}, + }, + .transparency = 1.0f, + .index_of_refraction = 0.0f, + } +}; + +effect const effect_coloreffectr255g229b0 = { + .type = effect_type::PHONG, + .phong = { + .emission = { + .type = color_or_texture_type::COLOR, + .color = {0.0f, 0.0f, 0.0f, 0.0f}, + }, + .ambient = { + .type = color_or_texture_type::COLOR, + .color = {1.0f, 0.8980392f, 0.0f, 1.0f}, + }, + .diffuse = { + .type = color_or_texture_type::COLOR, + .color = {1.0f, 0.8980392f, 0.0f, 1.0f}, + }, + .specular = { + .type = color_or_texture_type::COLOR, + .color = {1.0f, 1.0f, 1.0f, 1.0f}, + }, + .shininess = 10.0f, + .reflective = { + .type = color_or_texture_type::COLOR, + .color = {0.0f, 0.0f, 0.0f, 1.0f}, + }, + .reflectivity = 0.0f, + .transparent = { + .type = color_or_texture_type::COLOR, + .color = {1.0f, 1.0f, 1.0f, 1.0f}, + }, + .transparency = 1.0f, + .index_of_refraction = 0.0f, + } +}; + +effect const effect_coloreffectr6g134b6 = { + .type = effect_type::PHONG, + .phong = { + .emission = { + .type = color_or_texture_type::COLOR, + .color = {0.0f, 0.0f, 0.0f, 0.0f}, + }, + .ambient = { + .type = color_or_texture_type::COLOR, + .color = {0.02352941f, 0.5254902f, 0.02352941f, 1.0f}, + }, + .diffuse = { + .type = color_or_texture_type::COLOR, + .color = {0.02352941f, 0.5254902f, 0.02352941f, 1.0f}, + }, + .specular = { + .type = color_or_texture_type::COLOR, + .color = {1.0f, 1.0f, 1.0f, 1.0f}, + }, + .shininess = 10.0f, + .reflective = { + .type = color_or_texture_type::COLOR, + .color = {0.0f, 0.0f, 0.0f, 1.0f}, + }, + .reflectivity = 0.0f, + .transparent = { + .type = color_or_texture_type::COLOR, + .color = {1.0f, 1.0f, 1.0f, 1.0f}, + }, + .transparency = 1.0f, + .index_of_refraction = 0.0f, + } +}; + +effect const effect_coloreffectr88g88b225 = { + .type = effect_type::PHONG, + .phong = { + .emission = { + .type = color_or_texture_type::COLOR, + .color = {0.0f, 0.0f, 0.0f, 0.0f}, + }, + .ambient = { + .type = color_or_texture_type::COLOR, + .color = {0.345098f, 0.345098f, 0.8823529f, 1.0f}, + }, + .diffuse = { + .type = color_or_texture_type::COLOR, + .color = {0.345098f, 0.345098f, 0.8823529f, 1.0f}, + }, + .specular = { + .type = color_or_texture_type::COLOR, + .color = {1.0f, 1.0f, 1.0f, 1.0f}, + }, + .shininess = 10.0f, + .reflective = { + .type = color_or_texture_type::COLOR, + .color = {0.0f, 0.0f, 0.0f, 1.0f}, + }, + .reflectivity = 0.0f, + .transparent = { + .type = color_or_texture_type::COLOR, + .color = {1.0f, 1.0f, 1.0f, 1.0f}, + }, + .transparency = 1.0f, + .index_of_refraction = 0.0f, + } +}; + +material const material_coloreffectr5g54b179_material = { + .effect = &effect_coloreffectr5g54b179, +}; + +material const material_coloreffectr134g110b8_material = { + .effect = &effect_coloreffectr134g110b8, +}; + +material const material_coloreffectr255g229b0_material = { + .effect = &effect_coloreffectr255g229b0, +}; + +material const material_coloreffectr6g134b6_material = { + .effect = &effect_coloreffectr6g134b6, +}; + +material const material_coloreffectr88g88b225_material = { + .effect = &effect_coloreffectr88g88b225, +}; + +material const material_material__148_material = { + .effect = &effect_material__148, +}; + +input_element const input_elements_position_0_3_normal_0_3_texcoord_0_3[] = { + { + .semantic = "POSITION", + .semantic_index = 0, + .format = input_format::FLOAT3, + }, + { + .semantic = "NORMAL", + .semantic_index = 0, + .format = input_format::FLOAT3, + }, + { + .semantic = "TEXCOORD", + .semantic_index = 0, + .format = input_format::FLOAT3, + }, +}; + +triangles const triangles_geom_plane001[] = { + { + .count = 20000, // triangles + .index_offset = 0, // indices + .inputs_index = 0, // index into inputs_list + }, +}; + +geometry const geometry_geom_plane001 = { + .mesh = { + .triangles = triangles_geom_plane001, + .triangles_count = 1, + + .vertex_buffer_offset = 0, + .vertex_buffer_size = 367236, + + .index_buffer_offset = 0, + .index_buffer_size = 240000, + } +}; + +triangles const triangles_geom_torus_knot001[] = { + { + .count = 2880, // triangles + .index_offset = 0, // indices + .inputs_index = 0, // index into inputs_list + }, +}; + +geometry const geometry_geom_torus_knot001 = { + .mesh = { + .triangles = triangles_geom_torus_knot001, + .triangles_count = 1, + + .vertex_buffer_offset = 367236, + .vertex_buffer_size = 56628, + + .index_buffer_offset = 240000, + .index_buffer_size = 34560, + } +}; + +triangles const triangles_geom_cone001[] = { + { + .count = 288, // triangles + .index_offset = 0, // indices + .inputs_index = 0, // index into inputs_list + }, +}; + +geometry const geometry_geom_cone001 = { + .mesh = { + .triangles = triangles_geom_cone001, + .triangles_count = 1, + + .vertex_buffer_offset = 423864, + .vertex_buffer_size = 7488, + + .index_buffer_offset = 274560, + .index_buffer_size = 3456, + } +}; + +triangles const triangles_geom_box001[] = { + { + .count = 32, // triangles + .index_offset = 0, // indices + .inputs_index = 0, // index into inputs_list + }, +}; + +geometry const geometry_geom_box001 = { + .mesh = { + .triangles = triangles_geom_box001, + .triangles_count = 1, + + .vertex_buffer_offset = 431352, + .vertex_buffer_size = 2880, + + .index_buffer_offset = 278016, + .index_buffer_size = 384, + } +}; + +geometry const * const geometries[] = { + &geometry_geom_plane001, + &geometry_geom_torus_knot001, + &geometry_geom_cone001, + &geometry_geom_box001, +}; + +transform const transforms_node_environmentambientlight[] = { +}; + +instance_geometry const instance_geometries_node_environmentambientlight[] = { +}; + +instance_controller const instance_controllers_node_environmentambientlight[] = { +}; + +instance_light const instance_lights_node_environmentambientlight[] = { + { + .light = &light_environmentambientlight, + } +}; + +channel const * const node_channels_node_environmentambientlight[] = { +}; + +node const node_node_environmentambientlight = { + .name = "EnvironmentAmbientLight", + + .parent_index = -1, + + .type = node_type::NODE, + + .transforms = transforms_node_environmentambientlight, + .transforms_count = 0, + + .instance_geometries = instance_geometries_node_environmentambientlight, + .instance_geometries_count = 0, + + .instance_controllers = instance_controllers_node_environmentambientlight, + .instance_controllers_count = 0, + + .instance_lights = instance_lights_node_environmentambientlight, + .instance_lights_count = 1, + + .channels = node_channels_node_environmentambientlight, + .channels_count = 0, +}; + +transform const transforms_node_plane001[] = { +}; + +instance_material const instance_geometry_instance_materials_node_plane001_0[] = { + { + .element_index = 0, // an index into mesh.triangles + .material = &material_material__148_material, + + .emission = { .input_set = -1 }, + .ambient = { .input_set = -1 }, + .diffuse = { .input_set = -1 }, + .specular = { .input_set = -1 }, + }, +}; + +instance_geometry const instance_geometries_node_plane001[] = { + { + .geometry = &geometry_geom_plane001, + + .instance_materials = instance_geometry_instance_materials_node_plane001_0, + .instance_materials_count = 1, + }, +}; + +instance_controller const instance_controllers_node_plane001[] = { +}; + +instance_light const instance_lights_node_plane001[] = { +}; + +channel const * const node_channels_node_plane001[] = { +}; + +node const node_node_plane001 = { + .name = "Plane001", + + .parent_index = -1, + + .type = node_type::NODE, + + .transforms = transforms_node_plane001, + .transforms_count = 0, + + .instance_geometries = instance_geometries_node_plane001, + .instance_geometries_count = 1, + + .instance_controllers = instance_controllers_node_plane001, + .instance_controllers_count = 0, + + .instance_lights = instance_lights_node_plane001, + .instance_lights_count = 0, + + .channels = node_channels_node_plane001, + .channels_count = 0, +}; + +transform const transforms_node_camera001_target[] = { + { + .type = transform_type::TRANSLATE, + .translate = {10.26849f, 7.983534f, 43.74428f}, + }, + { + .type = transform_type::ROTATE, + .rotate = {-0.7700763f, 0.318976f, 0.5524825f, -73.7201f}, + }, +}; + +instance_geometry const instance_geometries_node_camera001_target[] = { +}; + +instance_controller const instance_controllers_node_camera001_target[] = { +}; + +instance_light const instance_lights_node_camera001_target[] = { +}; + +channel const * const node_channels_node_camera001_target[] = { +}; + +node const node_node_camera001_target = { + .name = "Camera001.Target", + + .parent_index = -1, + + .type = node_type::NODE, + + .transforms = transforms_node_camera001_target, + .transforms_count = 2, + + .instance_geometries = instance_geometries_node_camera001_target, + .instance_geometries_count = 0, + + .instance_controllers = instance_controllers_node_camera001_target, + .instance_controllers_count = 0, + + .instance_lights = instance_lights_node_camera001_target, + .instance_lights_count = 0, + + .channels = node_channels_node_camera001_target, + .channels_count = 0, +}; + +transform const transforms_node_torus_knot001[] = { + { + .type = transform_type::TRANSLATE, + .translate = {-6.954298f, 40.46052f, 74.58796f}, + }, + { + .type = transform_type::ROTATE, + .rotate = {-0.5773502f, 0.5773503f, 0.5773503f, -120.0f}, + }, +}; + +instance_material const instance_geometry_instance_materials_node_torus_knot001_0[] = { + { + .element_index = 0, // an index into mesh.triangles + .material = &material_coloreffectr134g110b8_material, + + .emission = { .input_set = -1 }, + .ambient = { .input_set = -1 }, + .diffuse = { .input_set = -1 }, + .specular = { .input_set = -1 }, + }, +}; + +instance_geometry const instance_geometries_node_torus_knot001[] = { + { + .geometry = &geometry_geom_torus_knot001, + + .instance_materials = instance_geometry_instance_materials_node_torus_knot001_0, + .instance_materials_count = 1, + }, +}; + +instance_controller const instance_controllers_node_torus_knot001[] = { +}; + +instance_light const instance_lights_node_torus_knot001[] = { +}; + +channel const * const node_channels_node_torus_knot001[] = { +}; + +node const node_node_torus_knot001 = { + .name = "Torus_Knot001", + + .parent_index = -1, + + .type = node_type::NODE, + + .transforms = transforms_node_torus_knot001, + .transforms_count = 2, + + .instance_geometries = instance_geometries_node_torus_knot001, + .instance_geometries_count = 1, + + .instance_controllers = instance_controllers_node_torus_knot001, + .instance_controllers_count = 0, + + .instance_lights = instance_lights_node_torus_knot001, + .instance_lights_count = 0, + + .channels = node_channels_node_torus_knot001, + .channels_count = 0, +}; + +transform const transforms_node_direct001_target[] = { + { + .type = transform_type::ROTATE, + .rotate = {-0.5773502f, 0.5773503f, 0.5773503f, -120.0f}, + }, +}; + +instance_geometry const instance_geometries_node_direct001_target[] = { +}; + +instance_controller const instance_controllers_node_direct001_target[] = { +}; + +instance_light const instance_lights_node_direct001_target[] = { +}; + +channel const * const node_channels_node_direct001_target[] = { +}; + +node const node_node_direct001_target = { + .name = "Direct001.Target", + + .parent_index = -1, + + .type = node_type::NODE, + + .transforms = transforms_node_direct001_target, + .transforms_count = 1, + + .instance_geometries = instance_geometries_node_direct001_target, + .instance_geometries_count = 0, + + .instance_controllers = instance_controllers_node_direct001_target, + .instance_controllers_count = 0, + + .instance_lights = instance_lights_node_direct001_target, + .instance_lights_count = 0, + + .channels = node_channels_node_direct001_target, + .channels_count = 0, +}; + +transform const transforms_node_cone001[] = { + { + .type = transform_type::TRANSLATE, + .translate = {-70.49181f, -17.80504f, 52.78688f}, + }, + { + .type = transform_type::ROTATE, + .rotate = {1.0f, 0.0f, 0.0f, -89.7081f}, + }, +}; + +instance_material const instance_geometry_instance_materials_node_cone001_0[] = { + { + .element_index = 0, // an index into mesh.triangles + .material = &material_coloreffectr6g134b6_material, + + .emission = { .input_set = -1 }, + .ambient = { .input_set = -1 }, + .diffuse = { .input_set = -1 }, + .specular = { .input_set = -1 }, + }, +}; + +instance_geometry const instance_geometries_node_cone001[] = { + { + .geometry = &geometry_geom_cone001, + + .instance_materials = instance_geometry_instance_materials_node_cone001_0, + .instance_materials_count = 1, + }, +}; + +instance_controller const instance_controllers_node_cone001[] = { +}; + +instance_light const instance_lights_node_cone001[] = { +}; + +channel const * const node_channels_node_cone001[] = { +}; + +node const node_node_cone001 = { + .name = "Cone001", + + .parent_index = -1, + + .type = node_type::NODE, + + .transforms = transforms_node_cone001, + .transforms_count = 2, + + .instance_geometries = instance_geometries_node_cone001, + .instance_geometries_count = 1, + + .instance_controllers = instance_controllers_node_cone001, + .instance_controllers_count = 0, + + .instance_lights = instance_lights_node_cone001, + .instance_lights_count = 0, + + .channels = node_channels_node_cone001, + .channels_count = 0, +}; + +transform const transforms_node_box001[] = { + { + .type = transform_type::TRANSLATE, + .translate = {72.78688f, -2.19274e-06f, 50.16393f}, + }, + { + .type = transform_type::ROTATE, + .rotate = {-1.0f, 0.0f, 0.0f, -90.0f}, + }, +}; + +instance_material const instance_geometry_instance_materials_node_box001_0[] = { + { + .element_index = 0, // an index into mesh.triangles + .material = &material_coloreffectr88g88b225_material, + + .emission = { .input_set = -1 }, + .ambient = { .input_set = -1 }, + .diffuse = { .input_set = -1 }, + .specular = { .input_set = -1 }, + }, +}; + +instance_geometry const instance_geometries_node_box001[] = { + { + .geometry = &geometry_geom_box001, + + .instance_materials = instance_geometry_instance_materials_node_box001_0, + .instance_materials_count = 1, + }, +}; + +instance_controller const instance_controllers_node_box001[] = { +}; + +instance_light const instance_lights_node_box001[] = { +}; + +channel const * const node_channels_node_box001[] = { +}; + +node const node_node_box001 = { + .name = "Box001", + + .parent_index = -1, + + .type = node_type::NODE, + + .transforms = transforms_node_box001, + .transforms_count = 2, + + .instance_geometries = instance_geometries_node_box001, + .instance_geometries_count = 1, + + .instance_controllers = instance_controllers_node_box001, + .instance_controllers_count = 0, + + .instance_lights = instance_lights_node_box001, + .instance_lights_count = 0, + + .channels = node_channels_node_box001, + .channels_count = 0, +}; + +transform const transforms_node_point001[] = { + { + .type = transform_type::TRANSLATE, + .translate = {-42.21109f, -40.46347f, 156.481f}, + }, +}; + +instance_geometry const instance_geometries_node_point001[] = { +}; + +instance_controller const instance_controllers_node_point001[] = { +}; + +instance_light const instance_lights_node_point001[] = { +}; + +channel const * const node_channels_node_point001[] = { + &node_channel_node_point001_translation_z, + &node_channel_node_point001_translation_y, + &node_channel_node_point001_translation_x, +}; + +node const node_node_point001 = { + .name = "Point001", + + .parent_index = -1, + + .type = node_type::NODE, + + .transforms = transforms_node_point001, + .transforms_count = 1, + + .instance_geometries = instance_geometries_node_point001, + .instance_geometries_count = 0, + + .instance_controllers = instance_controllers_node_point001, + .instance_controllers_count = 0, + + .instance_lights = instance_lights_node_point001, + .instance_lights_count = 0, + + .channels = node_channels_node_point001, + .channels_count = 3, +}; + +transform const transforms_node_direct001[] = { + { + .type = transform_type::MATRIX, + .matrix = {0.692005f, -0.7218927f, 0.0f, 0.0f, 0.6737756f, 0.64588f, 0.3589784f, 0.0f, -0.2591439f, -0.2484148f, 0.9333459f, 0.0f, -4.146301f, -3.974632f, 10.48219f, 1.0f}, + }, +}; + +instance_geometry const instance_geometries_node_direct001[] = { +}; + +instance_controller const instance_controllers_node_direct001[] = { +}; + +instance_light const instance_lights_node_direct001[] = { + { + .light = &light_direct001_light, + } +}; + +channel const * const node_channels_node_direct001[] = { +}; + +node const node_node_direct001 = { + .name = "Direct001", + + .parent_index = 7, + + .type = node_type::NODE, + + .transforms = transforms_node_direct001, + .transforms_count = 1, + + .instance_geometries = instance_geometries_node_direct001, + .instance_geometries_count = 0, + + .instance_controllers = instance_controllers_node_direct001, + .instance_controllers_count = 0, + + .instance_lights = instance_lights_node_direct001, + .instance_lights_count = 1, + + .channels = node_channels_node_direct001, + .channels_count = 0, +}; + +transform const transforms_node_point002[] = { + { + .type = transform_type::TRANSLATE, + .translate = {-57.36452f, 159.98f, 269.2574f}, + }, +}; + +instance_geometry const instance_geometries_node_point002[] = { +}; + +instance_controller const instance_controllers_node_point002[] = { +}; + +instance_light const instance_lights_node_point002[] = { +}; + +channel const * const node_channels_node_point002[] = { + &node_channel_node_point002_translation_z, + &node_channel_node_point002_translation_x, + &node_channel_node_point002_translation_y, +}; + +node const node_node_point002 = { + .name = "Point002", + + .parent_index = -1, + + .type = node_type::NODE, + + .transforms = transforms_node_point002, + .transforms_count = 1, + + .instance_geometries = instance_geometries_node_point002, + .instance_geometries_count = 0, + + .instance_controllers = instance_controllers_node_point002, + .instance_controllers_count = 0, + + .instance_lights = instance_lights_node_point002, + .instance_lights_count = 0, + + .channels = node_channels_node_point002, + .channels_count = 3, +}; + +transform const transforms_node_camera001[] = { + { + .type = transform_type::MATRIX, + .matrix = {-0.9161802f, -0.4006261f, -0.01059775f, 0.0f, 0.3124457f, -0.7305838f, 0.6071451f, 0.0f, -0.2509807f, 0.5529431f, 0.7945203f, 0.0f, -3.604237f, 4.948456f, 0.0f, 1.0f}, + }, +}; + +instance_geometry const instance_geometries_node_camera001[] = { +}; + +instance_controller const instance_controllers_node_camera001[] = { +}; + +instance_light const instance_lights_node_camera001[] = { +}; + +channel const * const node_channels_node_camera001[] = { +}; + +node const node_node_camera001 = { + .name = "Camera001", + + .parent_index = 9, + + .type = node_type::NODE, + + .transforms = transforms_node_camera001, + .transforms_count = 1, + + .instance_geometries = instance_geometries_node_camera001, + .instance_geometries_count = 0, + + .instance_controllers = instance_controllers_node_camera001, + .instance_controllers_count = 0, + + .instance_lights = instance_lights_node_camera001, + .instance_lights_count = 0, + + .channels = node_channels_node_camera001, + .channels_count = 0, +}; + +node const * const nodes[] = { + &node_node_environmentambientlight, // 0 + &node_node_plane001, // 1 + &node_node_camera001_target, // 2 + &node_node_torus_knot001, // 3 + &node_node_direct001_target, // 4 + &node_node_cone001, // 5 + &node_node_box001, // 6 + &node_node_point001, // 7 + &node_node_direct001, // 8 + &node_node_point002, // 9 + &node_node_camera001, // 10 +}; + +inputs const inputs_list[] = { + { + .elements = input_elements_position_0_3_normal_0_3_texcoord_0_3, + .elements_count = 3, + }, +}; + +extern collada::types::descriptor const descriptor; + +collada::types::descriptor const descriptor = { + .nodes = nodes, + .nodes_count = (sizeof (nodes)) / (sizeof (nodes[0])), + + .inputs_list = inputs_list, + .inputs_list_count = (sizeof (inputs_list)) / (sizeof (inputs_list[0])), + + .images = images, + .images_count = (sizeof (images)) / (sizeof (images[0])), + + .position_normal_texture_buffer = "data/scenes/shadow_test/shadow_test.vtx", + .joint_weight_buffer = "data/scenes/shadow_test/shadow_test.vjw", + .index_buffer = "data/scenes/shadow_test/shadow_test.idx", +}; + +} diff --git a/data/scenes/shadow_test/shadow_test.idx b/data/scenes/shadow_test/shadow_test.idx new file mode 100644 index 0000000..d37b3cf Binary files /dev/null and b/data/scenes/shadow_test/shadow_test.idx differ diff --git a/data/scenes/shadow_test/shadow_test.vjw b/data/scenes/shadow_test/shadow_test.vjw new file mode 100644 index 0000000..e69de29 diff --git a/data/scenes/shadow_test/shadow_test.vtx b/data/scenes/shadow_test/shadow_test.vtx new file mode 100644 index 0000000..6e431c5 Binary files /dev/null and b/data/scenes/shadow_test/shadow_test.vtx differ diff --git a/include/collada/animate.h b/include/collada/animate.h new file mode 100644 index 0000000..96a0cf5 --- /dev/null +++ b/include/collada/animate.h @@ -0,0 +1,15 @@ +#include "collada/instance_types.h" + +namespace collada::animate { + static inline float fract(float f) + { + return f - floorf(f); + } + + static inline float loop(float f, float n) + { + return fract(f / n) * n; + } + + void animate_node(instance_types::node& node_instance, float t); +} diff --git a/include/collada/instance_types.h b/include/collada/instance_types.h index a286154..c315fe9 100644 --- a/include/collada/instance_types.h +++ b/include/collada/instance_types.h @@ -21,8 +21,12 @@ namespace collada::instance_types { types::transform_type type; }; - struct node_instance { - transform * transforms = NULL; + struct node { + // immutable state + types::node const * node; + + // mutable state + transform * transforms; XMMATRIX world; }; } diff --git a/include/collada/node_state.h b/include/collada/node_state.h new file mode 100644 index 0000000..ef52429 --- /dev/null +++ b/include/collada/node_state.h @@ -0,0 +1,13 @@ +#pragma once + +#include "collada/types.h" +#include "collada/instance_types.h" + +namespace collada::node_state { + struct state { + instance_types::node * node_instances; + + void allocate_node_instances(types::node const * const * const nodes, int nodes_count); + void update_node_world_transform(instance_types::node & node_instance); + }; +}; diff --git a/include/collada/scene.h b/include/collada/scene.h index 3a883d4..a53673f 100644 --- a/include/collada/scene.h +++ b/include/collada/scene.h @@ -1,6 +1,8 @@ #pragma once #include "collada/types.h" +#include "collada/instance_types.h" +#include "collada/node_state.h" namespace collada::scene { struct static_skinned { @@ -10,6 +12,7 @@ namespace collada::scene { struct state { types::descriptor const * descriptor; + node_state::state node_state; unsigned int vertex_buffer_pnt; unsigned int vertex_buffer_jw; @@ -20,6 +23,7 @@ namespace collada::scene { unsigned int * textures; + // drawing void load_layouts(); void load_images(); void load_scene(types::descriptor const * const descriptor); @@ -40,7 +44,13 @@ namespace collada::scene { void draw_instance_controllers(types::instance_controller const * const instance_controllers, int const instance_controllers_count); - void draw_node(types::node const & node); + void draw_node(types::node const & node, instance_types::node const & node_instance); void draw(); + + // state updates + void update(float t); + + // query + instance_types::node * find_node_by_name(char const * name); }; } diff --git a/include/collada/types.h b/include/collada/types.h index a770785..1d820f6 100644 --- a/include/collada/types.h +++ b/include/collada/types.h @@ -362,6 +362,8 @@ namespace collada::types { ////////////////////////////////////////////////////////////////////// struct node { + char const * name; + int const parent_index; node_type const type; diff --git a/include/data/scenes/shadow_test.h b/include/data/scenes/shadow_test.h new file mode 100644 index 0000000..38d0d5d --- /dev/null +++ b/include/data/scenes/shadow_test.h @@ -0,0 +1,3 @@ +namespace shadow_test { +extern collada::types::descriptor const descriptor; +} diff --git a/src/collada/animate.cpp b/src/collada/animate.cpp index 37ec7d8..18bedc4 100644 --- a/src/collada/animate.cpp +++ b/src/collada/animate.cpp @@ -1,14 +1,13 @@ - static inline float fract(float f) - { - return f - floorf(f); - } +#include - static inline float loop(float f, float n) - { - return fract(f / n) * n; - } +#include "directxmath/directxmath.h" - static inline int find_frame_ix(source const& source, float t) +#include "collada/types.h" +#include "collada/instance_types.h" + +namespace collada::animate { + + static inline int find_frame_ix(types::source const& source, float t) { for (int i = 0; i < source.count - 1; i++) { if (source.float_array[i] <= t && source.float_array[i+1] > t) { @@ -18,14 +17,14 @@ return -1; } - static inline float linear_interpolate_iv(source const& source, int frame_ix, float t) + static inline float linear_interpolate_iv(types::source const& source, int frame_ix, float t) { float prev = source.float_array[(frame_ix+0) * source.stride]; float next = source.float_array[(frame_ix+1) * source.stride]; return (t - prev) / (next - prev); } - static inline float linear_interpolate_value(source const& source, int frame_ix, int parameter_ix, float iv) + static inline float linear_interpolate_value(types::source const& source, int frame_ix, int parameter_ix, float iv) { float prev = source.float_array[(frame_ix+0) * source.stride + parameter_ix]; float next = source.float_array[(frame_ix+1) * source.stride + parameter_ix]; @@ -76,20 +75,20 @@ } } - print("%f %f\n", XMVectorGetX(p0), XMVectorGetY(p0)); - print("%f %f\n", XMVectorGetX(c0), XMVectorGetY(c0)); - print("%f %f\n", XMVectorGetX(c1), XMVectorGetY(c1)); - print("%f %f\n", XMVectorGetX(p1), XMVectorGetY(p1)); + fprintf(stderr, "%f %f\n", XMVectorGetX(p0), XMVectorGetY(p0)); + fprintf(stderr, "%f %f\n", XMVectorGetX(c0), XMVectorGetY(c0)); + fprintf(stderr, "%f %f\n", XMVectorGetX(c1), XMVectorGetY(c1)); + fprintf(stderr, "%f %f\n", XMVectorGetX(p1), XMVectorGetY(p1)); assert(false); } - static inline XMFLOAT2 const * tangent_index(source const& source, int frame_ix, int parameter_ix) + static inline XMFLOAT2 const * tangent_index(types::source const& source, int frame_ix, int parameter_ix) { int ix = frame_ix * source.stride + parameter_ix * 2; return (XMFLOAT2 const *)&source.float_array[ix]; } - static float bezier_sampler(sampler const * const sampler, int frame_ix, int parameter_ix, float t) + static float bezier_sampler(types::sampler const * const sampler, int frame_ix, int parameter_ix, float t) { /* P0 is (INPUT[i] , OUTPUT[i]) @@ -112,25 +111,25 @@ return bezier_binary_search(p0, c0, c1, p1, t); } - static void apply_transform_target(transform& transform, - enum target_attribute channel_target_attribute, + static void apply_transform_target(instance_types::transform& transform, + enum types::target_attribute channel_target_attribute, float value) { switch (transform.type) { - case transform_type::TRANSLATE: __attribute__((fallthrough)); - case transform_type::SCALE: + case types::transform_type::TRANSLATE: __attribute__((fallthrough)); + case types::transform_type::SCALE: switch (channel_target_attribute) { - case target_attribute::X: transform.vector = XMVectorSetX(transform.vector, value); return; - case target_attribute::Y: transform.vector = XMVectorSetY(transform.vector, value); return; - case target_attribute::Z: transform.vector = XMVectorSetZ(transform.vector, value); return; + case types::target_attribute::X: transform.vector = XMVectorSetX(transform.vector, value); return; + case types::target_attribute::Y: transform.vector = XMVectorSetY(transform.vector, value); return; + case types::target_attribute::Z: transform.vector = XMVectorSetZ(transform.vector, value); return; default: assert(false); } - case transform_type::ROTATE: + case types::transform_type::ROTATE: switch (channel_target_attribute) { - case target_attribute::X: transform.vector = XMVectorSetX(transform.vector, value); return; - case target_attribute::Y: transform.vector = XMVectorSetY(transform.vector, value); return; - case target_attribute::Z: transform.vector = XMVectorSetZ(transform.vector, value); return; - case target_attribute::ANGLE: transform.vector = XMVectorSetW(transform.vector, value); return; + case types::target_attribute::X: transform.vector = XMVectorSetX(transform.vector, value); return; + case types::target_attribute::Y: transform.vector = XMVectorSetY(transform.vector, value); return; + case types::target_attribute::Z: transform.vector = XMVectorSetZ(transform.vector, value); return; + case types::target_attribute::ANGLE: transform.vector = XMVectorSetW(transform.vector, value); return; default: assert(false); } default: @@ -139,33 +138,33 @@ } } - static enum target_attribute const rotate_target_attributes[] = { - target_attribute::X, - target_attribute::Y, - target_attribute::Z, - target_attribute::ANGLE, + static enum types::target_attribute const rotate_target_attributes[] = { + types::target_attribute::X, + types::target_attribute::Y, + types::target_attribute::Z, + types::target_attribute::ANGLE, }; - static enum target_attribute const translate_scale_target_attributes[] = { - target_attribute::X, - target_attribute::Y, - target_attribute::Z, + static enum types::target_attribute const translate_scale_target_attributes[] = { + types::target_attribute::X, + types::target_attribute::Y, + types::target_attribute::Z, }; - static void animate_channel_segment(channel const& channel, - transform& transform, + static void animate_channel_segment(types::channel const& channel, + instance_types::transform& transform, int frame_ix, float t) { - enum target_attribute const * target_attributes = &channel.target_attribute; + enum types::target_attribute const * target_attributes = &channel.target_attribute; int target_attributes_count = 1; - if (channel.target_attribute == target_attribute::ALL) { + if (channel.target_attribute == types::target_attribute::ALL) { switch (transform.type) { - case transform_type::TRANSLATE: __attribute__((fallthrough)); - case transform_type::SCALE: + case types::transform_type::TRANSLATE: __attribute__((fallthrough)); + case types::transform_type::SCALE: target_attributes = translate_scale_target_attributes; target_attributes_count = 3; break; - case transform_type::ROTATE: + case types::transform_type::ROTATE: target_attributes = rotate_target_attributes; target_attributes_count = 4; break; @@ -177,10 +176,10 @@ for (int parameter_ix = 0; parameter_ix < target_attributes_count; parameter_ix++) { - enum collada::interpolation interpolation = channel.source_sampler->interpolation.interpolation_array[frame_ix]; + enum types::interpolation interpolation = channel.source_sampler->interpolation.interpolation_array[frame_ix]; float value; - if (interpolation == interpolation::BEZIER) { + if (interpolation == types::interpolation::BEZIER) { value = bezier_sampler(channel.source_sampler, frame_ix, parameter_ix, t); } else { float iv = linear_interpolate_iv(channel.source_sampler->input, frame_ix, t); @@ -191,11 +190,11 @@ } } - static void animate_node(node const& node, node_instance& node_instance, float t) + void animate_node(instance_types::node& node_instance, float t) { - for (int i = 0; i < node.channels_count; i++) { - channel const& channel = *node.channels[i]; - transform& transform = node_instance.transforms[channel.target_transform_index]; + for (int i = 0; i < node_instance.node->channels_count; i++) { + types::channel const& channel = *node_instance.node->channels[i]; + instance_types::transform& transform = node_instance.transforms[channel.target_transform_index]; int frame_ix = find_frame_ix(channel.source_sampler->input, t); assert(frame_ix >= 0); // animation is missing a key frame @@ -203,3 +202,4 @@ animate_channel_segment(channel, transform, frame_ix, t); } } +} diff --git a/src/collada/node_state.cpp b/src/collada/node_state.cpp index b55fb1e..89f5317 100644 --- a/src/collada/node_state.cpp +++ b/src/collada/node_state.cpp @@ -1,11 +1,19 @@ +#include + #include "directxmath/directxmath.h" -#include "collada/types.h" -#include "collada/instance_types.h" +#include "new.h" + +#include "collada/node_state.h" namespace collada::node_state { - inline static void load_transform(instance_types::transform * instance_transform, - types::transform const & transform) + + ////////////////////////////////////////////////////////////////////// + // transforms + ////////////////////////////////////////////////////////////////////// + + inline static void load_transform(types::transform const & transform, + instance_types::transform * instance_transform) { switch (transform.type) { case types::transform_type::LOOKAT: @@ -28,17 +36,37 @@ namespace collada::node_state { default: assert(false); } + instance_transform->type = transform.type; } - void initialize_node_transforms(types::node const * const node, - instance_types::node_instance * const node_instance) + inline static void initialize_node_transforms(instance_types::node & node_instance) { - for (int i = 0; i < node->transforms_count; i++) { - load_transform(&node_instance->transforms[i], - node->transforms[i]); + for (int i = 0; i < node_instance.node->transforms_count; i++) { + load_transform(node_instance.node->transforms[i], &node_instance.transforms[i]); } } + inline static void allocate_node_instance(instance_types::node & node_instance, + types::node const * const node) + { + node_instance.node = node; + node_instance.transforms = New(node->transforms_count); + + initialize_node_transforms(node_instance); + } + + void state::allocate_node_instances(types::node const * const * const nodes, int nodes_count) + { + node_instances = New(nodes_count); + for (int i = 0; i < nodes_count; i++) { + allocate_node_instance(node_instances[i], nodes[i]); + } + } + + ////////////////////////////////////////////////////////////////////// + // world matrix + ////////////////////////////////////////////////////////////////////// + inline static bool vector_equal(XMVECTOR V1, XMVECTOR V2) { uint32_t CR; @@ -60,8 +88,25 @@ namespace collada::node_state { case types::transform_type::MATRIX: return transform.matrix; default: + fprintf(stderr, "unknown transform type %d\n", (int)transform.type); assert(false); break; } } + + void state::update_node_world_transform(instance_types::node & node_instance) + { + XMMATRIX world; + + if (node_instance.node->parent_index >= 0) + world = node_instances[node_instance.node->parent_index].world; + else + world = XMMatrixIdentity(); + + for (int i = 0; i < node_instance.node->transforms_count; i++) { + world = transform_matrix(node_instance.transforms[i]) * world; + } + + node_instance.world = world; + } } diff --git a/src/collada/scene.cpp b/src/collada/scene.cpp index 6d35c8a..e2163a9 100644 --- a/src/collada/scene.cpp +++ b/src/collada/scene.cpp @@ -14,6 +14,7 @@ #include "collada/instance_types.h" #include "collada/scene.h" #include "collada/effect.h" +#include "collada/animate.h" namespace collada::scene { @@ -275,6 +276,8 @@ namespace collada::scene { index_buffer = load_index_buffer(descriptor->index_buffer); load_images(); + + node_state.allocate_node_instances(descriptor->nodes, descriptor->nodes_count); } void state::set_color_or_texture(types::color_or_texture const& color_or_texture, @@ -337,8 +340,6 @@ namespace collada::scene { types::instance_material const * const instance_materials, int const instance_materials_count) { - glUseProgram(collada::effect::program_static); - types::mesh const& mesh = geometry.mesh; for (int j = 0; j < instance_materials_count; j++) { @@ -437,10 +438,23 @@ namespace collada::scene { } } - void state::draw_node(types::node const & node) + void state::draw_node(types::node const & node, instance_types::node const & node_instance) { - draw_instance_geometries(node.instance_geometries, node.instance_geometries_count); - draw_instance_controllers(node.instance_controllers, node.instance_controllers_count); + XMMATRIX transform = node_instance.world * view::state.transform; + XMFLOAT4X4 float_transform; + XMStoreFloat4x4(&float_transform, transform); + + if (node.instance_geometries_count) { + glUseProgram(collada::effect::program_static); + glUniformMatrix4fv(layout.uniform.transform, 1, false, (float *)&float_transform); + draw_instance_geometries(node.instance_geometries, node.instance_geometries_count); + } + + if (node.instance_controllers_count) { + glUseProgram(collada::effect::program_static); + glUniformMatrix4fv(layout.uniform.transform, 1, false, (float *)&float_transform); + draw_instance_controllers(node.instance_controllers, node.instance_controllers_count); + } } void state::draw() @@ -448,7 +462,6 @@ namespace collada::scene { unsigned int effects[] = {collada::effect::program_static, collada::effect::program_skinned}; for (int i = 0; i < 2; i++) { glUseProgram(effects[i]); - glUniformMatrix4fv(layout.uniform.transform, 1, false, (float *)&view::state.float_transform); glUniform1i(layout.uniform.emission_sampler, 0); glUniform1i(layout.uniform.ambient_sampler, 1); glUniform1i(layout.uniform.diffuse_sampler, 2); @@ -468,7 +481,27 @@ namespace collada::scene { if (node.type != types::node_type::NODE) continue; - draw_node(node); + draw_node(node, node_state.node_instances[i]); } } + + void state::update(float t) + { + t = animate::loop(t / 4.0f, 3.333333f); + + for (int i = 0; i < descriptor->nodes_count; i++) { + animate::animate_node(node_state.node_instances[i], t); + node_state.update_node_world_transform(node_state.node_instances[i]); + } + } + + instance_types::node * state::find_node_by_name(char const * name) + { + for (int i = 0; i < descriptor->nodes_count; i++) { + if (strcmp(node_state.node_instances[i].node->name, name) == 0) { + return &node_state.node_instances[i]; + } + } + return nullptr; + } } diff --git a/src/test.cpp b/src/test.cpp index 27949bd..b3fc9a0 100644 --- a/src/test.cpp +++ b/src/test.cpp @@ -24,9 +24,11 @@ #include "collada/effect.h" #include "collada/scene.h" #include "collada/types.h" +#include "collada/instance_types.h" #include "data/scenes/ship20.h" #include "data/scenes/noodle.h" +#include "data/scenes/shadow_test.h" struct line_location { struct { @@ -73,6 +75,9 @@ static target_type const geometry_buffer_pnc_types[3] = { [target_name::COLOR] = { GL_RGBA8, GL_COLOR_ATTACHMENT2 }, }; +collada::instance_types::node * node_eye; +collada::instance_types::node * node_at; + void load_quad_index_buffer() { uint8_t const data[] = { @@ -304,7 +309,11 @@ void load(const char * source_path) ////////////////////////////////////////////////////////////////////// collada::effect::load_effects(); - scene_state.load_scene(&noodle::descriptor); + scene_state.load_scene(&shadow_test::descriptor); + node_eye = scene_state.find_node_by_name("Camera001"); + assert(node_eye != nullptr); + node_at = scene_state.find_node_by_name("Camera001.Target"); + assert(node_at != nullptr); } void update_keyboard(int up, int down, int left, int right, @@ -416,8 +425,11 @@ void update_joystick(int joystick_index, } */ - view::state.at = view::state.at + direction; - view::state.eye = view::state.at - view::state.direction * view::at_distance; + view::state.eye = view::state.eye + direction; + //view::state.at = view::state.at - view::state.direction * view::at_distance; + + //view::state.at = view::state.at + direction; + //view::state.eye = view::state.at - view::state.direction * view::at_distance; /* lighting.quadratic += 0.01 * a + -0.01 * b; @@ -440,6 +452,10 @@ void update(float time) { current_time = time; + scene_state.update(time); + view::state.eye = XMVector3Transform(XMVectorZero(), node_eye->world); + view::state.at = XMVector3Transform(XMVectorZero(), node_at->world); + view::update_transforms(); }