From 6a17031c6fabda51a2437246c8069d1e7608b327 Mon Sep 17 00:00:00 2001 From: Zack Buhman Date: Tue, 26 Dec 2023 22:45:55 +0800 Subject: [PATCH] example: add wiffle_attenuation This example is an experiment with light attenuation. --- example/example.mk | 11 + example/wiffle_attenuation.cpp | 310 +++++++++++ geometry/wiffle.hpp | 919 +++++++++++++++++++++++++++++++++ geometry/wiffle.obj | 906 ++++++++++++++++++++++++++++++++ 4 files changed, 2146 insertions(+) create mode 100644 example/wiffle_attenuation.cpp create mode 100644 geometry/wiffle.hpp create mode 100644 geometry/wiffle.obj diff --git a/example/example.mk b/example/example.mk index 93cf759..d6108c0 100644 --- a/example/example.mk +++ b/example/example.mk @@ -118,6 +118,17 @@ ICOSPHERE_OBJ = \ example/icosphere.elf: LDSCRIPT = $(LIB)/alt.lds example/icosphere.elf: $(START_OBJ) $(ICOSPHERE_OBJ) +WIFFLE_ATTENUATION_OBJ = \ + example/wiffle_attenuation.o \ + vga.o \ + holly/core.o \ + holly/region_array.o \ + holly/background.o \ + holly/ta_fifo_polygon_converter.o + +example/wiffle_attenuation.elf: LDSCRIPT = $(LIB)/alt.lds +example/wiffle_attenuation.elf: $(START_OBJ) $(WIFFLE_ATTENUATION_OBJ) + MACAW_CUBE_OBJ = \ example/macaw_cube.o \ vga.o \ diff --git a/example/wiffle_attenuation.cpp b/example/wiffle_attenuation.cpp new file mode 100644 index 0000000..23c97e8 --- /dev/null +++ b/example/wiffle_attenuation.cpp @@ -0,0 +1,310 @@ +#include + +#include "align.hpp" + +#include "vga.hpp" +#include "holly.hpp" +#include "holly/core.hpp" +#include "holly/core_bits.hpp" +#include "holly/ta_fifo_polygon_converter.hpp" +#include "holly/ta_parameter.hpp" +#include "holly/ta_bits.hpp" +#include "holly/region_array.hpp" +#include "holly/background.hpp" +#include "holly/texture_memory_alloc.hpp" +#include "memorymap.hpp" +#include "serial.hpp" + +#include "geometry/icosphere.hpp" +#include "geometry/suzanne.hpp" +#include "geometry/wiffle.hpp" +#include "math/vec4.hpp" + +constexpr float half_degree = 0.01745329f / 2; + +#define MODEL wiffle + +vec3 rotate(const vec3& vertex, float theta) +{ + float x = vertex.x; + float y = vertex.y; + float z = vertex.z; + float t; + + t = y * cos(theta) - z * sin(theta); + z = y * sin(theta) + z * cos(theta); + y = t; + + float theta2 = 3.14 * sin(theta / 2); + + t = x * cos(theta2) - z * sin(theta2); + z = x * sin(theta2) + z * cos(theta2); + x = t; + + return vec3(x, y, z); +} + +void transform(ta_parameter_writer& parameter, + const uint32_t face_ix, + const float theta, + const vec3 lights[3]) +{ + const uint32_t parameter_control_word = para_control::para_type::polygon_or_modifier_volume + | para_control::list_type::opaque + | obj_control::col_type::floating_color + | obj_control::gouraud; + + const uint32_t isp_tsp_instruction_word = isp_tsp_instruction_word::depth_compare_mode::greater + | isp_tsp_instruction_word::culling_mode::cull_if_positive; + + const uint32_t tsp_instruction_word = tsp_instruction_word::src_alpha_instr::one + | tsp_instruction_word::dst_alpha_instr::zero + | tsp_instruction_word::fog_control::no_fog; + + parameter.append() = global_polygon_type_0(parameter_control_word, + isp_tsp_instruction_word, + tsp_instruction_word, + 0); + auto& face = MODEL::faces[face_ix]; + + constexpr uint32_t strip_length = 3; + for (uint32_t i = 0; i < strip_length; i++) { + bool end_of_strip = i == strip_length - 1; + + // world transform + uint32_t vertex_ix = face[i].vertex; + auto& vertex = MODEL::vertices[vertex_ix]; + auto point = rotate(vertex, theta); + + // lighting transform + uint32_t normal_ix = face[i].normal; + auto& normal = MODEL::normals[normal_ix]; + auto n = rotate(normal, theta); + + vec4 color = {0.0, 0.0, 0.0, 1.0}; + + // intensity calculation + { + auto l = lights[0] - point; + auto n_dot_l = dot(n, l); + if (n_dot_l > 0) { + float distance = length(lights[0] - point); + float attenuation = 1.0 / (1.0f + + 0.07f * distance + + 0.007f * (distance * distance)); + color.x += 5.0 * attenuation; + } + } + + { + auto l = lights[1] - point; + auto n_dot_l = dot(n, l); + if (n_dot_l > 0) { + float distance = length(lights[1] - point); + float attenuation = 1.0 / (1.0f + + 0.07f * distance + + 0.007f * (distance * distance)); + color.y += 5.0 * attenuation; + } + } + + { + auto l = lights[2] - point; + auto n_dot_l = dot(n, l); + if (n_dot_l > 0) { + float distance = length(lights[2] - point); + float attenuation = 1.0 / (1.0f + + 0.07f * distance + + 0.007f * (distance * distance)); + color.z += 9.0 * attenuation; + } + } + + float x = point.x; + float y = point.y; + float z = point.z; + + x *= 1; + y *= 1; + z *= 1; + + // camera transform + z += 80; + + // perspective + x = x / z; + y = y / z; + + // screen space transform + x *= 240.f; + y *= 240.f; + x += 320.f; + y += 240.f; + z = 1 / z; + + parameter.append() = + vertex_polygon_type_1(x, y, z, + color.w, // alpha + color.x, // r + color.y, // g + color.z, // b + end_of_strip); + } +} + +void transform2(ta_parameter_writer& parameter, + const vec3& pos, + const vec4& color) +{ + const uint32_t parameter_control_word = para_control::para_type::polygon_or_modifier_volume + | para_control::list_type::opaque + | obj_control::col_type::floating_color + | obj_control::gouraud; + + const uint32_t isp_tsp_instruction_word = isp_tsp_instruction_word::depth_compare_mode::greater + | isp_tsp_instruction_word::culling_mode::no_culling; + + const uint32_t tsp_instruction_word = tsp_instruction_word::src_alpha_instr::one + | tsp_instruction_word::dst_alpha_instr::zero + | tsp_instruction_word::fog_control::no_fog; + + parameter.append() = global_polygon_type_0(parameter_control_word, + isp_tsp_instruction_word, + tsp_instruction_word, + 0); + + constexpr vec3 triangle[] = { + { 0.f, -1.f, 0.f}, + {-1.f, 1.f, 0.f}, + { 1.f, 1.f, 0.f}, + }; + + constexpr uint32_t strip_length = 3; + for (uint32_t i = 0; i < strip_length; i++) { + bool end_of_strip = i == strip_length - 1; + float x = triangle[i].x; + float y = triangle[i].y; + float z = triangle[i].z; + + x *= 0.2; + y *= 0.2; + z *= 0.2; + + x += pos.x; + y += pos.y; + z += pos.z; + + // camera transform + z += 40; + + // perspective + x = x / z; + y = y / z; + + // screen space transform + x *= 240.f; + y *= 240.f; + x += 320.f; + y += 240.f; + z = 1 / z; + + parameter.append() = + vertex_polygon_type_1(x, y, z, + color.w, // alpha + color.x, // r + color.y, // g + color.z, // b + end_of_strip); + } +} + +void init_texture_memory(const struct opb_size& opb_size) +{ + auto mem = reinterpret_cast(texture_memory32); + + background_parameter(mem->background, 0xff220000); + + region_array2(mem->region_array, + (offsetof (struct texture_memory_alloc, object_list)), + 640 / 32, // width + 480 / 32, // height + opb_size + ); +} + +uint32_t _ta_parameter_buf[((32 * 8192) + 32) / 4]; + +void main() +{ + vga(); + + // The address of `ta_parameter_buf` must be a multiple of 32 bytes. + // This is mandatory for ch2-dma to the ta fifo polygon converter. + uint32_t * ta_parameter_buf = align_32byte(_ta_parameter_buf); + + constexpr uint32_t ta_alloc = ta_alloc_ctrl::pt_opb::no_list + | ta_alloc_ctrl::tm_opb::no_list + | ta_alloc_ctrl::t_opb::no_list + | ta_alloc_ctrl::om_opb::no_list + | ta_alloc_ctrl::o_opb::_16x4byte; + + constexpr struct opb_size opb_size = { .opaque = 16 * 4 + , .opaque_modifier = 0 + , .translucent = 0 + , .translucent_modifier = 0 + , .punch_through = 0 + }; + + holly.SOFTRESET = softreset::pipeline_soft_reset + | softreset::ta_soft_reset; + holly.SOFTRESET = 0; + + core_init(); + init_texture_memory(opb_size); + + uint32_t frame_ix = 0; + constexpr uint32_t num_frames = 1; + + float theta = 0; + vec3 lights[3] = { + {0.f, 0.f, 0.f}, + {0.f, 0.f, 0.f}, + {0.f, 0.f, 0.f}, + }; + + while (1) { + ta_polygon_converter_init(opb_size.total(), + ta_alloc, + 640 / 32, + 480 / 32); + + float theta2 = 3.14 * 2 * sin(theta / 7); + + lights[0].x = cos(theta) * 20; + lights[0].z = sin(theta) * 20; + + lights[1].x = cos(theta2 + half_degree * 180.f) * 20; + lights[1].z = sin(theta2 + half_degree * 180.f) * 20; + + lights[2].x = cos(theta + half_degree * 360.f) * 20; + lights[2].z = sin(theta + half_degree * 360.f) * 20; + + auto parameter = ta_parameter_writer(ta_parameter_buf); + for (uint32_t i = 0; i < MODEL::num_faces; i++) { + transform(parameter, i, theta, lights); + } + transform2(parameter, lights[0], {1.f, 0.f, 0.f, 1.f}); + transform2(parameter, lights[1], {0.f, 1.f, 0.f, 1.f}); + transform2(parameter, lights[2], {0.f, 0.f, 1.f, 1.f}); + + parameter.append() = global_end_of_list(); + ta_polygon_converter_transfer(ta_parameter_buf, parameter.offset); + ta_wait_opaque_list(); + core_start_render(frame_ix, num_frames); + + v_sync_out(); + core_wait_end_of_render_video(frame_ix, num_frames); + theta += half_degree; + frame_ix += 1; + } +} diff --git a/geometry/wiffle.hpp b/geometry/wiffle.hpp new file mode 100644 index 0000000..c0b57dd --- /dev/null +++ b/geometry/wiffle.hpp @@ -0,0 +1,919 @@ +#pragma once + +#include "geometry.hpp" + +namespace wiffle { + constexpr vec3 vertices[] = { + { -45.000000f, 3.360392f, -45.000000f }, + { -45.000000f, 17.676659f, -21.066221f }, + { -45.000000f, 45.000000f, -15.556347f }, + { -45.000000f, 23.815699f, -13.749999f }, + { -45.000000f, 9.405555f, -25.841547f }, + { -45.000000f, 27.082212f, -4.775324f }, + { -45.000000f, -3.360388f, -45.000000f }, + { -45.000000f, 0.000001f, -27.500000f }, + { -45.000000f, 27.082212f, 4.775326f }, + { -45.000000f, 45.000000f, 15.556351f }, + { -45.000000f, -9.405553f, -25.841547f }, + { -45.000000f, 23.815699f, 13.750001f }, + { -45.000000f, -17.676659f, -21.066221f }, + { -45.000000f, 17.676659f, 21.066221f }, + { -45.000000f, -45.000000f, -15.556351f }, + { -45.000000f, -23.815699f, -13.750001f }, + { -45.000000f, -27.082212f, -4.775326f }, + { -45.000000f, -0.000001f, 27.500000f }, + { -45.000000f, 3.360388f, 45.000000f }, + { -45.000000f, 9.405553f, 25.841547f }, + { -45.000000f, -17.676659f, 21.066221f }, + { -45.000000f, -3.360392f, 45.000000f }, + { -45.000000f, -9.405555f, 25.841547f }, + { -45.000000f, -45.000000f, 15.556347f }, + { -45.000000f, -27.082212f, 4.775324f }, + { -45.000000f, -23.815699f, 13.749999f }, + { -21.066221f, -17.676661f, 45.000000f }, + { -3.360390f, -45.000004f, 44.999996f }, + { -13.750000f, -23.815701f, 45.000000f }, + { -25.841547f, -9.405556f, 45.000000f }, + { -4.775325f, -27.082214f, 45.000000f }, + { -27.500000f, -0.000002f, 45.000000f }, + { 4.775325f, -27.082214f, 45.000000f }, + { 3.360390f, -45.000004f, 44.999996f }, + { -25.841547f, 9.405552f, 45.000000f }, + { 13.750000f, -23.815701f, 45.000000f }, + { -21.066221f, 17.676657f, 45.000000f }, + { 21.066221f, -17.676661f, 45.000000f }, + { 45.000000f, -3.360392f, 45.000000f }, + { 27.500000f, -0.000002f, 45.000000f }, + { 25.841547f, -9.405556f, 45.000000f }, + { -3.360390f, 44.999996f, 45.000004f }, + { -13.750000f, 23.815697f, 45.000000f }, + { -4.775325f, 27.082211f, 45.000000f }, + { 45.000000f, 3.360388f, 45.000000f }, + { 21.066221f, 17.676657f, 45.000000f }, + { 25.841547f, 9.405552f, 45.000000f }, + { 3.360390f, 44.999996f, 45.000004f }, + { 4.775325f, 27.082211f, 45.000000f }, + { 13.750000f, 23.815697f, 45.000000f }, + { -40.000000f, 15.431457f, 40.000000f }, + { -40.000000f, 40.000000f, 22.627419f }, + { -15.431458f, 40.000000f, 40.000000f }, + { -13.750000f, 45.000000f, -23.815697f }, + { -3.360390f, 45.000004f, -44.999996f }, + { -21.066221f, 45.000000f, -17.676657f }, + { -25.841547f, 45.000000f, -9.405552f }, + { -4.775325f, 45.000000f, -27.082211f }, + { -27.500000f, 45.000000f, 0.000002f }, + { 4.775325f, 45.000000f, -27.082211f }, + { 3.360390f, 45.000004f, -44.999996f }, + { -25.841547f, 45.000000f, 9.405556f }, + { 13.750000f, 45.000000f, -23.815697f }, + { -21.066221f, 45.000000f, 17.676661f }, + { -13.750000f, 45.000000f, 23.815701f }, + { 45.000000f, 45.000000f, -15.556347f }, + { 25.841547f, 45.000000f, -9.405552f }, + { 27.500000f, 45.000000f, 0.000002f }, + { 21.066221f, 45.000000f, -17.676657f }, + { -4.775325f, 45.000000f, 27.082214f }, + { 4.775325f, 45.000000f, 27.082214f }, + { 13.750000f, 45.000000f, 23.815701f }, + { 45.000000f, 45.000000f, 15.556351f }, + { 21.066221f, 45.000000f, 17.676661f }, + { 25.841547f, 45.000000f, 9.405556f }, + { -15.431458f, 40.000000f, -40.000000f }, + { -40.000000f, 15.431460f, -40.000000f }, + { -40.000000f, 40.000000f, -22.627415f }, + { -21.066221f, -17.676657f, -45.000000f }, + { -3.360390f, -44.999996f, -45.000004f }, + { -13.750000f, -23.815697f, -45.000000f }, + { -25.841547f, -9.405552f, -45.000000f }, + { -4.775325f, -27.082211f, -45.000000f }, + { 3.360390f, -44.999996f, -45.000004f }, + { -27.500000f, 0.000002f, -45.000000f }, + { 4.775325f, -27.082211f, -45.000000f }, + { -25.841547f, 9.405556f, -45.000000f }, + { 13.750000f, -23.815697f, -45.000000f }, + { -21.066221f, 17.676661f, -45.000000f }, + { 21.066221f, -17.676657f, -45.000000f }, + { 27.500000f, 0.000002f, -45.000000f }, + { 45.000000f, -3.360388f, -45.000000f }, + { 25.841547f, -9.405552f, -45.000000f }, + { -13.750000f, 23.815701f, -45.000000f }, + { -4.775325f, 27.082214f, -45.000000f }, + { 21.066221f, 17.676661f, -45.000000f }, + { 45.000000f, 3.360392f, -45.000000f }, + { 25.841547f, 9.405556f, -45.000000f }, + { 4.775325f, 27.082214f, -45.000000f }, + { 13.750000f, 23.815701f, -45.000000f }, + { -15.431458f, -40.000000f, -40.000000f }, + { -40.000000f, -15.431457f, -40.000000f }, + { -40.000000f, -40.000000f, -22.627419f }, + { -13.750000f, -45.000000f, -23.815701f }, + { -21.066221f, -45.000000f, -17.676661f }, + { -25.841547f, -45.000000f, -9.405556f }, + { -4.775325f, -45.000000f, -27.082214f }, + { -27.500000f, -45.000000f, -0.000002f }, + { 4.775325f, -45.000000f, -27.082214f }, + { -25.841547f, -45.000000f, 9.405552f }, + { 13.750000f, -45.000000f, -23.815701f }, + { -21.066221f, -45.000000f, 17.676657f }, + { -13.750000f, -45.000000f, 23.815697f }, + { 25.841547f, -45.000000f, -9.405556f }, + { 45.000000f, -45.000000f, -15.556351f }, + { 27.500000f, -45.000000f, -0.000002f }, + { 21.066221f, -45.000000f, -17.676661f }, + { -4.775325f, -45.000000f, 27.082211f }, + { 4.775325f, -45.000000f, 27.082211f }, + { 13.750000f, -45.000000f, 23.815697f }, + { 21.066221f, -45.000000f, 17.676657f }, + { 45.000000f, -45.000000f, 15.556347f }, + { 25.841547f, -45.000000f, 9.405552f }, + { -40.000000f, -15.431460f, 40.000000f }, + { -40.000000f, -40.000000f, 22.627415f }, + { -15.431458f, -40.000000f, 40.000000f }, + { -40.000000f, 0.000001f, -27.500000f }, + { -40.000000f, 9.405555f, -25.841547f }, + { -40.000000f, 17.676659f, -21.066221f }, + { -40.000000f, 23.815699f, -13.749999f }, + { -40.000000f, 27.082212f, -4.775324f }, + { -40.000000f, 27.082212f, 4.775326f }, + { -40.000000f, 23.815699f, 13.750001f }, + { -40.000000f, 17.676659f, 21.066221f }, + { -40.000000f, 9.405553f, 25.841547f }, + { -40.000000f, -0.000001f, 27.500000f }, + { -40.000000f, -9.405555f, 25.841547f }, + { -40.000000f, -17.676659f, 21.066221f }, + { -40.000000f, -23.815699f, 13.749999f }, + { -40.000000f, -27.082212f, 4.775324f }, + { -40.000000f, -27.082212f, -4.775326f }, + { -40.000000f, -23.815699f, -13.750001f }, + { -40.000000f, -17.676659f, -21.066221f }, + { -40.000000f, -9.405553f, -25.841547f }, + { 15.431458f, 40.000000f, 40.000000f }, + { 40.000000f, 40.000000f, 22.627419f }, + { 40.000000f, 15.431457f, 40.000000f }, + { 45.000000f, 17.676659f, -21.066221f }, + { 45.000000f, 23.815699f, -13.749999f }, + { 45.000000f, 9.405555f, -25.841547f }, + { 45.000000f, 27.082212f, -4.775324f }, + { 45.000000f, 0.000001f, -27.500000f }, + { 45.000000f, 27.082212f, 4.775326f }, + { 45.000000f, -9.405553f, -25.841547f }, + { 45.000000f, 23.815699f, 13.750001f }, + { 45.000000f, -17.676659f, -21.066221f }, + { 45.000000f, 17.676659f, 21.066221f }, + { 45.000000f, -23.815699f, -13.750001f }, + { 45.000000f, -27.082212f, -4.775326f }, + { 45.000000f, -0.000001f, 27.500000f }, + { 45.000000f, 9.405553f, 25.841547f }, + { 45.000000f, -17.676659f, 21.066221f }, + { 45.000000f, -9.405555f, 25.841547f }, + { 45.000000f, -27.082212f, 4.775324f }, + { 45.000000f, -23.815699f, 13.749999f }, + { 15.431458f, -40.000000f, 40.000000f }, + { 40.000000f, -40.000000f, 22.627415f }, + { 40.000000f, -15.431460f, 40.000000f }, + { 25.841547f, 9.405552f, 40.000000f }, + { 27.500000f, -0.000002f, 40.000000f }, + { 21.066221f, 17.676657f, 40.000000f }, + { 13.750000f, 23.815697f, 40.000000f }, + { 4.775325f, 27.082211f, 40.000000f }, + { -4.775325f, 27.082211f, 40.000000f }, + { -13.750000f, 23.815697f, 40.000000f }, + { -21.066221f, 17.676657f, 40.000000f }, + { -25.841547f, 9.405552f, 40.000000f }, + { -27.500000f, -0.000002f, 40.000000f }, + { -25.841547f, -9.405556f, 40.000000f }, + { -21.066221f, -17.676661f, 40.000000f }, + { -13.750000f, -23.815701f, 40.000000f }, + { -4.775325f, -27.082214f, 40.000000f }, + { 4.775325f, -27.082214f, 40.000000f }, + { 13.750000f, -23.815701f, 40.000000f }, + { 21.066221f, -17.676661f, 40.000000f }, + { 25.841547f, -9.405556f, 40.000000f }, + { -21.066221f, 40.000000f, -17.676657f }, + { -13.750000f, 40.000000f, -23.815697f }, + { -25.841547f, 40.000000f, -9.405552f }, + { -4.775325f, 40.000000f, -27.082211f }, + { -27.500000f, 40.000000f, 0.000002f }, + { 15.431458f, 40.000000f, -40.000000f }, + { 4.775325f, 40.000000f, -27.082211f }, + { -25.841547f, 40.000000f, 9.405556f }, + { 13.750000f, 40.000000f, -23.815697f }, + { -21.066221f, 40.000000f, 17.676661f }, + { 21.066221f, 40.000000f, -17.676657f }, + { 40.000000f, 40.000000f, -22.627415f }, + { 25.841547f, 40.000000f, -9.405552f }, + { -13.750000f, 40.000000f, 23.815701f }, + { -4.775325f, 40.000000f, 27.082214f }, + { 27.500000f, 40.000000f, 0.000002f }, + { 4.775325f, 40.000000f, 27.082214f }, + { 13.750000f, 40.000000f, 23.815701f }, + { 21.066221f, 40.000000f, 17.676661f }, + { 25.841547f, 40.000000f, 9.405556f }, + { 40.000000f, 15.431460f, -40.000000f }, + { -21.066221f, -17.676657f, -40.000000f }, + { -13.750000f, -23.815697f, -40.000000f }, + { -25.841547f, -9.405552f, -40.000000f }, + { -4.775325f, -27.082211f, -40.000000f }, + { -27.500000f, 0.000002f, -40.000000f }, + { 4.775325f, -27.082211f, -40.000000f }, + { 15.431458f, -40.000000f, -40.000000f }, + { -25.841547f, 9.405556f, -40.000000f }, + { 13.750000f, -23.815697f, -40.000000f }, + { -21.066221f, 17.676661f, -40.000000f }, + { 21.066221f, -17.676657f, -40.000000f }, + { 40.000000f, -15.431457f, -40.000000f }, + { 25.841547f, -9.405552f, -40.000000f }, + { -13.750000f, 23.815701f, -40.000000f }, + { -4.775325f, 27.082214f, -40.000000f }, + { 27.500000f, 0.000002f, -40.000000f }, + { 4.775325f, 27.082214f, -40.000000f }, + { 21.066221f, 17.676661f, -40.000000f }, + { 25.841547f, 9.405556f, -40.000000f }, + { 13.750000f, 23.815701f, -40.000000f }, + { 40.000000f, -40.000000f, -22.627419f }, + { -21.066221f, -40.000000f, -17.676661f }, + { -13.750000f, -40.000000f, -23.815701f }, + { -25.841547f, -40.000000f, -9.405556f }, + { -4.775325f, -40.000000f, -27.082214f }, + { -27.500000f, -40.000000f, -0.000002f }, + { 4.775325f, -40.000000f, -27.082214f }, + { -25.841547f, -40.000000f, 9.405552f }, + { 13.750000f, -40.000000f, -23.815701f }, + { -21.066221f, -40.000000f, 17.676657f }, + { 21.066221f, -40.000000f, -17.676661f }, + { 25.841547f, -40.000000f, -9.405556f }, + { -13.750000f, -40.000000f, 23.815697f }, + { -4.775325f, -40.000000f, 27.082211f }, + { 27.500000f, -40.000000f, -0.000002f }, + { 4.775325f, -40.000000f, 27.082211f }, + { 13.750000f, -40.000000f, 23.815697f }, + { 21.066221f, -40.000000f, 17.676657f }, + { 25.841547f, -40.000000f, 9.405552f }, + { 40.000000f, 17.676659f, -21.066221f }, + { 40.000000f, 23.815699f, -13.749999f }, + { 40.000000f, 9.405555f, -25.841547f }, + { 40.000000f, 27.082212f, -4.775324f }, + { 40.000000f, 0.000001f, -27.500000f }, + { 40.000000f, 27.082212f, 4.775326f }, + { 40.000000f, -9.405553f, -25.841547f }, + { 40.000000f, 23.815699f, 13.750001f }, + { 40.000000f, -17.676659f, -21.066221f }, + { 40.000000f, 17.676659f, 21.066221f }, + { 40.000000f, -23.815699f, -13.750001f }, + { 40.000000f, -27.082212f, -4.775326f }, + { 40.000000f, 9.405553f, 25.841547f }, + { 40.000000f, -0.000001f, 27.500000f }, + { 40.000000f, -17.676659f, 21.066221f }, + { 40.000000f, -9.405555f, 25.841547f }, + { 40.000000f, -27.082212f, 4.775324f }, + { 40.000000f, -23.815699f, 13.749999f }, + }; + + constexpr vec3 normals[] = { + { -1.000000f, -0.000000f, -0.000000f }, + { -0.000000f, -0.000000f, 1.000000f }, + { -0.500000f, 0.500000f, 0.707100f }, + { -0.000000f, 1.000000f, -0.000000f }, + { -0.500000f, 0.500000f, -0.707100f }, + { -0.000000f, -0.000000f, -1.000000f }, + { -0.500000f, -0.500000f, -0.707100f }, + { -0.000000f, -1.000000f, -0.000000f }, + { -0.500000f, -0.500000f, 0.707100f }, + { -0.000000f, -0.173600f, 0.984800f }, + { -0.000000f, -0.500000f, 0.866000f }, + { -0.000000f, -0.766000f, 0.642800f }, + { -0.000000f, -0.939700f, 0.342000f }, + { -0.000000f, -0.766000f, -0.642800f }, + { -0.000000f, -0.939700f, -0.342000f }, + { -0.000000f, -0.500000f, -0.866000f }, + { -0.000000f, -0.173600f, -0.984800f }, + { -0.000000f, 0.173600f, -0.984800f }, + { -0.000000f, 0.500000f, -0.866000f }, + { -0.000000f, 0.766000f, -0.642800f }, + { -0.000000f, 0.939700f, -0.342000f }, + { -0.000000f, 0.939700f, 0.342000f }, + { -0.000000f, 0.766000f, 0.642800f }, + { -0.000000f, 0.500000f, 0.866000f }, + { -0.000000f, 0.173600f, 0.984800f }, + { 0.500000f, 0.500000f, 0.707100f }, + { 1.000000f, -0.000000f, -0.000000f }, + { 0.500000f, -0.500000f, 0.707100f }, + { -0.984800f, -0.173600f, -0.000000f }, + { -0.642800f, -0.766000f, -0.000000f }, + { -0.866000f, -0.500000f, -0.000000f }, + { -0.342000f, -0.939700f, -0.000000f }, + { 0.342000f, -0.939700f, -0.000000f }, + { 0.866000f, -0.500000f, -0.000000f }, + { 0.642800f, -0.766000f, -0.000000f }, + { 0.984800f, -0.173600f, -0.000000f }, + { 0.866000f, 0.500000f, -0.000000f }, + { 0.984800f, 0.173600f, -0.000000f }, + { 0.642800f, 0.766000f, -0.000000f }, + { 0.342000f, 0.939700f, -0.000000f }, + { -0.342000f, 0.939700f, -0.000000f }, + { -0.642800f, 0.766000f, -0.000000f }, + { -0.866000f, 0.500000f, -0.000000f }, + { -0.984800f, 0.173600f, -0.000000f }, + { 0.500000f, 0.500000f, -0.707100f }, + { -0.984800f, -0.000000f, -0.173600f }, + { -0.642800f, -0.000000f, -0.766000f }, + { -0.866000f, -0.000000f, -0.500000f }, + { -0.342000f, -0.000000f, -0.939700f }, + { 0.342000f, -0.000000f, -0.939700f }, + { 0.866000f, -0.000000f, -0.500000f }, + { 0.642800f, -0.000000f, -0.766000f }, + { 0.984800f, -0.000000f, -0.173600f }, + { 0.866000f, -0.000000f, 0.500000f }, + { 0.984800f, -0.000000f, 0.173600f }, + { 0.642800f, -0.000000f, 0.766000f }, + { 0.342000f, -0.000000f, 0.939700f }, + { -0.342000f, -0.000000f, 0.939700f }, + { -0.642800f, -0.000000f, 0.766000f }, + { -0.866000f, -0.000000f, 0.500000f }, + { -0.984800f, -0.000000f, 0.173600f }, + { 0.500000f, -0.500000f, -0.707100f }, + }; + + constexpr face faces[] = { + {{ 0, 0}, { 1, 0}, { 2, 0}}, + {{ 1, 0}, { 3, 0}, { 2, 0}}, + {{ 0, 0}, { 4, 0}, { 1, 0}}, + {{ 3, 0}, { 5, 0}, { 2, 0}}, + {{ 6, 0}, { 7, 0}, { 0, 0}}, + {{ 0, 0}, { 7, 0}, { 4, 0}}, + {{ 2, 0}, { 8, 0}, { 9, 0}}, + {{ 5, 0}, { 8, 0}, { 2, 0}}, + {{ 6, 0}, {10, 0}, { 7, 0}}, + {{ 8, 0}, {11, 0}, { 9, 0}}, + {{ 6, 0}, {12, 0}, {10, 0}}, + {{11, 0}, {13, 0}, { 9, 0}}, + {{12, 0}, {14, 0}, {15, 0}}, + {{15, 0}, {14, 0}, {16, 0}}, + {{ 6, 0}, {14, 0}, {12, 0}}, + {{17, 0}, {18, 0}, {19, 0}}, + {{19, 0}, {18, 0}, {13, 0}}, + {{13, 0}, {18, 0}, { 9, 0}}, + {{20, 0}, {21, 0}, {22, 0}}, + {{22, 0}, {21, 0}, {17, 0}}, + {{17, 0}, {21, 0}, {18, 0}}, + {{16, 0}, {23, 0}, {24, 0}}, + {{24, 0}, {23, 0}, {25, 0}}, + {{25, 0}, {23, 0}, {20, 0}}, + {{14, 0}, {23, 0}, {16, 0}}, + {{20, 0}, {23, 0}, {21, 0}}, + {{26, 1}, {21, 1}, {27, 1}}, + {{28, 1}, {26, 1}, {27, 1}}, + {{29, 1}, {21, 1}, {26, 1}}, + {{30, 1}, {28, 1}, {27, 1}}, + {{31, 1}, {18, 1}, {21, 1}}, + {{31, 1}, {21, 1}, {29, 1}}, + {{32, 1}, {27, 1}, {33, 1}}, + {{32, 1}, {30, 1}, {27, 1}}, + {{34, 1}, {18, 1}, {31, 1}}, + {{35, 1}, {32, 1}, {33, 1}}, + {{36, 1}, {18, 1}, {34, 1}}, + {{37, 1}, {35, 1}, {33, 1}}, + {{38, 1}, {39, 1}, {40, 1}}, + {{38, 1}, {40, 1}, {37, 1}}, + {{38, 1}, {37, 1}, {33, 1}}, + {{41, 1}, {36, 1}, {42, 1}}, + {{41, 1}, {42, 1}, {43, 1}}, + {{41, 1}, {18, 1}, {36, 1}}, + {{44, 1}, {45, 1}, {46, 1}}, + {{44, 1}, {46, 1}, {39, 1}}, + {{44, 1}, {39, 1}, {38, 1}}, + {{47, 1}, {43, 1}, {48, 1}}, + {{47, 1}, {48, 1}, {49, 1}}, + {{47, 1}, {49, 1}, {45, 1}}, + {{47, 1}, {41, 1}, {43, 1}}, + {{47, 1}, {45, 1}, {44, 1}}, + {{50, 2}, { 9, 2}, {18, 2}}, + {{50, 2}, {51, 2}, { 9, 2}}, + {{52, 2}, { 9, 2}, {51, 2}}, + {{52, 2}, {50, 2}, {18, 2}}, + {{41, 2}, { 9, 2}, {52, 2}}, + {{41, 2}, {52, 2}, {18, 2}}, + {{53, 3}, {54, 3}, { 2, 3}}, + {{53, 3}, { 2, 3}, {55, 3}}, + {{56, 3}, {55, 3}, { 2, 3}}, + {{57, 3}, {54, 3}, {53, 3}}, + {{58, 3}, { 2, 3}, { 9, 3}}, + {{58, 3}, {56, 3}, { 2, 3}}, + {{59, 3}, {60, 3}, {54, 3}}, + {{59, 3}, {54, 3}, {57, 3}}, + {{61, 3}, {58, 3}, { 9, 3}}, + {{62, 3}, {60, 3}, {59, 3}}, + {{63, 3}, {61, 3}, { 9, 3}}, + {{64, 3}, {63, 3}, { 9, 3}}, + {{65, 3}, {66, 3}, {67, 3}}, + {{65, 3}, {68, 3}, {66, 3}}, + {{65, 3}, {62, 3}, {68, 3}}, + {{65, 3}, {60, 3}, {62, 3}}, + {{41, 3}, {69, 3}, {64, 3}}, + {{41, 3}, {70, 3}, {69, 3}}, + {{41, 3}, {64, 3}, { 9, 3}}, + {{47, 3}, {71, 3}, {70, 3}}, + {{47, 3}, {70, 3}, {41, 3}}, + {{72, 3}, {73, 3}, {71, 3}}, + {{72, 3}, {74, 3}, {73, 3}}, + {{72, 3}, {67, 3}, {74, 3}}, + {{72, 3}, {65, 3}, {67, 3}}, + {{72, 3}, {71, 3}, {47, 3}}, + {{75, 4}, {54, 4}, {76, 4}}, + {{76, 4}, {54, 4}, { 0, 4}}, + {{76, 4}, { 2, 4}, {77, 4}}, + {{77, 4}, { 2, 4}, {75, 4}}, + {{ 0, 4}, { 2, 4}, {76, 4}}, + {{75, 4}, { 2, 4}, {54, 4}}, + {{ 6, 5}, {78, 5}, {79, 5}}, + {{78, 5}, {80, 5}, {79, 5}}, + {{ 6, 5}, {81, 5}, {78, 5}}, + {{79, 5}, {82, 5}, {83, 5}}, + {{80, 5}, {82, 5}, {79, 5}}, + {{ 0, 5}, {84, 5}, { 6, 5}}, + {{ 6, 5}, {84, 5}, {81, 5}}, + {{82, 5}, {85, 5}, {83, 5}}, + {{ 0, 5}, {86, 5}, {84, 5}}, + {{85, 5}, {87, 5}, {83, 5}}, + {{ 0, 5}, {88, 5}, {86, 5}}, + {{87, 5}, {89, 5}, {83, 5}}, + {{90, 5}, {91, 5}, {92, 5}}, + {{92, 5}, {91, 5}, {89, 5}}, + {{89, 5}, {91, 5}, {83, 5}}, + {{88, 5}, {54, 5}, {93, 5}}, + {{93, 5}, {54, 5}, {94, 5}}, + {{ 0, 5}, {54, 5}, {88, 5}}, + {{95, 5}, {96, 5}, {97, 5}}, + {{97, 5}, {96, 5}, {90, 5}}, + {{90, 5}, {96, 5}, {91, 5}}, + {{94, 5}, {60, 5}, {98, 5}}, + {{98, 5}, {60, 5}, {99, 5}}, + {{99, 5}, {60, 5}, {95, 5}}, + {{54, 5}, {60, 5}, {94, 5}}, + {{95, 5}, {60, 5}, {96, 5}}, + {{ 6, 6}, {100, 6}, {101, 6}}, + {{ 6, 6}, {79, 6}, {100, 6}}, + {{102, 6}, {14, 6}, {101, 6}}, + {{100, 6}, {14, 6}, {102, 6}}, + {{101, 6}, {14, 6}, { 6, 6}}, + {{79, 6}, {14, 6}, {100, 6}}, + {{79, 7}, {103, 7}, {14, 7}}, + {{14, 7}, {103, 7}, {104, 7}}, + {{104, 7}, {105, 7}, {14, 7}}, + {{83, 7}, {106, 7}, {79, 7}}, + {{79, 7}, {106, 7}, {103, 7}}, + {{14, 7}, {107, 7}, {23, 7}}, + {{105, 7}, {107, 7}, {14, 7}}, + {{83, 7}, {108, 7}, {106, 7}}, + {{107, 7}, {109, 7}, {23, 7}}, + {{83, 7}, {110, 7}, {108, 7}}, + {{109, 7}, {111, 7}, {23, 7}}, + {{111, 7}, {112, 7}, {23, 7}}, + {{113, 7}, {114, 7}, {115, 7}}, + {{116, 7}, {114, 7}, {113, 7}}, + {{110, 7}, {114, 7}, {116, 7}}, + {{83, 7}, {114, 7}, {110, 7}}, + {{117, 7}, {27, 7}, {112, 7}}, + {{112, 7}, {27, 7}, {23, 7}}, + {{118, 7}, {33, 7}, {117, 7}}, + {{119, 7}, {33, 7}, {118, 7}}, + {{117, 7}, {33, 7}, {27, 7}}, + {{120, 7}, {121, 7}, {119, 7}}, + {{122, 7}, {121, 7}, {120, 7}}, + {{115, 7}, {121, 7}, {122, 7}}, + {{119, 7}, {121, 7}, {33, 7}}, + {{114, 7}, {121, 7}, {115, 7}}, + {{123, 8}, {21, 8}, {23, 8}}, + {{123, 8}, {23, 8}, {124, 8}}, + {{125, 8}, {124, 8}, {23, 8}}, + {{27, 8}, {125, 8}, {23, 8}}, + {{27, 8}, {21, 8}, {123, 8}}, + {{27, 8}, {123, 8}, {125, 8}}, + {{ 4, 9}, { 7, 9}, {126, 9}}, + {{ 4, 9}, {126, 9}, {127, 9}}, + {{ 1, 10}, {127, 10}, {128, 10}}, + {{ 1, 10}, { 4, 10}, {127, 10}}, + {{ 3, 11}, {128, 11}, {129, 11}}, + {{ 3, 11}, { 1, 11}, {128, 11}}, + {{ 5, 12}, {129, 12}, {130, 12}}, + {{ 5, 12}, { 3, 12}, {129, 12}}, + {{ 8, 7}, {130, 7}, {131, 7}}, + {{ 8, 7}, { 5, 7}, {130, 7}}, + {{11, 13}, {132, 13}, {133, 13}}, + {{11, 14}, {131, 14}, {132, 14}}, + {{11, 14}, { 8, 14}, {131, 14}}, + {{13, 15}, {133, 15}, {134, 15}}, + {{13, 13}, {11, 13}, {133, 13}}, + {{19, 16}, {134, 16}, {135, 16}}, + {{19, 15}, {13, 15}, {134, 15}}, + {{17, 17}, {135, 17}, {136, 17}}, + {{17, 16}, {19, 16}, {135, 16}}, + {{22, 17}, {17, 17}, {136, 17}}, + {{20, 18}, {136, 18}, {137, 18}}, + {{20, 18}, {22, 18}, {136, 18}}, + {{25, 19}, {137, 19}, {138, 19}}, + {{25, 19}, {20, 19}, {137, 19}}, + {{24, 3}, {139, 3}, {140, 3}}, + {{24, 20}, {138, 20}, {139, 20}}, + {{24, 20}, {25, 20}, {138, 20}}, + {{16, 3}, {24, 3}, {140, 3}}, + {{15, 21}, {16, 21}, {140, 21}}, + {{15, 21}, {140, 21}, {141, 21}}, + {{12, 22}, {15, 22}, {141, 22}}, + {{12, 23}, {142, 23}, {143, 23}}, + {{12, 22}, {141, 22}, {142, 22}}, + {{10, 23}, {12, 23}, {143, 23}}, + {{ 7, 24}, {10, 24}, {143, 24}}, + {{ 7, 24}, {143, 24}, {126, 24}}, + {{144, 25}, {72, 25}, {47, 25}}, + {{144, 25}, {145, 25}, {72, 25}}, + {{146, 25}, {72, 25}, {145, 25}}, + {{44, 25}, {146, 25}, {144, 25}}, + {{44, 25}, {72, 25}, {146, 25}}, + {{44, 25}, {144, 25}, {47, 25}}, + {{147, 26}, {96, 26}, {65, 26}}, + {{148, 26}, {147, 26}, {65, 26}}, + {{149, 26}, {96, 26}, {147, 26}}, + {{150, 26}, {148, 26}, {65, 26}}, + {{72, 26}, {150, 26}, {65, 26}}, + {{151, 26}, {91, 26}, {96, 26}}, + {{151, 26}, {96, 26}, {149, 26}}, + {{152, 26}, {150, 26}, {72, 26}}, + {{153, 26}, {91, 26}, {151, 26}}, + {{154, 26}, {152, 26}, {72, 26}}, + {{155, 26}, {91, 26}, {153, 26}}, + {{156, 26}, {154, 26}, {72, 26}}, + {{114, 26}, {155, 26}, {157, 26}}, + {{114, 26}, {157, 26}, {158, 26}}, + {{114, 26}, {91, 26}, {155, 26}}, + {{44, 26}, {159, 26}, {160, 26}}, + {{44, 26}, {160, 26}, {156, 26}}, + {{44, 26}, {156, 26}, {72, 26}}, + {{38, 26}, {161, 26}, {162, 26}}, + {{38, 26}, {162, 26}, {159, 26}}, + {{38, 26}, {159, 26}, {44, 26}}, + {{121, 26}, {158, 26}, {163, 26}}, + {{121, 26}, {163, 26}, {164, 26}}, + {{121, 26}, {164, 26}, {161, 26}}, + {{121, 26}, {114, 26}, {158, 26}}, + {{121, 26}, {161, 26}, {38, 26}}, + {{165, 27}, {33, 27}, {121, 27}}, + {{165, 27}, {121, 27}, {166, 27}}, + {{167, 27}, {166, 27}, {121, 27}}, + {{38, 27}, {167, 27}, {121, 27}}, + {{38, 27}, {33, 27}, {165, 27}}, + {{38, 27}, {165, 27}, {167, 27}}, + {{168, 28}, {169, 28}, {39, 28}}, + {{168, 28}, {39, 28}, {46, 28}}, + {{170, 29}, {45, 29}, {49, 29}}, + {{170, 30}, {46, 30}, {45, 30}}, + {{170, 30}, {168, 30}, {46, 30}}, + {{171, 29}, {170, 29}, {49, 29}}, + {{172, 31}, {49, 31}, {48, 31}}, + {{172, 31}, {171, 31}, {49, 31}}, + {{173, 7}, {48, 7}, {43, 7}}, + {{173, 7}, {172, 7}, {48, 7}}, + {{174, 32}, {43, 32}, {42, 32}}, + {{174, 32}, {173, 32}, {43, 32}}, + {{175, 33}, {36, 33}, {34, 33}}, + {{175, 34}, {42, 34}, {36, 34}}, + {{175, 34}, {174, 34}, {42, 34}}, + {{176, 35}, {34, 35}, {31, 35}}, + {{176, 33}, {175, 33}, {34, 33}}, + {{177, 35}, {176, 35}, {31, 35}}, + {{178, 36}, {29, 36}, {26, 36}}, + {{178, 37}, {31, 37}, {29, 37}}, + {{178, 37}, {177, 37}, {31, 37}}, + {{179, 36}, {178, 36}, {26, 36}}, + {{180, 38}, {26, 38}, {28, 38}}, + {{180, 38}, {179, 38}, {26, 38}}, + {{181, 39}, {28, 39}, {30, 39}}, + {{181, 39}, {180, 39}, {28, 39}}, + {{182, 40}, {32, 40}, {35, 40}}, + {{182, 3}, {30, 3}, {32, 3}}, + {{182, 3}, {181, 3}, {30, 3}}, + {{183, 40}, {182, 40}, {35, 40}}, + {{184, 41}, {183, 41}, {35, 41}}, + {{184, 42}, {37, 42}, {40, 42}}, + {{184, 41}, {35, 41}, {37, 41}}, + {{185, 42}, {184, 42}, {40, 42}}, + {{169, 43}, {185, 43}, {40, 43}}, + {{169, 43}, {40, 43}, {39, 43}}, + {{128, 26}, {76, 26}, {77, 26}}, + {{129, 26}, {128, 26}, {77, 26}}, + {{127, 26}, {76, 26}, {128, 26}}, + {{130, 26}, {129, 26}, {77, 26}}, + {{126, 26}, {76, 26}, {127, 26}}, + {{101, 26}, {76, 26}, {126, 26}}, + {{51, 26}, {131, 26}, {130, 26}}, + {{51, 26}, {130, 26}, {77, 26}}, + {{143, 26}, {101, 26}, {126, 26}}, + {{132, 26}, {131, 26}, {51, 26}}, + {{142, 26}, {101, 26}, {143, 26}}, + {{133, 26}, {132, 26}, {51, 26}}, + {{102, 26}, {142, 26}, {141, 26}}, + {{102, 26}, {101, 26}, {142, 26}}, + {{140, 26}, {102, 26}, {141, 26}}, + {{50, 26}, {134, 26}, {133, 26}}, + {{50, 26}, {133, 26}, {51, 26}}, + {{135, 26}, {134, 26}, {50, 26}}, + {{139, 26}, {102, 26}, {140, 26}}, + {{123, 26}, {137, 26}, {136, 26}}, + {{123, 26}, {136, 26}, {135, 26}}, + {{123, 26}, {135, 26}, {50, 26}}, + {{124, 26}, {139, 26}, {138, 26}}, + {{124, 26}, {138, 26}, {137, 26}}, + {{124, 26}, {102, 26}, {139, 26}}, + {{124, 26}, {137, 26}, {123, 26}}, + {{123, 5}, {179, 5}, {125, 5}}, + {{179, 5}, {180, 5}, {125, 5}}, + {{123, 5}, {178, 5}, {179, 5}}, + {{180, 5}, {181, 5}, {125, 5}}, + {{123, 5}, {177, 5}, {178, 5}}, + {{123, 5}, {50, 5}, {177, 5}}, + {{125, 5}, {182, 5}, {165, 5}}, + {{181, 5}, {182, 5}, {125, 5}}, + {{50, 5}, {176, 5}, {177, 5}}, + {{182, 5}, {183, 5}, {165, 5}}, + {{50, 5}, {175, 5}, {176, 5}}, + {{183, 5}, {184, 5}, {165, 5}}, + {{185, 5}, {167, 5}, {184, 5}}, + {{184, 5}, {167, 5}, {165, 5}}, + {{175, 5}, {52, 5}, {174, 5}}, + {{174, 5}, {52, 5}, {173, 5}}, + {{50, 5}, {52, 5}, {175, 5}}, + {{185, 5}, {169, 5}, {167, 5}}, + {{52, 5}, {172, 5}, {173, 5}}, + {{170, 5}, {146, 5}, {168, 5}}, + {{168, 5}, {146, 5}, {169, 5}}, + {{169, 5}, {146, 5}, {167, 5}}, + {{172, 5}, {144, 5}, {171, 5}}, + {{171, 5}, {144, 5}, {170, 5}}, + {{52, 5}, {144, 5}, {172, 5}}, + {{170, 5}, {144, 5}, {146, 5}}, + {{75, 7}, {186, 7}, {77, 7}}, + {{75, 7}, {187, 7}, {186, 7}}, + {{186, 7}, {188, 7}, {77, 7}}, + {{75, 7}, {189, 7}, {187, 7}}, + {{188, 7}, {190, 7}, {77, 7}}, + {{191, 7}, {192, 7}, {75, 7}}, + {{75, 7}, {192, 7}, {189, 7}}, + {{190, 7}, {51, 7}, {77, 7}}, + {{190, 7}, {193, 7}, {51, 7}}, + {{191, 7}, {194, 7}, {192, 7}}, + {{193, 7}, {195, 7}, {51, 7}}, + {{191, 7}, {196, 7}, {194, 7}}, + {{196, 7}, {197, 7}, {198, 7}}, + {{191, 7}, {197, 7}, {196, 7}}, + {{199, 7}, {52, 7}, {195, 7}}, + {{200, 7}, {52, 7}, {199, 7}}, + {{195, 7}, {52, 7}, {51, 7}}, + {{197, 7}, {201, 7}, {198, 7}}, + {{200, 7}, {202, 7}, {52, 7}}, + {{203, 7}, {144, 7}, {202, 7}}, + {{204, 7}, {144, 7}, {203, 7}}, + {{202, 7}, {144, 7}, {52, 7}}, + {{205, 7}, {145, 7}, {204, 7}}, + {{201, 7}, {145, 7}, {205, 7}}, + {{204, 7}, {145, 7}, {144, 7}}, + {{197, 7}, {145, 7}, {201, 7}}, + {{206, 44}, {96, 44}, {191, 44}}, + {{191, 44}, {96, 44}, {60, 44}}, + {{191, 44}, {65, 44}, {197, 44}}, + {{197, 44}, {65, 44}, {206, 44}}, + {{60, 44}, {65, 44}, {191, 44}}, + {{206, 44}, {65, 44}, {96, 44}}, + {{74, 45}, {67, 45}, {201, 45}}, + {{74, 45}, {201, 45}, {205, 45}}, + {{73, 46}, {204, 46}, {203, 46}}, + {{73, 47}, {205, 47}, {204, 47}}, + {{73, 47}, {74, 47}, {205, 47}}, + {{71, 46}, {73, 46}, {203, 46}}, + {{70, 48}, {203, 48}, {202, 48}}, + {{70, 48}, {71, 48}, {203, 48}}, + {{69, 5}, {202, 5}, {200, 5}}, + {{69, 5}, {70, 5}, {202, 5}}, + {{64, 49}, {200, 49}, {199, 49}}, + {{64, 49}, {69, 49}, {200, 49}}, + {{63, 50}, {195, 50}, {193, 50}}, + {{63, 51}, {199, 51}, {195, 51}}, + {{63, 51}, {64, 51}, {199, 51}}, + {{61, 52}, {193, 52}, {190, 52}}, + {{61, 50}, {63, 50}, {193, 50}}, + {{58, 52}, {61, 52}, {190, 52}}, + {{56, 53}, {188, 53}, {186, 53}}, + {{56, 54}, {190, 54}, {188, 54}}, + {{56, 54}, {58, 54}, {190, 54}}, + {{55, 53}, {56, 53}, {186, 53}}, + {{53, 55}, {186, 55}, {187, 55}}, + {{53, 55}, {55, 55}, {186, 55}}, + {{57, 56}, {187, 56}, {189, 56}}, + {{57, 56}, {53, 56}, {187, 56}}, + {{59, 57}, {192, 57}, {194, 57}}, + {{59, 1}, {189, 1}, {192, 1}}, + {{59, 1}, {57, 1}, {189, 1}}, + {{62, 57}, {59, 57}, {194, 57}}, + {{68, 58}, {62, 58}, {194, 58}}, + {{68, 59}, {196, 59}, {198, 59}}, + {{68, 58}, {194, 58}, {196, 58}}, + {{66, 59}, {68, 59}, {198, 59}}, + {{67, 60}, {66, 60}, {198, 60}}, + {{67, 60}, {198, 60}, {201, 60}}, + {{207, 1}, {101, 1}, {100, 1}}, + {{208, 1}, {207, 1}, {100, 1}}, + {{209, 1}, {101, 1}, {207, 1}}, + {{210, 1}, {208, 1}, {100, 1}}, + {{211, 1}, {101, 1}, {209, 1}}, + {{76, 1}, {101, 1}, {211, 1}}, + {{212, 1}, {100, 1}, {213, 1}}, + {{212, 1}, {210, 1}, {100, 1}}, + {{214, 1}, {76, 1}, {211, 1}}, + {{215, 1}, {212, 1}, {213, 1}}, + {{216, 1}, {76, 1}, {214, 1}}, + {{217, 1}, {215, 1}, {213, 1}}, + {{218, 1}, {219, 1}, {217, 1}}, + {{218, 1}, {217, 1}, {213, 1}}, + {{75, 1}, {216, 1}, {220, 1}}, + {{75, 1}, {220, 1}, {221, 1}}, + {{75, 1}, {76, 1}, {216, 1}}, + {{222, 1}, {219, 1}, {218, 1}}, + {{223, 1}, {75, 1}, {221, 1}}, + {{206, 1}, {224, 1}, {225, 1}}, + {{206, 1}, {225, 1}, {222, 1}}, + {{206, 1}, {222, 1}, {218, 1}}, + {{191, 1}, {223, 1}, {226, 1}}, + {{191, 1}, {226, 1}, {224, 1}}, + {{191, 1}, {75, 1}, {223, 1}}, + {{191, 1}, {224, 1}, {206, 1}}, + {{213, 61}, {91, 61}, {218, 61}}, + {{83, 61}, {91, 61}, {213, 61}}, + {{227, 61}, {114, 61}, {213, 61}}, + {{218, 61}, {114, 61}, {227, 61}}, + {{213, 61}, {114, 61}, {83, 61}}, + {{91, 61}, {114, 61}, {218, 61}}, + {{97, 28}, {90, 28}, {222, 28}}, + {{97, 28}, {222, 28}, {225, 28}}, + {{95, 29}, {224, 29}, {226, 29}}, + {{95, 30}, {225, 30}, {224, 30}}, + {{95, 30}, {97, 30}, {225, 30}}, + {{99, 29}, {95, 29}, {226, 29}}, + {{98, 31}, {226, 31}, {223, 31}}, + {{98, 31}, {99, 31}, {226, 31}}, + {{94, 7}, {223, 7}, {221, 7}}, + {{94, 7}, {98, 7}, {223, 7}}, + {{93, 32}, {221, 32}, {220, 32}}, + {{93, 32}, {94, 32}, {221, 32}}, + {{88, 33}, {216, 33}, {214, 33}}, + {{88, 34}, {220, 34}, {216, 34}}, + {{88, 34}, {93, 34}, {220, 34}}, + {{86, 35}, {214, 35}, {211, 35}}, + {{86, 33}, {88, 33}, {214, 33}}, + {{84, 35}, {86, 35}, {211, 35}}, + {{81, 36}, {209, 36}, {207, 36}}, + {{81, 37}, {211, 37}, {209, 37}}, + {{81, 37}, {84, 37}, {211, 37}}, + {{78, 36}, {81, 36}, {207, 36}}, + {{80, 38}, {207, 38}, {208, 38}}, + {{80, 38}, {78, 38}, {207, 38}}, + {{82, 39}, {208, 39}, {210, 39}}, + {{82, 39}, {80, 39}, {208, 39}}, + {{85, 40}, {212, 40}, {215, 40}}, + {{85, 3}, {210, 3}, {212, 3}}, + {{85, 3}, {82, 3}, {210, 3}}, + {{87, 40}, {85, 40}, {215, 40}}, + {{89, 41}, {87, 41}, {215, 41}}, + {{89, 42}, {217, 42}, {219, 42}}, + {{89, 41}, {215, 41}, {217, 41}}, + {{92, 42}, {89, 42}, {219, 42}}, + {{90, 43}, {92, 43}, {219, 43}}, + {{90, 43}, {219, 43}, {222, 43}}, + {{228, 3}, {100, 3}, {102, 3}}, + {{229, 3}, {100, 3}, {228, 3}}, + {{230, 3}, {228, 3}, {102, 3}}, + {{231, 3}, {100, 3}, {229, 3}}, + {{232, 3}, {230, 3}, {102, 3}}, + {{233, 3}, {213, 3}, {100, 3}}, + {{233, 3}, {100, 3}, {231, 3}}, + {{124, 3}, {232, 3}, {102, 3}}, + {{234, 3}, {232, 3}, {124, 3}}, + {{235, 3}, {213, 3}, {233, 3}}, + {{236, 3}, {234, 3}, {124, 3}}, + {{237, 3}, {213, 3}, {235, 3}}, + {{227, 3}, {237, 3}, {238, 3}}, + {{227, 3}, {213, 3}, {237, 3}}, + {{125, 3}, {239, 3}, {236, 3}}, + {{125, 3}, {240, 3}, {239, 3}}, + {{125, 3}, {236, 3}, {124, 3}}, + {{241, 3}, {227, 3}, {238, 3}}, + {{242, 3}, {240, 3}, {125, 3}}, + {{165, 3}, {243, 3}, {242, 3}}, + {{165, 3}, {244, 3}, {243, 3}}, + {{165, 3}, {242, 3}, {125, 3}}, + {{166, 3}, {245, 3}, {244, 3}}, + {{166, 3}, {241, 3}, {245, 3}}, + {{166, 3}, {227, 3}, {241, 3}}, + {{166, 3}, {244, 3}, {165, 3}}, + {{245, 45}, {241, 45}, {115, 45}}, + {{245, 45}, {115, 45}, {122, 45}}, + {{244, 46}, {120, 46}, {119, 46}}, + {{244, 47}, {122, 47}, {120, 47}}, + {{244, 47}, {245, 47}, {122, 47}}, + {{243, 46}, {244, 46}, {119, 46}}, + {{242, 48}, {119, 48}, {118, 48}}, + {{242, 48}, {243, 48}, {119, 48}}, + {{240, 5}, {118, 5}, {117, 5}}, + {{240, 5}, {242, 5}, {118, 5}}, + {{239, 49}, {117, 49}, {112, 49}}, + {{239, 49}, {240, 49}, {117, 49}}, + {{236, 50}, {111, 50}, {109, 50}}, + {{236, 51}, {112, 51}, {111, 51}}, + {{236, 51}, {239, 51}, {112, 51}}, + {{234, 52}, {109, 52}, {107, 52}}, + {{234, 50}, {236, 50}, {109, 50}}, + {{232, 52}, {234, 52}, {107, 52}}, + {{230, 53}, {105, 53}, {104, 53}}, + {{230, 54}, {107, 54}, {105, 54}}, + {{230, 54}, {232, 54}, {107, 54}}, + {{228, 53}, {230, 53}, {104, 53}}, + {{229, 55}, {104, 55}, {103, 55}}, + {{229, 55}, {228, 55}, {104, 55}}, + {{231, 56}, {103, 56}, {106, 56}}, + {{231, 56}, {229, 56}, {103, 56}}, + {{233, 57}, {108, 57}, {110, 57}}, + {{233, 1}, {106, 1}, {108, 1}}, + {{233, 1}, {231, 1}, {106, 1}}, + {{235, 57}, {233, 57}, {110, 57}}, + {{237, 58}, {235, 58}, {110, 58}}, + {{237, 59}, {116, 59}, {113, 59}}, + {{237, 58}, {110, 58}, {116, 58}}, + {{238, 59}, {237, 59}, {113, 59}}, + {{241, 60}, {238, 60}, {113, 60}}, + {{241, 60}, {113, 60}, {115, 60}}, + {{206, 0}, {246, 0}, {197, 0}}, + {{246, 0}, {247, 0}, {197, 0}}, + {{206, 0}, {248, 0}, {246, 0}}, + {{247, 0}, {249, 0}, {197, 0}}, + {{206, 0}, {250, 0}, {248, 0}}, + {{206, 0}, {218, 0}, {250, 0}}, + {{251, 0}, {145, 0}, {249, 0}}, + {{249, 0}, {145, 0}, {197, 0}}, + {{218, 0}, {252, 0}, {250, 0}}, + {{251, 0}, {253, 0}, {145, 0}}, + {{218, 0}, {254, 0}, {252, 0}}, + {{253, 0}, {255, 0}, {145, 0}}, + {{254, 0}, {227, 0}, {256, 0}}, + {{218, 0}, {227, 0}, {254, 0}}, + {{227, 0}, {257, 0}, {256, 0}}, + {{258, 0}, {146, 0}, {255, 0}}, + {{255, 0}, {146, 0}, {145, 0}}, + {{258, 0}, {259, 0}, {146, 0}}, + {{260, 0}, {167, 0}, {261, 0}}, + {{261, 0}, {167, 0}, {259, 0}}, + {{259, 0}, {167, 0}, {146, 0}}, + {{257, 0}, {166, 0}, {262, 0}}, + {{262, 0}, {166, 0}, {263, 0}}, + {{263, 0}, {166, 0}, {260, 0}}, + {{227, 0}, {166, 0}, {257, 0}}, + {{260, 0}, {166, 0}, {167, 0}}, + {{248, 9}, {250, 9}, {151, 9}}, + {{248, 9}, {151, 9}, {149, 9}}, + {{246, 11}, {147, 11}, {148, 11}}, + {{246, 10}, {149, 10}, {147, 10}}, + {{246, 10}, {248, 10}, {149, 10}}, + {{247, 11}, {246, 11}, {148, 11}}, + {{249, 12}, {148, 12}, {150, 12}}, + {{249, 12}, {247, 12}, {148, 12}}, + {{251, 7}, {150, 7}, {152, 7}}, + {{251, 7}, {249, 7}, {150, 7}}, + {{253, 14}, {152, 14}, {154, 14}}, + {{253, 14}, {251, 14}, {152, 14}}, + {{255, 15}, {156, 15}, {160, 15}}, + {{255, 13}, {154, 13}, {156, 13}}, + {{255, 13}, {253, 13}, {154, 13}}, + {{258, 16}, {160, 16}, {159, 16}}, + {{258, 15}, {255, 15}, {160, 15}}, + {{259, 16}, {258, 16}, {159, 16}}, + {{261, 18}, {162, 18}, {161, 18}}, + {{261, 17}, {159, 17}, {162, 17}}, + {{261, 17}, {259, 17}, {159, 17}}, + {{260, 18}, {261, 18}, {161, 18}}, + {{263, 19}, {161, 19}, {164, 19}}, + {{263, 19}, {260, 19}, {161, 19}}, + {{262, 20}, {164, 20}, {163, 20}}, + {{262, 20}, {263, 20}, {164, 20}}, + {{257, 21}, {158, 21}, {157, 21}}, + {{257, 3}, {163, 3}, {158, 3}}, + {{257, 3}, {262, 3}, {163, 3}}, + {{256, 21}, {257, 21}, {157, 21}}, + {{254, 22}, {256, 22}, {157, 22}}, + {{254, 23}, {155, 23}, {153, 23}}, + {{254, 22}, {157, 22}, {155, 22}}, + {{252, 23}, {254, 23}, {153, 23}}, + {{250, 24}, {252, 24}, {153, 24}}, + {{250, 24}, {153, 24}, {151, 24}}, + }; + + constexpr uint32_t num_faces = (sizeof (faces)) / (sizeof (face)); + +} diff --git a/geometry/wiffle.obj b/geometry/wiffle.obj new file mode 100644 index 0000000..3cfdc4e --- /dev/null +++ b/geometry/wiffle.obj @@ -0,0 +1,906 @@ +# Blender 3.3.6 +# www.blender.org +o Wiffle +v -45.000000 3.360392 -45.000000 +v -45.000000 17.676659 -21.066221 +v -45.000000 45.000000 -15.556347 +v -45.000000 23.815699 -13.749999 +v -45.000000 9.405555 -25.841547 +v -45.000000 27.082212 -4.775324 +v -45.000000 -3.360388 -45.000000 +v -45.000000 0.000001 -27.500000 +v -45.000000 27.082212 4.775326 +v -45.000000 45.000000 15.556351 +v -45.000000 -9.405553 -25.841547 +v -45.000000 23.815699 13.750001 +v -45.000000 -17.676659 -21.066221 +v -45.000000 17.676659 21.066221 +v -45.000000 -45.000000 -15.556351 +v -45.000000 -23.815699 -13.750001 +v -45.000000 -27.082212 -4.775326 +v -45.000000 -0.000001 27.500000 +v -45.000000 3.360388 45.000000 +v -45.000000 9.405553 25.841547 +v -45.000000 -17.676659 21.066221 +v -45.000000 -3.360392 45.000000 +v -45.000000 -9.405555 25.841547 +v -45.000000 -45.000000 15.556347 +v -45.000000 -27.082212 4.775324 +v -45.000000 -23.815699 13.749999 +v -21.066221 -17.676661 45.000000 +v -3.360390 -45.000004 44.999996 +v -13.750000 -23.815701 45.000000 +v -25.841547 -9.405556 45.000000 +v -4.775325 -27.082214 45.000000 +v -27.500000 -0.000002 45.000000 +v 4.775325 -27.082214 45.000000 +v 3.360390 -45.000004 44.999996 +v -25.841547 9.405552 45.000000 +v 13.750000 -23.815701 45.000000 +v -21.066221 17.676657 45.000000 +v 21.066221 -17.676661 45.000000 +v 45.000000 -3.360392 45.000000 +v 27.500000 -0.000002 45.000000 +v 25.841547 -9.405556 45.000000 +v -3.360390 44.999996 45.000004 +v -13.750000 23.815697 45.000000 +v -4.775325 27.082211 45.000000 +v 45.000000 3.360388 45.000000 +v 21.066221 17.676657 45.000000 +v 25.841547 9.405552 45.000000 +v 3.360390 44.999996 45.000004 +v 4.775325 27.082211 45.000000 +v 13.750000 23.815697 45.000000 +v -40.000000 15.431457 40.000000 +v -40.000000 40.000000 22.627419 +v -15.431458 40.000000 40.000000 +v -13.750000 45.000000 -23.815697 +v -3.360390 45.000004 -44.999996 +v -21.066221 45.000000 -17.676657 +v -25.841547 45.000000 -9.405552 +v -4.775325 45.000000 -27.082211 +v -27.500000 45.000000 0.000002 +v 4.775325 45.000000 -27.082211 +v 3.360390 45.000004 -44.999996 +v -25.841547 45.000000 9.405556 +v 13.750000 45.000000 -23.815697 +v -21.066221 45.000000 17.676661 +v -13.750000 45.000000 23.815701 +v 45.000000 45.000000 -15.556347 +v 25.841547 45.000000 -9.405552 +v 27.500000 45.000000 0.000002 +v 21.066221 45.000000 -17.676657 +v -4.775325 45.000000 27.082214 +v 4.775325 45.000000 27.082214 +v 13.750000 45.000000 23.815701 +v 45.000000 45.000000 15.556351 +v 21.066221 45.000000 17.676661 +v 25.841547 45.000000 9.405556 +v -15.431458 40.000000 -40.000000 +v -40.000000 15.431460 -40.000000 +v -40.000000 40.000000 -22.627415 +v -21.066221 -17.676657 -45.000000 +v -3.360390 -44.999996 -45.000004 +v -13.750000 -23.815697 -45.000000 +v -25.841547 -9.405552 -45.000000 +v -4.775325 -27.082211 -45.000000 +v 3.360390 -44.999996 -45.000004 +v -27.500000 0.000002 -45.000000 +v 4.775325 -27.082211 -45.000000 +v -25.841547 9.405556 -45.000000 +v 13.750000 -23.815697 -45.000000 +v -21.066221 17.676661 -45.000000 +v 21.066221 -17.676657 -45.000000 +v 27.500000 0.000002 -45.000000 +v 45.000000 -3.360388 -45.000000 +v 25.841547 -9.405552 -45.000000 +v -13.750000 23.815701 -45.000000 +v -4.775325 27.082214 -45.000000 +v 21.066221 17.676661 -45.000000 +v 45.000000 3.360392 -45.000000 +v 25.841547 9.405556 -45.000000 +v 4.775325 27.082214 -45.000000 +v 13.750000 23.815701 -45.000000 +v -15.431458 -40.000000 -40.000000 +v -40.000000 -15.431457 -40.000000 +v -40.000000 -40.000000 -22.627419 +v -13.750000 -45.000000 -23.815701 +v -21.066221 -45.000000 -17.676661 +v -25.841547 -45.000000 -9.405556 +v -4.775325 -45.000000 -27.082214 +v -27.500000 -45.000000 -0.000002 +v 4.775325 -45.000000 -27.082214 +v -25.841547 -45.000000 9.405552 +v 13.750000 -45.000000 -23.815701 +v -21.066221 -45.000000 17.676657 +v -13.750000 -45.000000 23.815697 +v 25.841547 -45.000000 -9.405556 +v 45.000000 -45.000000 -15.556351 +v 27.500000 -45.000000 -0.000002 +v 21.066221 -45.000000 -17.676661 +v -4.775325 -45.000000 27.082211 +v 4.775325 -45.000000 27.082211 +v 13.750000 -45.000000 23.815697 +v 21.066221 -45.000000 17.676657 +v 45.000000 -45.000000 15.556347 +v 25.841547 -45.000000 9.405552 +v -40.000000 -15.431460 40.000000 +v -40.000000 -40.000000 22.627415 +v -15.431458 -40.000000 40.000000 +v -40.000000 0.000001 -27.500000 +v -40.000000 9.405555 -25.841547 +v -40.000000 17.676659 -21.066221 +v -40.000000 23.815699 -13.749999 +v -40.000000 27.082212 -4.775324 +v -40.000000 27.082212 4.775326 +v -40.000000 23.815699 13.750001 +v -40.000000 17.676659 21.066221 +v -40.000000 9.405553 25.841547 +v -40.000000 -0.000001 27.500000 +v -40.000000 -9.405555 25.841547 +v -40.000000 -17.676659 21.066221 +v -40.000000 -23.815699 13.749999 +v -40.000000 -27.082212 4.775324 +v -40.000000 -27.082212 -4.775326 +v -40.000000 -23.815699 -13.750001 +v -40.000000 -17.676659 -21.066221 +v -40.000000 -9.405553 -25.841547 +v 15.431458 40.000000 40.000000 +v 40.000000 40.000000 22.627419 +v 40.000000 15.431457 40.000000 +v 45.000000 17.676659 -21.066221 +v 45.000000 23.815699 -13.749999 +v 45.000000 9.405555 -25.841547 +v 45.000000 27.082212 -4.775324 +v 45.000000 0.000001 -27.500000 +v 45.000000 27.082212 4.775326 +v 45.000000 -9.405553 -25.841547 +v 45.000000 23.815699 13.750001 +v 45.000000 -17.676659 -21.066221 +v 45.000000 17.676659 21.066221 +v 45.000000 -23.815699 -13.750001 +v 45.000000 -27.082212 -4.775326 +v 45.000000 -0.000001 27.500000 +v 45.000000 9.405553 25.841547 +v 45.000000 -17.676659 21.066221 +v 45.000000 -9.405555 25.841547 +v 45.000000 -27.082212 4.775324 +v 45.000000 -23.815699 13.749999 +v 15.431458 -40.000000 40.000000 +v 40.000000 -40.000000 22.627415 +v 40.000000 -15.431460 40.000000 +v 25.841547 9.405552 40.000000 +v 27.500000 -0.000002 40.000000 +v 21.066221 17.676657 40.000000 +v 13.750000 23.815697 40.000000 +v 4.775325 27.082211 40.000000 +v -4.775325 27.082211 40.000000 +v -13.750000 23.815697 40.000000 +v -21.066221 17.676657 40.000000 +v -25.841547 9.405552 40.000000 +v -27.500000 -0.000002 40.000000 +v -25.841547 -9.405556 40.000000 +v -21.066221 -17.676661 40.000000 +v -13.750000 -23.815701 40.000000 +v -4.775325 -27.082214 40.000000 +v 4.775325 -27.082214 40.000000 +v 13.750000 -23.815701 40.000000 +v 21.066221 -17.676661 40.000000 +v 25.841547 -9.405556 40.000000 +v -21.066221 40.000000 -17.676657 +v -13.750000 40.000000 -23.815697 +v -25.841547 40.000000 -9.405552 +v -4.775325 40.000000 -27.082211 +v -27.500000 40.000000 0.000002 +v 15.431458 40.000000 -40.000000 +v 4.775325 40.000000 -27.082211 +v -25.841547 40.000000 9.405556 +v 13.750000 40.000000 -23.815697 +v -21.066221 40.000000 17.676661 +v 21.066221 40.000000 -17.676657 +v 40.000000 40.000000 -22.627415 +v 25.841547 40.000000 -9.405552 +v -13.750000 40.000000 23.815701 +v -4.775325 40.000000 27.082214 +v 27.500000 40.000000 0.000002 +v 4.775325 40.000000 27.082214 +v 13.750000 40.000000 23.815701 +v 21.066221 40.000000 17.676661 +v 25.841547 40.000000 9.405556 +v 40.000000 15.431460 -40.000000 +v -21.066221 -17.676657 -40.000000 +v -13.750000 -23.815697 -40.000000 +v -25.841547 -9.405552 -40.000000 +v -4.775325 -27.082211 -40.000000 +v -27.500000 0.000002 -40.000000 +v 4.775325 -27.082211 -40.000000 +v 15.431458 -40.000000 -40.000000 +v -25.841547 9.405556 -40.000000 +v 13.750000 -23.815697 -40.000000 +v -21.066221 17.676661 -40.000000 +v 21.066221 -17.676657 -40.000000 +v 40.000000 -15.431457 -40.000000 +v 25.841547 -9.405552 -40.000000 +v -13.750000 23.815701 -40.000000 +v -4.775325 27.082214 -40.000000 +v 27.500000 0.000002 -40.000000 +v 4.775325 27.082214 -40.000000 +v 21.066221 17.676661 -40.000000 +v 25.841547 9.405556 -40.000000 +v 13.750000 23.815701 -40.000000 +v 40.000000 -40.000000 -22.627419 +v -21.066221 -40.000000 -17.676661 +v -13.750000 -40.000000 -23.815701 +v -25.841547 -40.000000 -9.405556 +v -4.775325 -40.000000 -27.082214 +v -27.500000 -40.000000 -0.000002 +v 4.775325 -40.000000 -27.082214 +v -25.841547 -40.000000 9.405552 +v 13.750000 -40.000000 -23.815701 +v -21.066221 -40.000000 17.676657 +v 21.066221 -40.000000 -17.676661 +v 25.841547 -40.000000 -9.405556 +v -13.750000 -40.000000 23.815697 +v -4.775325 -40.000000 27.082211 +v 27.500000 -40.000000 -0.000002 +v 4.775325 -40.000000 27.082211 +v 13.750000 -40.000000 23.815697 +v 21.066221 -40.000000 17.676657 +v 25.841547 -40.000000 9.405552 +v 40.000000 17.676659 -21.066221 +v 40.000000 23.815699 -13.749999 +v 40.000000 9.405555 -25.841547 +v 40.000000 27.082212 -4.775324 +v 40.000000 0.000001 -27.500000 +v 40.000000 27.082212 4.775326 +v 40.000000 -9.405553 -25.841547 +v 40.000000 23.815699 13.750001 +v 40.000000 -17.676659 -21.066221 +v 40.000000 17.676659 21.066221 +v 40.000000 -23.815699 -13.750001 +v 40.000000 -27.082212 -4.775326 +v 40.000000 9.405553 25.841547 +v 40.000000 -0.000001 27.500000 +v 40.000000 -17.676659 21.066221 +v 40.000000 -9.405555 25.841547 +v 40.000000 -27.082212 4.775324 +v 40.000000 -23.815699 13.749999 +vn -1.0000 -0.0000 -0.0000 +vn -0.0000 -0.0000 1.0000 +vn -0.5000 0.5000 0.7071 +vn -0.0000 1.0000 -0.0000 +vn -0.5000 0.5000 -0.7071 +vn -0.0000 -0.0000 -1.0000 +vn -0.5000 -0.5000 -0.7071 +vn -0.0000 -1.0000 -0.0000 +vn -0.5000 -0.5000 0.7071 +vn -0.0000 -0.1736 0.9848 +vn -0.0000 -0.5000 0.8660 +vn -0.0000 -0.7660 0.6428 +vn -0.0000 -0.9397 0.3420 +vn -0.0000 -0.7660 -0.6428 +vn -0.0000 -0.9397 -0.3420 +vn -0.0000 -0.5000 -0.8660 +vn -0.0000 -0.1736 -0.9848 +vn -0.0000 0.1736 -0.9848 +vn -0.0000 0.5000 -0.8660 +vn -0.0000 0.7660 -0.6428 +vn -0.0000 0.9397 -0.3420 +vn -0.0000 0.9397 0.3420 +vn -0.0000 0.7660 0.6428 +vn -0.0000 0.5000 0.8660 +vn -0.0000 0.1736 0.9848 +vn 0.5000 0.5000 0.7071 +vn 1.0000 -0.0000 -0.0000 +vn 0.5000 -0.5000 0.7071 +vn -0.9848 -0.1736 -0.0000 +vn -0.6428 -0.7660 -0.0000 +vn -0.8660 -0.5000 -0.0000 +vn -0.3420 -0.9397 -0.0000 +vn 0.3420 -0.9397 -0.0000 +vn 0.8660 -0.5000 -0.0000 +vn 0.6428 -0.7660 -0.0000 +vn 0.9848 -0.1736 -0.0000 +vn 0.8660 0.5000 -0.0000 +vn 0.9848 0.1736 -0.0000 +vn 0.6428 0.7660 -0.0000 +vn 0.3420 0.9397 -0.0000 +vn -0.3420 0.9397 -0.0000 +vn -0.6428 0.7660 -0.0000 +vn -0.8660 0.5000 -0.0000 +vn -0.9848 0.1736 -0.0000 +vn 0.5000 0.5000 -0.7071 +vn -0.9848 -0.0000 -0.1736 +vn -0.6428 -0.0000 -0.7660 +vn -0.8660 -0.0000 -0.5000 +vn -0.3420 -0.0000 -0.9397 +vn 0.3420 -0.0000 -0.9397 +vn 0.8660 -0.0000 -0.5000 +vn 0.6428 -0.0000 -0.7660 +vn 0.9848 -0.0000 -0.1736 +vn 0.8660 -0.0000 0.5000 +vn 0.9848 -0.0000 0.1736 +vn 0.6428 -0.0000 0.7660 +vn 0.3420 -0.0000 0.9397 +vn -0.3420 -0.0000 0.9397 +vn -0.6428 -0.0000 0.7660 +vn -0.8660 -0.0000 0.5000 +vn -0.9848 -0.0000 0.1736 +vn 0.5000 -0.5000 -0.7071 +s 0 +f 1//1 2//1 3//1 +f 2//1 4//1 3//1 +f 1//1 5//1 2//1 +f 4//1 6//1 3//1 +f 7//1 8//1 1//1 +f 1//1 8//1 5//1 +f 3//1 9//1 10//1 +f 6//1 9//1 3//1 +f 7//1 11//1 8//1 +f 9//1 12//1 10//1 +f 7//1 13//1 11//1 +f 12//1 14//1 10//1 +f 13//1 15//1 16//1 +f 16//1 15//1 17//1 +f 7//1 15//1 13//1 +f 18//1 19//1 20//1 +f 20//1 19//1 14//1 +f 14//1 19//1 10//1 +f 21//1 22//1 23//1 +f 23//1 22//1 18//1 +f 18//1 22//1 19//1 +f 17//1 24//1 25//1 +f 25//1 24//1 26//1 +f 26//1 24//1 21//1 +f 15//1 24//1 17//1 +f 21//1 24//1 22//1 +f 27//2 22//2 28//2 +f 29//2 27//2 28//2 +f 30//2 22//2 27//2 +f 31//2 29//2 28//2 +f 32//2 19//2 22//2 +f 32//2 22//2 30//2 +f 33//2 28//2 34//2 +f 33//2 31//2 28//2 +f 35//2 19//2 32//2 +f 36//2 33//2 34//2 +f 37//2 19//2 35//2 +f 38//2 36//2 34//2 +f 39//2 40//2 41//2 +f 39//2 41//2 38//2 +f 39//2 38//2 34//2 +f 42//2 37//2 43//2 +f 42//2 43//2 44//2 +f 42//2 19//2 37//2 +f 45//2 46//2 47//2 +f 45//2 47//2 40//2 +f 45//2 40//2 39//2 +f 48//2 44//2 49//2 +f 48//2 49//2 50//2 +f 48//2 50//2 46//2 +f 48//2 42//2 44//2 +f 48//2 46//2 45//2 +f 51//3 10//3 19//3 +f 51//3 52//3 10//3 +f 53//3 10//3 52//3 +f 53//3 51//3 19//3 +f 42//3 10//3 53//3 +f 42//3 53//3 19//3 +f 54//4 55//4 3//4 +f 54//4 3//4 56//4 +f 57//4 56//4 3//4 +f 58//4 55//4 54//4 +f 59//4 3//4 10//4 +f 59//4 57//4 3//4 +f 60//4 61//4 55//4 +f 60//4 55//4 58//4 +f 62//4 59//4 10//4 +f 63//4 61//4 60//4 +f 64//4 62//4 10//4 +f 65//4 64//4 10//4 +f 66//4 67//4 68//4 +f 66//4 69//4 67//4 +f 66//4 63//4 69//4 +f 66//4 61//4 63//4 +f 42//4 70//4 65//4 +f 42//4 71//4 70//4 +f 42//4 65//4 10//4 +f 48//4 72//4 71//4 +f 48//4 71//4 42//4 +f 73//4 74//4 72//4 +f 73//4 75//4 74//4 +f 73//4 68//4 75//4 +f 73//4 66//4 68//4 +f 73//4 72//4 48//4 +f 76//5 55//5 77//5 +f 77//5 55//5 1//5 +f 77//5 3//5 78//5 +f 78//5 3//5 76//5 +f 1//5 3//5 77//5 +f 76//5 3//5 55//5 +f 7//6 79//6 80//6 +f 79//6 81//6 80//6 +f 7//6 82//6 79//6 +f 80//6 83//6 84//6 +f 81//6 83//6 80//6 +f 1//6 85//6 7//6 +f 7//6 85//6 82//6 +f 83//6 86//6 84//6 +f 1//6 87//6 85//6 +f 86//6 88//6 84//6 +f 1//6 89//6 87//6 +f 88//6 90//6 84//6 +f 91//6 92//6 93//6 +f 93//6 92//6 90//6 +f 90//6 92//6 84//6 +f 89//6 55//6 94//6 +f 94//6 55//6 95//6 +f 1//6 55//6 89//6 +f 96//6 97//6 98//6 +f 98//6 97//6 91//6 +f 91//6 97//6 92//6 +f 95//6 61//6 99//6 +f 99//6 61//6 100//6 +f 100//6 61//6 96//6 +f 55//6 61//6 95//6 +f 96//6 61//6 97//6 +f 7//7 101//7 102//7 +f 7//7 80//7 101//7 +f 103//7 15//7 102//7 +f 101//7 15//7 103//7 +f 102//7 15//7 7//7 +f 80//7 15//7 101//7 +f 80//8 104//8 15//8 +f 15//8 104//8 105//8 +f 105//8 106//8 15//8 +f 84//8 107//8 80//8 +f 80//8 107//8 104//8 +f 15//8 108//8 24//8 +f 106//8 108//8 15//8 +f 84//8 109//8 107//8 +f 108//8 110//8 24//8 +f 84//8 111//8 109//8 +f 110//8 112//8 24//8 +f 112//8 113//8 24//8 +f 114//8 115//8 116//8 +f 117//8 115//8 114//8 +f 111//8 115//8 117//8 +f 84//8 115//8 111//8 +f 118//8 28//8 113//8 +f 113//8 28//8 24//8 +f 119//8 34//8 118//8 +f 120//8 34//8 119//8 +f 118//8 34//8 28//8 +f 121//8 122//8 120//8 +f 123//8 122//8 121//8 +f 116//8 122//8 123//8 +f 120//8 122//8 34//8 +f 115//8 122//8 116//8 +f 124//9 22//9 24//9 +f 124//9 24//9 125//9 +f 126//9 125//9 24//9 +f 28//9 126//9 24//9 +f 28//9 22//9 124//9 +f 28//9 124//9 126//9 +f 5//10 8//10 127//10 +f 5//10 127//10 128//10 +f 2//11 128//11 129//11 +f 2//11 5//11 128//11 +f 4//12 129//12 130//12 +f 4//12 2//12 129//12 +f 6//13 130//13 131//13 +f 6//13 4//13 130//13 +f 9//8 131//8 132//8 +f 9//8 6//8 131//8 +f 12//14 133//14 134//14 +f 12//15 132//15 133//15 +f 12//15 9//15 132//15 +f 14//16 134//16 135//16 +f 14//14 12//14 134//14 +f 20//17 135//17 136//17 +f 20//16 14//16 135//16 +f 18//18 136//18 137//18 +f 18//17 20//17 136//17 +f 23//18 18//18 137//18 +f 21//19 137//19 138//19 +f 21//19 23//19 137//19 +f 26//20 138//20 139//20 +f 26//20 21//20 138//20 +f 25//4 140//4 141//4 +f 25//21 139//21 140//21 +f 25//21 26//21 139//21 +f 17//4 25//4 141//4 +f 16//22 17//22 141//22 +f 16//22 141//22 142//22 +f 13//23 16//23 142//23 +f 13//24 143//24 144//24 +f 13//23 142//23 143//23 +f 11//24 13//24 144//24 +f 8//25 11//25 144//25 +f 8//25 144//25 127//25 +f 145//26 73//26 48//26 +f 145//26 146//26 73//26 +f 147//26 73//26 146//26 +f 45//26 147//26 145//26 +f 45//26 73//26 147//26 +f 45//26 145//26 48//26 +f 148//27 97//27 66//27 +f 149//27 148//27 66//27 +f 150//27 97//27 148//27 +f 151//27 149//27 66//27 +f 73//27 151//27 66//27 +f 152//27 92//27 97//27 +f 152//27 97//27 150//27 +f 153//27 151//27 73//27 +f 154//27 92//27 152//27 +f 155//27 153//27 73//27 +f 156//27 92//27 154//27 +f 157//27 155//27 73//27 +f 115//27 156//27 158//27 +f 115//27 158//27 159//27 +f 115//27 92//27 156//27 +f 45//27 160//27 161//27 +f 45//27 161//27 157//27 +f 45//27 157//27 73//27 +f 39//27 162//27 163//27 +f 39//27 163//27 160//27 +f 39//27 160//27 45//27 +f 122//27 159//27 164//27 +f 122//27 164//27 165//27 +f 122//27 165//27 162//27 +f 122//27 115//27 159//27 +f 122//27 162//27 39//27 +f 166//28 34//28 122//28 +f 166//28 122//28 167//28 +f 168//28 167//28 122//28 +f 39//28 168//28 122//28 +f 39//28 34//28 166//28 +f 39//28 166//28 168//28 +f 169//29 170//29 40//29 +f 169//29 40//29 47//29 +f 171//30 46//30 50//30 +f 171//31 47//31 46//31 +f 171//31 169//31 47//31 +f 172//30 171//30 50//30 +f 173//32 50//32 49//32 +f 173//32 172//32 50//32 +f 174//8 49//8 44//8 +f 174//8 173//8 49//8 +f 175//33 44//33 43//33 +f 175//33 174//33 44//33 +f 176//34 37//34 35//34 +f 176//35 43//35 37//35 +f 176//35 175//35 43//35 +f 177//36 35//36 32//36 +f 177//34 176//34 35//34 +f 178//36 177//36 32//36 +f 179//37 30//37 27//37 +f 179//38 32//38 30//38 +f 179//38 178//38 32//38 +f 180//37 179//37 27//37 +f 181//39 27//39 29//39 +f 181//39 180//39 27//39 +f 182//40 29//40 31//40 +f 182//40 181//40 29//40 +f 183//41 33//41 36//41 +f 183//4 31//4 33//4 +f 183//4 182//4 31//4 +f 184//41 183//41 36//41 +f 185//42 184//42 36//42 +f 185//43 38//43 41//43 +f 185//42 36//42 38//42 +f 186//43 185//43 41//43 +f 170//44 186//44 41//44 +f 170//44 41//44 40//44 +f 129//27 77//27 78//27 +f 130//27 129//27 78//27 +f 128//27 77//27 129//27 +f 131//27 130//27 78//27 +f 127//27 77//27 128//27 +f 102//27 77//27 127//27 +f 52//27 132//27 131//27 +f 52//27 131//27 78//27 +f 144//27 102//27 127//27 +f 133//27 132//27 52//27 +f 143//27 102//27 144//27 +f 134//27 133//27 52//27 +f 103//27 143//27 142//27 +f 103//27 102//27 143//27 +f 141//27 103//27 142//27 +f 51//27 135//27 134//27 +f 51//27 134//27 52//27 +f 136//27 135//27 51//27 +f 140//27 103//27 141//27 +f 124//27 138//27 137//27 +f 124//27 137//27 136//27 +f 124//27 136//27 51//27 +f 125//27 140//27 139//27 +f 125//27 139//27 138//27 +f 125//27 103//27 140//27 +f 125//27 138//27 124//27 +f 124//6 180//6 126//6 +f 180//6 181//6 126//6 +f 124//6 179//6 180//6 +f 181//6 182//6 126//6 +f 124//6 178//6 179//6 +f 124//6 51//6 178//6 +f 126//6 183//6 166//6 +f 182//6 183//6 126//6 +f 51//6 177//6 178//6 +f 183//6 184//6 166//6 +f 51//6 176//6 177//6 +f 184//6 185//6 166//6 +f 186//6 168//6 185//6 +f 185//6 168//6 166//6 +f 176//6 53//6 175//6 +f 175//6 53//6 174//6 +f 51//6 53//6 176//6 +f 186//6 170//6 168//6 +f 53//6 173//6 174//6 +f 171//6 147//6 169//6 +f 169//6 147//6 170//6 +f 170//6 147//6 168//6 +f 173//6 145//6 172//6 +f 172//6 145//6 171//6 +f 53//6 145//6 173//6 +f 171//6 145//6 147//6 +f 76//8 187//8 78//8 +f 76//8 188//8 187//8 +f 187//8 189//8 78//8 +f 76//8 190//8 188//8 +f 189//8 191//8 78//8 +f 192//8 193//8 76//8 +f 76//8 193//8 190//8 +f 191//8 52//8 78//8 +f 191//8 194//8 52//8 +f 192//8 195//8 193//8 +f 194//8 196//8 52//8 +f 192//8 197//8 195//8 +f 197//8 198//8 199//8 +f 192//8 198//8 197//8 +f 200//8 53//8 196//8 +f 201//8 53//8 200//8 +f 196//8 53//8 52//8 +f 198//8 202//8 199//8 +f 201//8 203//8 53//8 +f 204//8 145//8 203//8 +f 205//8 145//8 204//8 +f 203//8 145//8 53//8 +f 206//8 146//8 205//8 +f 202//8 146//8 206//8 +f 205//8 146//8 145//8 +f 198//8 146//8 202//8 +f 207//45 97//45 192//45 +f 192//45 97//45 61//45 +f 192//45 66//45 198//45 +f 198//45 66//45 207//45 +f 61//45 66//45 192//45 +f 207//45 66//45 97//45 +f 75//46 68//46 202//46 +f 75//46 202//46 206//46 +f 74//47 205//47 204//47 +f 74//48 206//48 205//48 +f 74//48 75//48 206//48 +f 72//47 74//47 204//47 +f 71//49 204//49 203//49 +f 71//49 72//49 204//49 +f 70//6 203//6 201//6 +f 70//6 71//6 203//6 +f 65//50 201//50 200//50 +f 65//50 70//50 201//50 +f 64//51 196//51 194//51 +f 64//52 200//52 196//52 +f 64//52 65//52 200//52 +f 62//53 194//53 191//53 +f 62//51 64//51 194//51 +f 59//53 62//53 191//53 +f 57//54 189//54 187//54 +f 57//55 191//55 189//55 +f 57//55 59//55 191//55 +f 56//54 57//54 187//54 +f 54//56 187//56 188//56 +f 54//56 56//56 187//56 +f 58//57 188//57 190//57 +f 58//57 54//57 188//57 +f 60//58 193//58 195//58 +f 60//2 190//2 193//2 +f 60//2 58//2 190//2 +f 63//58 60//58 195//58 +f 69//59 63//59 195//59 +f 69//60 197//60 199//60 +f 69//59 195//59 197//59 +f 67//60 69//60 199//60 +f 68//61 67//61 199//61 +f 68//61 199//61 202//61 +f 208//2 102//2 101//2 +f 209//2 208//2 101//2 +f 210//2 102//2 208//2 +f 211//2 209//2 101//2 +f 212//2 102//2 210//2 +f 77//2 102//2 212//2 +f 213//2 101//2 214//2 +f 213//2 211//2 101//2 +f 215//2 77//2 212//2 +f 216//2 213//2 214//2 +f 217//2 77//2 215//2 +f 218//2 216//2 214//2 +f 219//2 220//2 218//2 +f 219//2 218//2 214//2 +f 76//2 217//2 221//2 +f 76//2 221//2 222//2 +f 76//2 77//2 217//2 +f 223//2 220//2 219//2 +f 224//2 76//2 222//2 +f 207//2 225//2 226//2 +f 207//2 226//2 223//2 +f 207//2 223//2 219//2 +f 192//2 224//2 227//2 +f 192//2 227//2 225//2 +f 192//2 76//2 224//2 +f 192//2 225//2 207//2 +f 214//62 92//62 219//62 +f 84//62 92//62 214//62 +f 228//62 115//62 214//62 +f 219//62 115//62 228//62 +f 214//62 115//62 84//62 +f 92//62 115//62 219//62 +f 98//29 91//29 223//29 +f 98//29 223//29 226//29 +f 96//30 225//30 227//30 +f 96//31 226//31 225//31 +f 96//31 98//31 226//31 +f 100//30 96//30 227//30 +f 99//32 227//32 224//32 +f 99//32 100//32 227//32 +f 95//8 224//8 222//8 +f 95//8 99//8 224//8 +f 94//33 222//33 221//33 +f 94//33 95//33 222//33 +f 89//34 217//34 215//34 +f 89//35 221//35 217//35 +f 89//35 94//35 221//35 +f 87//36 215//36 212//36 +f 87//34 89//34 215//34 +f 85//36 87//36 212//36 +f 82//37 210//37 208//37 +f 82//38 212//38 210//38 +f 82//38 85//38 212//38 +f 79//37 82//37 208//37 +f 81//39 208//39 209//39 +f 81//39 79//39 208//39 +f 83//40 209//40 211//40 +f 83//40 81//40 209//40 +f 86//41 213//41 216//41 +f 86//4 211//4 213//4 +f 86//4 83//4 211//4 +f 88//41 86//41 216//41 +f 90//42 88//42 216//42 +f 90//43 218//43 220//43 +f 90//42 216//42 218//42 +f 93//43 90//43 220//43 +f 91//44 93//44 220//44 +f 91//44 220//44 223//44 +f 229//4 101//4 103//4 +f 230//4 101//4 229//4 +f 231//4 229//4 103//4 +f 232//4 101//4 230//4 +f 233//4 231//4 103//4 +f 234//4 214//4 101//4 +f 234//4 101//4 232//4 +f 125//4 233//4 103//4 +f 235//4 233//4 125//4 +f 236//4 214//4 234//4 +f 237//4 235//4 125//4 +f 238//4 214//4 236//4 +f 228//4 238//4 239//4 +f 228//4 214//4 238//4 +f 126//4 240//4 237//4 +f 126//4 241//4 240//4 +f 126//4 237//4 125//4 +f 242//4 228//4 239//4 +f 243//4 241//4 126//4 +f 166//4 244//4 243//4 +f 166//4 245//4 244//4 +f 166//4 243//4 126//4 +f 167//4 246//4 245//4 +f 167//4 242//4 246//4 +f 167//4 228//4 242//4 +f 167//4 245//4 166//4 +f 246//46 242//46 116//46 +f 246//46 116//46 123//46 +f 245//47 121//47 120//47 +f 245//48 123//48 121//48 +f 245//48 246//48 123//48 +f 244//47 245//47 120//47 +f 243//49 120//49 119//49 +f 243//49 244//49 120//49 +f 241//6 119//6 118//6 +f 241//6 243//6 119//6 +f 240//50 118//50 113//50 +f 240//50 241//50 118//50 +f 237//51 112//51 110//51 +f 237//52 113//52 112//52 +f 237//52 240//52 113//52 +f 235//53 110//53 108//53 +f 235//51 237//51 110//51 +f 233//53 235//53 108//53 +f 231//54 106//54 105//54 +f 231//55 108//55 106//55 +f 231//55 233//55 108//55 +f 229//54 231//54 105//54 +f 230//56 105//56 104//56 +f 230//56 229//56 105//56 +f 232//57 104//57 107//57 +f 232//57 230//57 104//57 +f 234//58 109//58 111//58 +f 234//2 107//2 109//2 +f 234//2 232//2 107//2 +f 236//58 234//58 111//58 +f 238//59 236//59 111//59 +f 238//60 117//60 114//60 +f 238//59 111//59 117//59 +f 239//60 238//60 114//60 +f 242//61 239//61 114//61 +f 242//61 114//61 116//61 +f 207//1 247//1 198//1 +f 247//1 248//1 198//1 +f 207//1 249//1 247//1 +f 248//1 250//1 198//1 +f 207//1 251//1 249//1 +f 207//1 219//1 251//1 +f 252//1 146//1 250//1 +f 250//1 146//1 198//1 +f 219//1 253//1 251//1 +f 252//1 254//1 146//1 +f 219//1 255//1 253//1 +f 254//1 256//1 146//1 +f 255//1 228//1 257//1 +f 219//1 228//1 255//1 +f 228//1 258//1 257//1 +f 259//1 147//1 256//1 +f 256//1 147//1 146//1 +f 259//1 260//1 147//1 +f 261//1 168//1 262//1 +f 262//1 168//1 260//1 +f 260//1 168//1 147//1 +f 258//1 167//1 263//1 +f 263//1 167//1 264//1 +f 264//1 167//1 261//1 +f 228//1 167//1 258//1 +f 261//1 167//1 168//1 +f 249//10 251//10 152//10 +f 249//10 152//10 150//10 +f 247//12 148//12 149//12 +f 247//11 150//11 148//11 +f 247//11 249//11 150//11 +f 248//12 247//12 149//12 +f 250//13 149//13 151//13 +f 250//13 248//13 149//13 +f 252//8 151//8 153//8 +f 252//8 250//8 151//8 +f 254//15 153//15 155//15 +f 254//15 252//15 153//15 +f 256//16 157//16 161//16 +f 256//14 155//14 157//14 +f 256//14 254//14 155//14 +f 259//17 161//17 160//17 +f 259//16 256//16 161//16 +f 260//17 259//17 160//17 +f 262//19 163//19 162//19 +f 262//18 160//18 163//18 +f 262//18 260//18 160//18 +f 261//19 262//19 162//19 +f 264//20 162//20 165//20 +f 264//20 261//20 162//20 +f 263//21 165//21 164//21 +f 263//21 264//21 165//21 +f 258//22 159//22 158//22 +f 258//4 164//4 159//4 +f 258//4 263//4 164//4 +f 257//22 258//22 158//22 +f 255//23 257//23 158//23 +f 255//24 156//24 154//24 +f 255//23 158//23 156//23 +f 253//24 255//24 154//24 +f 251//25 253//25 154//25 +f 251//25 154//25 152//25