example: add wiffle_attenuation

This example is an experiment with light attenuation.
This commit is contained in:
Zack Buhman 2023-12-26 22:45:55 +08:00
parent b43b18492a
commit 6a17031c6f
4 changed files with 2146 additions and 0 deletions

View File

@ -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 \

View File

@ -0,0 +1,310 @@
#include <cstdint>
#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>() = 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>() =
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>() = 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>() =
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<volatile texture_memory_alloc *>(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>() = 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;
}
}

919
geometry/wiffle.hpp Normal file
View File

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

906
geometry/wiffle.obj Normal file
View File

@ -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