├── .gitignore ├── CMakeLists.txt ├── LICENSE.md ├── README.md ├── config.h ├── entities ├── geometry │ ├── object.cpp │ └── object.h ├── rendering │ ├── buffer.cpp │ ├── buffer.h │ ├── renderer.cpp │ └── renderer.h └── view │ ├── camera.h │ └── light.h ├── main.cpp ├── package.sh ├── resources ├── images │ ├── demo.gif │ ├── fox-1.png │ ├── fox-2.png │ ├── linux-1.png │ ├── linux-2.png │ ├── pslogo-1.png │ ├── pslogo-2.png │ ├── tree-1.png │ ├── tree-2.png │ └── usage.gif └── objects │ ├── .gitignore │ ├── fox.mtl │ ├── fox.obj │ ├── linux.mtl │ ├── linux.obj │ ├── pslogo.mtl │ ├── pslogo.obj │ ├── tree.mtl │ └── tree.obj ├── utils ├── algorithms.cpp ├── algorithms.h ├── mathematics.cpp ├── mathematics.h ├── tools.cpp └── tools.h └── version.h /.gitignore: -------------------------------------------------------------------------------- 1 | # build directory 2 | /cmake-build-debug/ 3 | /cmake-build-release/ 4 | /cmake-build-sanitize/ 5 | 6 | # release directory 7 | /package/ 8 | 9 | # ide settings 10 | /.idea -------------------------------------------------------------------------------- /CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # CMakeLists.txt 2 | 3 | cmake_minimum_required(VERSION 3.22) 4 | project(objcurses) 5 | 6 | set(CMAKE_CXX_STANDARD 20) 7 | 8 | # address sanitizer 9 | option(SANITIZE "enable AddressSanitizer with extended checks" OFF) 10 | 11 | if(SANITIZE) 12 | message(STATUS "AddressSanitizer enabled") 13 | set(ASAN_FLAGS "-fsanitize=address -fno-omit-frame-pointer -g") 14 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${ASAN_FLAGS}") 15 | set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${ASAN_FLAGS}") 16 | 17 | # embed runtime ASAN options into binary 18 | add_compile_definitions(ASAN_OPTIONS="detect_leaks=1:strict_string_checks=1:check_initialization_order=1:detect_stack_use_after_return=1:detect_container_overflow=1:abort_on_error=1") 19 | endif() 20 | 21 | # collect all source files recursively, excluding build directory 22 | file(GLOB_RECURSE SOURCES CONFIGURE_DEPENDS "${CMAKE_SOURCE_DIR}/*.cpp") 23 | list(FILTER SOURCES EXCLUDE REGEX ".*/.*build.*/.*") 24 | 25 | # creating executable 26 | add_executable(${PROJECT_NAME} ${SOURCES}) 27 | target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}) 28 | 29 | # linking ncurses library 30 | find_package(Curses REQUIRED) 31 | target_link_libraries(${PROJECT_NAME} PRIVATE ${CURSES_LIBRARIES}) 32 | target_include_directories(${PROJECT_NAME} PRIVATE ${CURSES_INCLUDE_DIR}) 33 | 34 | # linking math library 35 | target_link_libraries(${PROJECT_NAME} PRIVATE m) 36 | 37 | # install rules 38 | include(GNUInstallDirs) 39 | 40 | install(TARGETS ${PROJECT_NAME} 41 | RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} 42 | ) 43 | 44 | install(FILES LICENSE.md 45 | DESTINATION ${CMAKE_INSTALL_DATADIR}/licenses/${PROJECT_NAME} 46 | ) 47 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Anton Dmitriev 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | ``` 3 | ___. __ 4 | ____\_ |__ |__| ____ __ _________ ______ ____ ______ 5 | / _ \| __ \ | |/ ___\| | \_ __ \/ ___// __ \ / ___/ 6 | ( <_> ) \_\ \ | \ \___| | /| | \/\___ \\ ___/ \___ \ 7 | \____/|___ /\__| |\___ >____/ |__| /____ >\___ >____ > 8 | \/\______| \/ \/ \/ \/ 9 | ``` 10 | 11 | **objcurses** is a minimalistic 3D object viewer that runs in your terminal using `ncurses`. It renders `.obj` models in real time using ASCII characters and a simple rendering pipeline. The project was built from scratch in modern C++20 using up-to-date best practices and a clean modular design, as a personal exploration of low-level graphics programming - without relying on external graphic engines or frameworks. 12 | 13 |

14 | TUI Demo Gif 15 |

16 | 17 | # Features 18 | 19 | - Render `.obj` files directly in terminal 20 | - Real-time camera and directional light control 21 | - Basic color support from `.mtl` material files 22 | - Start animation with consistent auto-rotation 23 | - HUD overlay for additional stats 24 | - Minimal dependencies: C/C++, `ncurses`, math 25 | 26 | # Use Cases 27 | 28 |

29 | One Use Case 30 |

31 | 32 | * Preview 3D files instantly without launching heavy editors 33 | * Generate custom ASCII art for neofetch or terminal splash 34 | * Style CLI tools or games with ASCII-based intros and visuals 35 | * Animate coding workspace with rotating retro-style ASCII models 36 | * Create stylish character-based GIFs from terminal-rendered scenes 37 | 38 | # Usage 39 | 40 | ```bash 41 | objcurses [OPTIONS] 42 | ``` 43 | 44 | ## Options 45 | 46 | ``` 47 | -c, --color Enable colors support, optional theme {dark|light|transparent} 48 | -l, --light Disable light rotation 49 | -a, --animate Start with animated object, optional speed [default: 30.0 deg/s] 50 | -z, --zoom Provide initial zoom [default: 1.0 x] 51 | --flip Flip faces winding order 52 | --invert-x Flip geometry along X axis 53 | --invert-y Flip geometry along Y axis 54 | --invert-z Flip geometry along Z axis 55 | -h, --help Print help 56 | -v, --version Print version 57 | ``` 58 | 59 | Examples: 60 | 61 | ```bash 62 | objcurses file.obj # basic 63 | objcurses -c file.obj # enable colors 64 | objcurses -c transparent file.obj # set transparent color theme 65 | objcurses -c -a -z 1.5 file.obj # start animation with zoom 1.5 x 66 | objcurses -c -a 10 file.obj # start animation with speed 10.0 deg/s 67 | objcurses -c --invert-z file.obj # flip z axis if blender model 68 | ``` 69 | 70 | ## Controls 71 | 72 | Supports arrow keys, WASD, and Vim-style navigation: 73 | 74 | ``` 75 | ←, h, a Rotate left 76 | →, l, d Rotate right 77 | ↑, k, w Rotate up 78 | ↓, j, s Rotate down 79 | +, i Zoom in 80 | -, o Zoom out 81 | Tab Toggle HUD 82 | q Quit 83 | ``` 84 | 85 | # Installation 86 | 87 | Latest release available [here](https://github.com/admtrv/objcurses/releases). Replace `` with the actual release version, e.g. `1.2.3`. 88 | 89 | ## Manual (build from source) 90 | 91 | To manually compile and install `objcurses`, follow these steps: 92 | 93 | ### Install Dependencies 94 | 95 | Make sure you have CMake and a C++ compiler installed: 96 | 97 | ```bash 98 | sudo apt update 99 | sudo apt install cmake g++ libncurses6 libtinfo6 -y 100 | ``` 101 | 102 | ### Clone the Repository 103 | 104 | ```bash 105 | git clone https://github.com/admtrv/objcurses 106 | cd objcurses 107 | ``` 108 | 109 | ### Compile the Program 110 | 111 | ```bash 112 | mkdir cmake-build-release 113 | cd cmake-build-release 114 | cmake .. 115 | make 116 | ``` 117 | 118 | ### Install for Global Use (optional) 119 | 120 | ```bash 121 | sudo make install 122 | ``` 123 | 124 | --- 125 | 126 | ## From `.tar.gz` 127 | 128 | To install `objcurses` from the binary archive: 129 | 130 | ```bash 131 | tar -xzvf objcurses--linux.tar.gz 132 | cd objcurses--linux 133 | sudo mv objcurses /usr/local/bin/ 134 | sudo chmod +x /usr/local/bin/objcurses 135 | ``` 136 | 137 | --- 138 | 139 | ## From `.deb` 140 | 141 | For Debian-based distributions (Ubuntu, Mint, etc.), use: 142 | 143 | ```bash 144 | sudo dpkg -i objcurses--linux.deb 145 | ``` 146 | 147 | To uninstall: 148 | 149 | ```bash 150 | sudo dpkg -r objcurses 151 | ``` 152 | 153 | --- 154 | 155 | ## Verify Installation 156 | 157 | ```bash 158 | which objcurses 159 | objcurses --help 160 | ``` 161 | 162 | You should now be able to use `objcurses` from anywhere in your terminal. 163 | 164 | # References 165 | 166 | ## Inspirations 167 | 168 | * [Codeology](http://codeology.kunstu.com/) 169 | The seed of an idea. Codeology visualizes GitHub repositories as abstract 3D shapes made from symbols. This inspired me to create an ASCII-based 3D renderer from scratch. 170 | 171 | * [Donut math (a1k0n)](https://www.a1k0n.net/2011/07/20/donut-math.html) 172 | Cool article that breaks down the logic of the classic `donut.c` - a rotating ASCII torus in terminal using C. A great example of terminal 3D rendering and a key resource for understanding core rendering math. 173 | 174 | * [3D ASCII Viewer (autopawn)](https://github.com/autopawn/3d-ascii-viewer) 175 | Viewer of 3D models in ASCII, written in C. I treated it as a logical predecessor to my project - it helped me explore how more complex rendering math could work. 176 | 177 | ## Resources 178 | 179 | * [Data Types (OpenGL Documentation)](https://www.khronos.org/opengl/wiki/Data_Type_%28GLSL%29) 180 | Used to understand standard OpenGL types like `vec3`, etc. 181 | 182 | * [Polygon triangulation (Wikipedia)](https://en.wikipedia.org/wiki/Polygon_triangulation) 183 | For correctly converting complex polygon shapes into triangles for rendering. 184 | 185 | * [OBJ Parsing (Stack Overflow)](https://stackoverflow.com/questions/52824956/how-can-i-parse-a-simple-obj-file-into-triangles) 186 | Clarified parsing of `.obj` files and preparing vertex data. 187 | 188 | ## Sample Models 189 | 190 | All files are located in `/resources/objects/`. 191 | 192 | * [Fox Model (PixelMannen)](https://opengameart.org/content/fox-and-shiba) was used throughout development for testing `.obj` and `.mtl` parsing and rendering. 193 | 194 |

195 | 196 |

197 | 198 | * [Low Poly Tree (kiprus)](https://free3d.com/3d-model/low_poly_tree-816203.html) played a key role in identifying a flaw in the triangulation algorithm, as it contains complex non-convex polygons that exposed edge cases in ear clipping algorithm. 199 | 200 |

201 | 202 |

203 | 204 | * [Linux Mascot (Vido89)](https://blendswap.com/blend/23774) model help in fixing triangulation logic by triggering false degenerate cases due to its irregular normals and detailed geometry. 205 | 206 |

207 | 208 |

209 | 210 | * [PlayStation Logo (Jay6T4)](https://www.models-resource.com/playstation/systembios/model/33332/) revealed a bug in the projection-to-viewport logic and showed the need for Z-axis inversion. This led to implementing axis inversion options to handle incorrectly exported Blender models. Also interesting to see live after this [publication](https://www.reddit.com/r/Damnthatsinteresting/comments/1kkbruu/the_original_playstation_logo_is_a_fully_3d_model/). 211 | 212 |

213 | 214 |

215 | -------------------------------------------------------------------------------- /config.h: -------------------------------------------------------------------------------- 1 | /* 2 | * config.h 3 | */ 4 | 5 | #pragma once 6 | 7 | // cli draw 8 | inline constexpr char CHARS_LUM[] = " .:-=+*#%@"; 9 | inline constexpr float CHAR_ASPECT_RATIO = 2.0f; 10 | 11 | // view 12 | inline constexpr float ANGLE_STEP = 5.0f; 13 | inline constexpr float ZOOM_START = 1.0f; 14 | inline constexpr float ZOOM_STEP = 0.1f; 15 | inline constexpr float ZOOM_MIN = 0.10f; 16 | inline constexpr float ZOOM_MAX = 5.00f; 17 | 18 | // animation 19 | inline constexpr float FRAME_DURATION = 1.0f / 60.0f; // 60 fps 20 | inline constexpr float ANIMATION_STEP = 30.0f; 21 | -------------------------------------------------------------------------------- /entities/geometry/object.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * object.cpp 3 | */ 4 | 5 | #include "object.h" 6 | 7 | // helper functions 8 | 9 | // from obj index to vector index 10 | static int relative_index(const int idx, int total_vertices) 11 | { 12 | if (idx == 0 || idx < -total_vertices || idx > total_vertices) 13 | { 14 | std::cerr << "warning: invalid vertex index " << idx << std::endl; 15 | return -1; 16 | } 17 | 18 | return idx < 0 ? total_vertices + idx : idx - 1; 19 | } 20 | 21 | // clean string 22 | static void strip_line(std::string &line) 23 | { 24 | std::erase_if(line, [](const char c) { return c == '\r' || c == '\n'; }); 25 | std::ranges::replace(line, '\t', ' '); 26 | } 27 | 28 | // check open file 29 | static std::optional open_file(const std::string &filename) 30 | { 31 | std::ifstream in(filename, std::ios::in | std::ios::binary); 32 | if (!in.is_open()) 33 | { 34 | std::cerr << "error: can't open file " << filename << std::endl; 35 | return std::nullopt; 36 | } 37 | 38 | return in; 39 | } 40 | 41 | // parse functions 42 | 43 | bool Object::validate() const 44 | { 45 | if (vertices.empty() || faces.empty()) 46 | { 47 | std::cerr << "error: invalid object" << std::endl; 48 | return false; 49 | } 50 | 51 | size_t n = vertices.size(); 52 | for (const auto &f : faces) 53 | { 54 | for (auto idx : f.indices) 55 | { 56 | if (idx >= n) 57 | { 58 | std::cerr << "error: invalid object" << std::endl; 59 | return false; 60 | } 61 | } 62 | } 63 | 64 | return true; 65 | } 66 | 67 | // parse v x y z 68 | bool Object::parse_vertex(const std::string &line) 69 | { 70 | std::stringstream ss(line); 71 | 72 | float x, y, z; 73 | if (!(ss >> x >> y >> z)) 74 | { 75 | std::cerr << "warning: invalid vertex format" << std::endl; 76 | return false; 77 | } 78 | 79 | vertices.emplace_back(x, y, z); 80 | return true; 81 | } 82 | 83 | // parse f 84 | bool Object::parse_face(const std::string &line, std::optional current_material) 85 | { 86 | std::stringstream ss(line); 87 | std::vector local_indices; 88 | 89 | std::string token; 90 | while (ss >> token) 91 | { 92 | if (const auto slash_pos = token.find('/'); slash_pos != std::string::npos) 93 | { 94 | token.erase(slash_pos); // keep only first index 95 | } 96 | 97 | auto maybe_idx = safe_stoi(token); 98 | if (!maybe_idx) 99 | { 100 | std::cerr << "warning: invalid face token " << token << std::endl; 101 | return false; 102 | } 103 | 104 | int ridx = relative_index(*maybe_idx, static_cast(vertices.size())); 105 | if (ridx < 0 || static_cast(ridx) >= vertices.size()) 106 | { 107 | std::cerr << "warning: vertex index " << *maybe_idx << " out of range" << std::endl; 108 | return false; 109 | } 110 | local_indices.push_back(static_cast(ridx)); 111 | } 112 | 113 | if (local_indices.size() < 3) 114 | { 115 | std::cerr << "warning: face contains less than 3 indexes" << std::endl; 116 | return false; 117 | } 118 | 119 | if (local_indices.size() == 3) 120 | { 121 | faces.emplace_back(local_indices[0], local_indices[1], local_indices[2], current_material); 122 | return true; 123 | } 124 | 125 | // triangularization 126 | std::vector polygon; 127 | polygon.reserve(local_indices.size()); 128 | 129 | for (const auto idx : local_indices) 130 | { 131 | polygon.push_back(vertices[idx]); 132 | } 133 | 134 | const auto result = triangularize(polygon); 135 | if (!result.has_value()) 136 | { 137 | std::cerr << "warning: triangularize failed" << std::endl; 138 | return false; 139 | } 140 | 141 | // adding faces 142 | const auto &triangle_indices = result.value(); 143 | for (size_t i = 0; i < triangle_indices.size(); i += 3) 144 | { 145 | unsigned int i1 = local_indices[ triangle_indices[i] ]; 146 | unsigned int i2 = local_indices[ triangle_indices[i+1] ]; 147 | unsigned int i3 = local_indices[ triangle_indices[i+2] ]; 148 | faces.emplace_back(i1, i2, i3, current_material); 149 | } 150 | 151 | return true; 152 | } 153 | 154 | // parse mtllib 155 | bool Object::parse_mtl_file(const std::string &line, const std::string &obj_filename) 156 | { 157 | std::stringstream ss(line); 158 | 159 | std::string mtl_filename; 160 | ss >> mtl_filename; 161 | if (mtl_filename.empty()) 162 | { 163 | std::cerr << "error: can't parse mtl filename" << std::endl; 164 | return false; 165 | } 166 | 167 | const auto parent = std::filesystem::path(obj_filename).parent_path(); 168 | const auto full_mtl_filename = parent / mtl_filename; 169 | load_materials(full_mtl_filename.string()); 170 | return true; 171 | } 172 | 173 | // parse usemtl 174 | std::optional Object::parse_material(const std::string &line) const 175 | { 176 | std::stringstream ss(line); 177 | 178 | std::string material_name; 179 | ss >> material_name; 180 | 181 | return find_material(material_name); 182 | } 183 | 184 | // parse newmtl 185 | bool Object::parse_current_material(const std::string &line, std::string ¤t_name, Vec3 ¤t_diffuse, bool &have_active_material) 186 | { 187 | if (have_active_material) 188 | { 189 | materials.emplace_back(current_name, current_diffuse); 190 | } 191 | 192 | if (std::stringstream ss(line); !(ss >> current_name)) 193 | { 194 | std::cerr << "error: can't parse material name" << std::endl; 195 | return false; 196 | }; 197 | current_diffuse = Vec3(1.0f, 1.0f, 1.0f); 198 | have_active_material = true; 199 | return true; 200 | } 201 | 202 | // parse kd 203 | bool Object::parse_diffuse_color(const std::string &line, Vec3 ¤t_diffuse) 204 | { 205 | std::stringstream ss(line); 206 | 207 | float r, g, b; 208 | if (!(ss >> r >> g >> b)) 209 | { 210 | std::cerr << "error: can't parse diffuse colors" << std::endl; 211 | return false; 212 | } 213 | 214 | current_diffuse = Vec3(r, g, b); 215 | return true; 216 | } 217 | 218 | // methods 219 | bool Object::load(const std::string &obj_filename, bool color_support) 220 | { 221 | auto file = open_file(obj_filename); 222 | if (!file) 223 | { 224 | return false; 225 | } 226 | 227 | std::ifstream in = std::move(*file); 228 | 229 | std::optional current_material = std::nullopt; 230 | std::string line; 231 | 232 | while (std::getline(in, line)) 233 | { 234 | strip_line(line); 235 | 236 | if (line.empty() || line[0] == '#') // comment 237 | { 238 | continue; 239 | } 240 | 241 | std::stringstream ss(line); 242 | std::string cmd; 243 | ss >> cmd; 244 | 245 | std::string arguments = line.substr(cmd.size()); 246 | if (!arguments.empty() && arguments[0] == ' ') 247 | { 248 | arguments.erase(0, 1); 249 | } 250 | 251 | bool ok = true; 252 | 253 | if (cmd == "v") // vertex 254 | { 255 | ok = parse_vertex(arguments); 256 | } 257 | else if (cmd == "f") // face 258 | { 259 | ok = parse_face(arguments, current_material); 260 | } 261 | else if (color_support && cmd == "mtllib") // material file 262 | { 263 | ok = parse_mtl_file(arguments, obj_filename); 264 | } 265 | else if (color_support && cmd == "usemtl") // material 266 | { 267 | current_material = parse_material(arguments); 268 | 269 | if (!current_material) 270 | { 271 | std::cerr << "warning: unknown material " << arguments << std::endl; 272 | } 273 | } 274 | // ignoring anything else 275 | 276 | if (!ok) 277 | { 278 | return false; 279 | } 280 | } 281 | 282 | in.close(); 283 | return validate(); 284 | } 285 | 286 | bool Object::load_materials(const std::string &mtl_filename) 287 | { 288 | auto file = open_file(mtl_filename); 289 | if (!file.has_value()) 290 | { 291 | return false; 292 | } 293 | 294 | std::ifstream in = std::move(*file); 295 | 296 | std::string current_name; 297 | Vec3 current_diffuse(1.0f, 1.0f, 1.0f); 298 | bool have_active_material = false; 299 | std::string line; 300 | 301 | while (std::getline(in, line)) 302 | { 303 | strip_line(line); 304 | 305 | if (line.empty() || line[0] == '#') // comment 306 | continue; 307 | 308 | std::stringstream ss(line); 309 | std::string cmd; 310 | ss >> cmd; 311 | 312 | std::string arguments = line.substr(cmd.size()); 313 | if (!arguments.empty() && arguments[0] == ' ') 314 | { 315 | arguments.erase(0, 1); 316 | } 317 | 318 | if (cmd == "newmtl") // current material 319 | { 320 | parse_current_material(arguments, current_name, current_diffuse, have_active_material); 321 | } 322 | else if (cmd == "Kd") // diffuse color 323 | { 324 | parse_diffuse_color(arguments, current_diffuse); 325 | } 326 | } 327 | 328 | if (have_active_material) 329 | { 330 | materials.emplace_back(current_name, current_diffuse); 331 | } 332 | 333 | return true; 334 | } 335 | 336 | // find material by index 337 | std::optional Object::find_material(const std::string &material_name) const 338 | { 339 | const auto it = std::ranges::find_if(materials, [&material_name](const Material &m){ return m.material_name == material_name; }); 340 | return (it != materials.end()) ? std::make_optional(std::distance(materials.begin(), it)) : std::nullopt; 341 | } 342 | 343 | void Object::scale(float factor) 344 | { 345 | for (auto &v : vertices) 346 | { 347 | v *= factor; 348 | } 349 | } 350 | 351 | // normalize verts of object 352 | void Object::normalize() 353 | { 354 | if (vertices.empty()) 355 | { 356 | return; 357 | } 358 | 359 | Vec3 vmin = vertices[0]; 360 | Vec3 vmax = vertices[0]; 361 | 362 | for (const auto &v : vertices) 363 | { 364 | vmin.x = std::min(vmin.x, v.x); 365 | vmin.y = std::min(vmin.y, v.y); 366 | vmin.z = std::min(vmin.z, v.z); 367 | 368 | vmax.x = std::max(vmax.x, v.x); 369 | vmax.y = std::max(vmax.y, v.y); 370 | vmax.z = std::max(vmax.z, v.z); 371 | } 372 | 373 | const Vec3 center = (vmin + vmax) * 0.5f; 374 | const float scale = 1.0f / std::max({ 375 | vmax.x - vmin.x, 376 | vmax.y - vmin.y, 377 | vmax.z - vmin.z, 378 | 1e-6f 379 | }); 380 | 381 | for (auto &v : vertices) 382 | { 383 | v = (v - center) * scale; 384 | } 385 | } 386 | 387 | void Object::flip_faces() 388 | { 389 | for (auto &f : faces) 390 | { 391 | std::swap(f.indices[1], f.indices[2]); 392 | } 393 | } 394 | 395 | void Object::invert_x() 396 | { 397 | for (auto &v : vertices) 398 | { 399 | v.x = -v.x; 400 | } 401 | 402 | flip_faces(); 403 | } 404 | 405 | void Object::invert_y() 406 | { 407 | for (auto &v : vertices) 408 | { 409 | v.y = -v.y; 410 | } 411 | 412 | flip_faces(); 413 | } 414 | 415 | 416 | void Object::invert_z() 417 | { 418 | for (auto &v : vertices) 419 | { 420 | v.z = -v.z; 421 | } 422 | 423 | flip_faces(); 424 | } 425 | -------------------------------------------------------------------------------- /entities/geometry/object.h: -------------------------------------------------------------------------------- 1 | /* 2 | * object.h 3 | */ 4 | 5 | #pragma once 6 | 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include 14 | #include 15 | #include 16 | #include 17 | #include 18 | 19 | #include "utils/algorithms.h" 20 | #include "utils/tools.h" 21 | 22 | // triangular face 23 | class Face { 24 | public: 25 | std::array indices; // indices of vertices 26 | std::optional material; // index of material 27 | 28 | Face(const unsigned int idx1, const unsigned int idx2, const unsigned int idx3, const std::optional mat = std::nullopt) : indices{idx1, idx2, idx3}, material(mat) {} 29 | }; 30 | 31 | // material properties 32 | class Material { 33 | public: 34 | std::string material_name; // material name 35 | Vec3 diffuse; // diffuse color (Kd) - red, green, blue components 36 | 37 | Material(const std::string &name, const Vec3 &color) : material_name(name), diffuse(color) {} 38 | }; 39 | 40 | // object (3d model) 41 | class Object { 42 | public: 43 | Object() = default; 44 | 45 | std::vector vertices; 46 | std::vector faces; 47 | std::vector materials; 48 | 49 | // load obj file with optional material mtl support 50 | bool load(const std::string &obj_filename, bool color_support = false); 51 | 52 | 53 | void normalize(); // normalize object 54 | void scale(float factor); // scale object 55 | void flip_faces(); // flip faces winding order 56 | 57 | void invert_x(); // invert axes 58 | void invert_y(); 59 | void invert_z(); 60 | 61 | private: 62 | // material related methods 63 | bool load_materials(const std::string &mtl_filename); 64 | std::optional find_material(const std::string &material_name) const; 65 | 66 | // composite methods of parser 67 | bool parse_vertex(const std::string &line); 68 | bool parse_face(const std::string &line, std::optional current_material); 69 | bool parse_mtl_file(const std::string &line, const std::string &obj_filename); 70 | std::optional parse_material(const std::string &line) const; 71 | bool parse_current_material(const std::string &line, std::string ¤t_name, Vec3 ¤t_diffuse, bool &have_active_material); 72 | static bool parse_diffuse_color(const std::string &line, Vec3 ¤t_diffuse); 73 | 74 | // validation of object after parsing 75 | bool validate() const; 76 | 77 | }; 78 | -------------------------------------------------------------------------------- /entities/rendering/buffer.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * buffer.cpp 3 | */ 4 | 5 | #include "buffer.h" 6 | 7 | #include 8 | 9 | // Projection methods 10 | 11 | Projection Projection::sort_x() const 12 | { 13 | std::array arr = {p1, p2, p3}; 14 | 15 | std::ranges::sort(arr, [](const Vec3 &a, const Vec3 &b) { return a.x < b.x; }); 16 | 17 | return {arr[0], arr[1], arr[2], color}; 18 | } 19 | 20 | float Projection::limit_y1(const float x) const 21 | { 22 | if (x <= p1.x) return p1.y; 23 | if (x >= p3.x) return p3.y; 24 | 25 | if (x <= p2.x) 26 | { 27 | const float denominator = p2.x - p1.x; 28 | 29 | if (std::fabs(denominator) < 1e-7f) 30 | return p1.y; 31 | 32 | const float t = (x - p1.x) / denominator; 33 | return lerp(p1.y, p2.y, t); 34 | } 35 | else 36 | { 37 | const float denominator = p3.x - p2.x; 38 | 39 | if (std::fabs(denominator) < 1e-7f) 40 | return p2.y; 41 | 42 | const float t = (x - p2.x) / denominator; 43 | return lerp(p2.y, p3.y, t); 44 | } 45 | } 46 | 47 | float Projection::limit_y2(const float x) const 48 | { 49 | if (x <= p1.x) 50 | return p1.y; 51 | if (x >= p3.x) 52 | return p3.y; 53 | 54 | const float denominator = p3.x - p1.x; 55 | 56 | if (std::fabs(denominator) < 1e-7f) 57 | return p1.y; 58 | 59 | const float t = (x - p1.x) / denominator; 60 | return lerp(p1.y, p3.y, t); 61 | } 62 | 63 | Vec3 Projection::normal() const 64 | { 65 | const Vec3 v1 = p2 - p1; 66 | const Vec3 v2 = p3 - p1; 67 | const Vec3 n = Vec3::cross(v1, v2); 68 | 69 | return n.normalize(); 70 | } 71 | 72 | // Buffer methods 73 | 74 | Buffer::Buffer(const unsigned int x, const unsigned int y, const float logical_x, const float logical_y) : x(x), y(y), logical_x(logical_x), logical_y(logical_y) 75 | { 76 | if (x == 0 || y == 0) 77 | { 78 | throw std::runtime_error("zero buffer size"); 79 | } 80 | 81 | dx = logical_x / static_cast(x); 82 | dy = logical_y / static_cast(y); 83 | 84 | pixels.resize(x * y); 85 | 86 | clear(); 87 | } 88 | 89 | void Buffer::clear() 90 | { 91 | for (auto &p : pixels) 92 | { 93 | p.z = std::numeric_limits::max(); 94 | p.c = ' '; 95 | p.material = std::nullopt; 96 | } 97 | } 98 | 99 | int Buffer::index_x(const float real_x) const 100 | { 101 | int index = static_cast(real_x / dx); 102 | index = clamp(index, 0, static_cast(x) - 1); 103 | 104 | return index; 105 | } 106 | 107 | int Buffer::index_y(const float real_y) const 108 | { 109 | int iy = static_cast(real_y / dy); 110 | iy = clamp(iy, 0, static_cast(y) - 1); 111 | 112 | return iy; 113 | } 114 | 115 | float Buffer::depth(const Projection &projection, const Vec3 &normal, const int pixel_x, const int pixel_y) const 116 | { 117 | const float center_x = (static_cast(pixel_x) + 0.5f) * dx; 118 | const float center_y = (static_cast(pixel_y) + 0.5f) * dy; 119 | 120 | if (std::fabs(normal.z) < 1e-7f) 121 | { 122 | return projection.p1.z; 123 | } 124 | 125 | const float d_z = normal.x * (center_x - projection.p1.x) + normal.y * (center_y - projection.p1.y); 126 | const float z = projection.p1.z - d_z / normal.z; 127 | 128 | return z; 129 | } 130 | 131 | void Buffer::draw_projection(const Projection &projection, const char c, int material) 132 | { 133 | const Projection triangle = projection.sort_x(); 134 | 135 | const float x_i = triangle.p1.x + dx * 0.5f; 136 | const float x_f = triangle.p3.x - dx * 0.5f; 137 | if (x_f < 0.f || x_i > logical_x) 138 | return; 139 | 140 | const int x_start = index_x(x_i); 141 | const int x_end = index_x(x_f); 142 | 143 | const Vec3 normal = triangle.normal(); 144 | 145 | for (int pixel_x = x_start; pixel_x <= x_end; pixel_x++) 146 | { 147 | const float rx = (static_cast(pixel_x) + 0.5f) * dx; 148 | 149 | float y1 = triangle.limit_y1(rx); 150 | float y2 = triangle.limit_y2(rx); 151 | 152 | const float y_min = std::min(y1, y2); 153 | const float y_max = std::max(y1, y2); 154 | 155 | if (y_max < 0.f || y_min > logical_y) 156 | continue; 157 | 158 | const float y_start_val = y_min + dy * 0.5f; 159 | const float y_end_val = y_max - dy * 0.5f; 160 | 161 | const int y_start = index_y(y_start_val); 162 | const int y_end = index_y(y_end_val); 163 | 164 | for (int pixel_y = y_start; pixel_y <= y_end; pixel_y++) 165 | { 166 | Pixel &pixel = pixels[pixel_y * x + pixel_x]; 167 | 168 | if (const float z = depth(triangle, normal, pixel_x, pixel_y); z < pixel.z) 169 | { 170 | pixel.z = z; 171 | pixel.c = c; 172 | pixel.material = material; 173 | } 174 | } 175 | } 176 | } 177 | 178 | void Buffer::printw() const 179 | { 180 | for (unsigned int row = 0; row < y; row++) 181 | { 182 | ::move(static_cast(row), 0); 183 | int prev_color = -1; 184 | 185 | for (unsigned int col = 0; col < x; col++) 186 | { 187 | const Pixel &pixel = pixels[row * x + col]; 188 | 189 | if (const int color = pixel.material ? (pixel.material.value() + 1) : 0; color != prev_color) 190 | { 191 | if (prev_color > 0) 192 | { 193 | attroff(COLOR_PAIR(prev_color)); 194 | } 195 | 196 | if (color > 0) 197 | { 198 | attron(COLOR_PAIR(color)); 199 | } 200 | 201 | prev_color = color; 202 | } 203 | 204 | ::printw("%c", pixel.c); 205 | } 206 | 207 | if (prev_color > 0) 208 | { 209 | attroff(COLOR_PAIR(prev_color)); 210 | } 211 | } 212 | } -------------------------------------------------------------------------------- /entities/rendering/buffer.h: -------------------------------------------------------------------------------- 1 | /* 2 | * buffer.h 3 | */ 4 | 5 | #pragma once 6 | 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include 14 | 15 | #include "utils/mathematics.h" 16 | #include "utils/algorithms.h" 17 | 18 | // screen pixel 19 | class Pixel { 20 | public: 21 | float z; // depth (z-coordinate) 22 | char c; // character 23 | std::optional material; // material index 24 | 25 | Pixel() : z(std::numeric_limits::max()), c(' '), material(std::nullopt) {} 26 | Pixel(const float z, const char c, const std::optional material = std::nullopt) : z(z), c(c), material(material) {} 27 | }; 28 | 29 | // projection of triangle onto screen 30 | class Projection { 31 | public: 32 | Vec3 p1, p2, p3; // vertices of triangle 33 | char color; // color of triangle 34 | 35 | Projection(const Vec3 &p1, const Vec3 &p2, const Vec3 &p3, const char color) : p1(p1), p2(p2), p3(p3), color(color) {} 36 | 37 | [[nodiscard]] Projection sort_x() const; 38 | [[nodiscard]] float limit_y1(float x) const; 39 | [[nodiscard]] float limit_y2(float x) const; 40 | [[nodiscard]] Vec3 normal() const; 41 | }; 42 | 43 | // screen buffer 44 | class Buffer { 45 | public: 46 | unsigned int x, y; // character buffer size 47 | float logical_x, logical_y; // logical buffer size 48 | float dx, dy; // logical character size 49 | std::vector pixels; // pixel Buffer 50 | 51 | Buffer(unsigned int x, unsigned int y, float logical_x, float logical_y); 52 | 53 | void clear(); 54 | void draw_projection(const Projection &projection, char c, int material); 55 | void printw() const; 56 | 57 | private: 58 | [[nodiscard]] int index_x(float real_x) const; 59 | [[nodiscard]] int index_y(float real_y) const; 60 | [[nodiscard]] float depth(const Projection &projection, const Vec3 &normal, int pixel_x, int pixel_y) const; 61 | 62 | }; 63 | -------------------------------------------------------------------------------- /entities/rendering/renderer.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * renderer.cpp 3 | */ 4 | 5 | #include "renderer.h" 6 | 7 | char Renderer::luminance_char(const Vec3 &normal, const Vec3 &light, const std::string &scale) 8 | { 9 | const float sim = (Vec3::cosine_similarity(normal, light) + 1.0f) * 0.5f; 10 | const int idx = std::clamp(static_cast(std::round(sim * static_cast(scale.size() - 1))), 0, static_cast(scale.size() - 1)); 11 | return scale[idx]; 12 | } 13 | 14 | void Renderer::render(Buffer &buf, const Object &obj, const Camera &cam, const Light &light, bool static_light, bool color_support) 15 | { 16 | const float az_cos = std::cos(cam.azimuth); 17 | const float az_sin = std::sin(cam.azimuth); 18 | const float al_cos = std::cos(cam.altitude); 19 | const float al_sin = std::sin(cam.altitude); 20 | 21 | // pre-computed rotations 22 | auto rot_y = [az_cos, az_sin](const Vec3 &v) { 23 | return Vec3::rotate_y(v, std::atan2(-az_sin, az_cos)); 24 | }; 25 | 26 | auto rot_x = [al_cos, al_sin](const Vec3 &v) { 27 | return Vec3::rotate_x(v, std::atan2(-al_sin, al_cos)); 28 | }; 29 | 30 | const float lx = buf.logical_x; 31 | const float ly = buf.logical_y; 32 | 33 | // first pass - rotate, project, collect bounds 34 | const size_t vcount = obj.vertices.size(); 35 | 36 | std::vector rverts(vcount); // rotated vertices 37 | std::vector sverts(vcount); // screen coords (without offset) 38 | 39 | float min_x = std::numeric_limits::max(); 40 | float max_x = -std::numeric_limits::max(); 41 | float min_y = std::numeric_limits::max(); 42 | float max_y = -std::numeric_limits::max(); 43 | 44 | for (size_t i = 0; i < vcount; i++) 45 | { 46 | const Vec3 rv = rot_x(rot_y(obj.vertices[i])); 47 | rverts[i] = rv; 48 | 49 | const Vec3 sv = Vec3::to_screen(rv, cam.zoom, lx, ly); 50 | sverts[i] = sv; 51 | 52 | min_x = std::min(min_x, sv.x); 53 | max_x = std::max(max_x, sv.x); 54 | min_y = std::min(min_y, sv.y); 55 | max_y = std::max(max_y, sv.y); 56 | } 57 | 58 | // offset that centers the bounding box in logical space 59 | const float off_x = 0.0f; 60 | const float off_y = (ly - (max_y - min_y)) * 0.5f - min_y; 61 | const Vec3 offset(off_x, off_y, 0.0f); 62 | 63 | // second pass - draw faces 64 | for (const auto &face : obj.faces) 65 | { 66 | const Vec3 &rv1 = rverts[face.indices[0]]; 67 | const Vec3 &rv2 = rverts[face.indices[1]]; 68 | const Vec3 &rv3 = rverts[face.indices[2]]; 69 | 70 | // back-face culling in camera space 71 | Vec3 normal_cam = Vec3::cross(rv2 - rv1, rv3 - rv1).normalize(); 72 | 73 | if (normal_cam.z >= 0.0f) 74 | { 75 | continue; 76 | } 77 | 78 | const Vec3 normal_view = -normal_cam; 79 | 80 | // screen coordinates with centering offset 81 | const Vec3 s1 = sverts[face.indices[0]] + offset; 82 | const Vec3 s2 = sverts[face.indices[1]] + offset; 83 | const Vec3 s3 = sverts[face.indices[2]] + offset; 84 | 85 | // shading 86 | const Vec3 n_light = static_light ? Vec3::cross(obj.vertices[face.indices[1]] - obj.vertices[face.indices[0]], obj.vertices[face.indices[2]] - obj.vertices[face.indices[0]]).normalize() : normal_view; 87 | const char lum = luminance_char(n_light, light.direction, CHARS_LUM); 88 | 89 | buf.draw_projection(Projection(s1, s2, s3, lum), lum, (color_support && face.material) ? *face.material : -1); 90 | } 91 | } -------------------------------------------------------------------------------- /entities/rendering/renderer.h: -------------------------------------------------------------------------------- 1 | /* 2 | * renderer.h 3 | */ 4 | 5 | #pragma once 6 | 7 | #include "buffer.h" 8 | #include "entities/geometry/object.h" 9 | #include "entities/view/camera.h" 10 | #include "entities/view/light.h" 11 | #include "utils/algorithms.h" 12 | #include "config.h" 13 | 14 | class Renderer { 15 | public: 16 | // renders object into buffer with given view parameters 17 | static void render(Buffer &buf, const Object &obj, const Camera &cam, const Light &light, bool static_light, bool color_support) ; 18 | 19 | private: 20 | // returns luminance character based on angle between normal and light 21 | static char luminance_char(const Vec3 &normal, const Vec3 &light, const std::string &scale = CHARS_LUM); 22 | }; 23 | -------------------------------------------------------------------------------- /entities/view/camera.h: -------------------------------------------------------------------------------- 1 | /* 2 | * camera.h 3 | */ 4 | 5 | #pragma once 6 | 7 | #include 8 | #include "utils/mathematics.h" 9 | #include "utils/algorithms.h" 10 | #include "config.h" 11 | 12 | class Camera { 13 | public: 14 | 15 | float azimuth; // rad 16 | float altitude; // rad 17 | float zoom; // 1.0 == unit cube 18 | 19 | // constructors 20 | Camera() : azimuth(0.0f), altitude(0.0f), zoom(std::clamp(1.0f, ZOOM_MIN, ZOOM_MAX)) {} 21 | explicit Camera(float zoom) : azimuth(0.0f), altitude(0.0f), zoom(std::clamp(zoom, ZOOM_MIN, ZOOM_MAX)) {} 22 | Camera(float azimuth, float altitude, float zoom) : 23 | azimuth(rad_norm(azimuth)), 24 | altitude(std::clamp(altitude, -PI / 2, PI / 2)), 25 | zoom(std::clamp(zoom, ZOOM_MIN, ZOOM_MAX)) {} 26 | 27 | void rotate_left(float degree = ANGLE_STEP) 28 | { 29 | azimuth = rad_norm(azimuth + deg2rad(degree)); 30 | } 31 | void rotate_right(float degree = ANGLE_STEP) 32 | { 33 | azimuth = rad_norm(azimuth - deg2rad(degree)); 34 | } 35 | void rotate_up(float degree = ANGLE_STEP) 36 | { 37 | altitude = std::min(altitude + deg2rad(degree), PI / 2); 38 | } 39 | void rotate_down(float degree = ANGLE_STEP) 40 | { 41 | altitude = std::max(altitude - deg2rad(degree), -PI / 2); 42 | } 43 | 44 | void zoom_in(float step = ZOOM_STEP) 45 | { 46 | zoom = std::min(zoom + step, ZOOM_MAX); 47 | } 48 | void zoom_out(float step = ZOOM_STEP) 49 | { 50 | zoom = std::max(zoom - step, ZOOM_MIN); 51 | } 52 | }; 53 | -------------------------------------------------------------------------------- /entities/view/light.h: -------------------------------------------------------------------------------- 1 | /* 2 | * light.h 3 | */ 4 | 5 | #pragma once 6 | 7 | #include "utils/mathematics.h" 8 | 9 | class Light { 10 | public: 11 | Vec3 direction; 12 | 13 | // constructors 14 | Light() : direction(Vec3(0.75f, -1.0f, -0.5f).normalize()) {} 15 | explicit Light(const Vec3 &dir) : direction(dir.normalize()) {} 16 | 17 | }; 18 | -------------------------------------------------------------------------------- /main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * main.cpp 3 | */ 4 | 5 | #include 6 | 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include 14 | #include 15 | #include 16 | 17 | #include "entities/geometry/object.h" 18 | #include "entities/rendering/buffer.h" 19 | #include "entities/rendering/renderer.h" 20 | #include "utils/tools.h" 21 | #include "config.h" 22 | #include "version.h" 23 | 24 | #ifdef ASAN_OPTIONS 25 | extern "C" const char *__asan_default_options() { 26 | return ASAN_OPTIONS; 27 | } 28 | #endif 29 | 30 | using SteadyClock = std::chrono::steady_clock; 31 | const auto t0 = SteadyClock::now(); 32 | 33 | // ncurses 34 | 35 | enum class Theme { 36 | Dark = 1, 37 | Light = 2, 38 | Transparent = 3 39 | }; 40 | 41 | static int g_hud_pair = 0; // hud color pair 42 | 43 | void init_ncurses() 44 | { 45 | initscr(); // start ncurses mode 46 | noecho(); // disable echoing of typed characters 47 | curs_set(0); // hide the cursor 48 | keypad(stdscr, true); // enable special keys (arrows, etc.) 49 | timeout(1); // make getch() non-blocking 50 | } 51 | 52 | void init_colors(const std::vector &materials, Theme theme) 53 | { 54 | if (!has_colors() || !can_change_color()) 55 | return; 56 | 57 | start_color(); 58 | 59 | const short BG_DEFAULT = -1; 60 | 61 | short bg; 62 | short hud; 63 | 64 | switch (theme) 65 | { 66 | case Theme::Dark: 67 | bg = COLOR_BLACK; 68 | hud = COLOR_WHITE; 69 | break; 70 | case Theme::Light: 71 | bg = COLOR_WHITE; 72 | hud = COLOR_BLACK; 73 | break; 74 | case Theme::Transparent: 75 | bg = BG_DEFAULT; 76 | hud = COLOR_WHITE; 77 | break; 78 | } 79 | 80 | if (bg == BG_DEFAULT) 81 | use_default_colors(); 82 | 83 | size_t limit = std::min(materials.size(), static_cast(COLOR_PAIRS - 2)); 84 | 85 | for (size_t i = 0; i < limit; i++) 86 | { 87 | int pair = static_cast(i) + 1; 88 | 89 | const auto &d = materials[i].diffuse; // 0–1 90 | if (can_change_color()) 91 | init_color(pair, 92 | static_cast(std::clamp(d.x, 0.0f, 1.0f) * 1000.0f), 93 | static_cast(std::clamp(d.y, 0.0f, 1.0f) * 1000.0f), 94 | static_cast(std::clamp(d.z, 0.0f, 1.0f) * 1000.0f)); 95 | 96 | init_pair(pair, pair, bg); 97 | } 98 | 99 | g_hud_pair = static_cast(limit) + 1; 100 | 101 | if (g_hud_pair < COLOR_PAIRS) 102 | init_pair(g_hud_pair, hud, bg); 103 | 104 | bkgd(' ' | COLOR_PAIR(g_hud_pair)); 105 | } 106 | 107 | // cli 108 | 109 | static void print_help() 110 | { 111 | std::cout << 112 | "Usage: " << APP_NAME << " [OPTIONS] \n" 113 | "\n" 114 | "Options:\n" 115 | " -c, --color Enable colors support, optional theme {dark|light|transparent}\n" 116 | " -l, --light Disable light rotation\n" 117 | " -a, --animate Start with animated object, optional speed [default: " << std::fixed << std::setprecision(1) << ANIMATION_STEP << std::defaultfloat << " deg/s]\n" 118 | " -z, --zoom Provide initial zoom [default: " << std::fixed << std::setprecision(1) << ZOOM_START << std::defaultfloat << " x]\n" 119 | " --flip Flip faces winding order\n" 120 | " --invert-x Flip geometry along X axis\n" 121 | " --invert-y Flip geometry along Y axis\n" 122 | " --invert-z Flip geometry along Z axis\n" 123 | " -h, --help Print help\n" 124 | " -v, --version Print version\n" 125 | "\n" 126 | "Controls:\n" 127 | " ←, h, a Rotate left\n" 128 | " →, l, d Rotate right\n" 129 | " ↑, k, w Rotate up\n" 130 | " ↓, j, s Rotate down\n" 131 | " +, i Zoom in\n" 132 | " -, o Zoom out\n" 133 | " Tab Toggle HUD\n" 134 | " q Quit\n"; 135 | } 136 | 137 | static void print_version() 138 | { 139 | std::cout << APP_NAME << " " << APP_VERSION << '\n'; 140 | } 141 | 142 | struct Args { 143 | std::filesystem::path input_file; 144 | 145 | bool color_support = false; // -c / --color 146 | Theme theme = Theme::Dark; 147 | 148 | bool static_light = false; // -l / --light 149 | bool flip_faces = false; // -f / --flip 150 | bool invert_x = false; // -x / --invert-x 151 | bool invert_y = false; // -y / --invert-y 152 | bool invert_z = false; // -z / --invert-z 153 | 154 | bool animate = false; // -a / --animate 155 | float speed = ANIMATION_STEP; // deg/s 156 | 157 | float zoom = ZOOM_START; // -z / --zoom 158 | }; 159 | 160 | static Args parse_args(int argc, char **argv) 161 | { 162 | Args a; 163 | for (int i = 1; i < argc; ++i) 164 | { 165 | const std::string_view arg{argv[i]}; 166 | 167 | // help 168 | if (arg == "-h" || arg == "--help") 169 | { 170 | print_help(); 171 | std::exit(0); 172 | } 173 | 174 | // version 175 | if (arg == "-v" || arg == "--version") 176 | { 177 | print_version(); 178 | std::exit(0); 179 | } 180 | 181 | // flags 182 | if (arg == "-c" || arg == "--color") 183 | { 184 | a.color_support = true; 185 | 186 | if (i + 1 < argc && argv[i + 1][0] != '-') 187 | { 188 | std::string_view next{argv[i + 1]}; 189 | if (next == "dark") 190 | { 191 | a.theme = Theme::Dark; 192 | ++i; 193 | } 194 | else if (next == "light") 195 | { 196 | a.theme = Theme::Light; 197 | ++i; 198 | } 199 | else if (next == "transparent") 200 | { 201 | a.theme = Theme::Transparent; 202 | ++i; 203 | } 204 | // else next - file name 205 | } 206 | } 207 | else if (arg == "-l" || arg == "--light") 208 | { 209 | a.static_light = true; 210 | } 211 | else if (arg == "-a" || arg == "--animate") 212 | { 213 | a.animate = true; 214 | 215 | if (i + 1 < argc && argv[i + 1][0] != '-') 216 | { 217 | if (auto val = safe_stof(argv[i + 1]); val) 218 | { 219 | a.speed = val.value(); 220 | ++i; 221 | } 222 | // else - file name 223 | } 224 | } 225 | else if (arg == "-z" || arg == "--zoom") 226 | { 227 | if (++i == argc) 228 | { 229 | std::cerr << "error: zoom needs value\n"; 230 | std::exit(1); 231 | } 232 | 233 | auto val = safe_stof(argv[i]); 234 | 235 | if (!val) 236 | { 237 | std::cerr << "error: invalid zoom value\n"; 238 | std::exit(1); 239 | } 240 | 241 | a.zoom = val.value(); 242 | } 243 | else if (arg == "--flip") 244 | { 245 | a.flip_faces = true; 246 | } 247 | else if (arg == "--invert-x") 248 | { 249 | a.invert_x = true; 250 | } 251 | else if (arg == "--invert-y") 252 | { 253 | a.invert_y = true; 254 | } 255 | else if (arg == "--invert-z") 256 | { 257 | a.invert_z = true; 258 | } 259 | else if (arg[0] != '-') 260 | { 261 | if (!a.input_file.empty()) 262 | { 263 | std::cerr << "error: more arguments than expected\n"; 264 | std::exit(1); 265 | } 266 | a.input_file = arg; 267 | } 268 | 269 | // unknown 270 | else 271 | { 272 | std::cerr << "unknown option: " << arg << '\n'; 273 | std::cerr << "type '--help' for usage\n"; 274 | std::exit(1); 275 | } 276 | } 277 | 278 | if (a.input_file.empty()) 279 | { 280 | std::cerr << "error: no input file\n"; 281 | std::cerr << "type '--help' for usage\n"; 282 | std::exit(1); 283 | } 284 | 285 | return a; 286 | } 287 | 288 | // helpers 289 | 290 | void render_hud(const Camera &cam, const float fps) 291 | { 292 | if (g_hud_pair) 293 | attron(COLOR_PAIR(g_hud_pair)); 294 | 295 | mvprintw(0, 0, "framerate %6d fps", static_cast(std::round(fps))); 296 | mvprintw(1, 0, "zoom %6.1f x", cam.zoom); 297 | mvprintw(2, 0, "azimuth %6.1f deg", clamp0(rad2deg(cam.azimuth))); 298 | mvprintw(3, 0, "altitude %6.1f deg", clamp0(rad2deg(cam.altitude))); 299 | 300 | if (g_hud_pair) 301 | attroff(COLOR_PAIR(g_hud_pair)); 302 | } 303 | 304 | void handle_control(const int ch, Camera &cam) 305 | { 306 | switch (ch) 307 | { 308 | // keys / vim / wasd 309 | case KEY_LEFT: case 'h': case 'H': case 'a' : case 'A': // left rotation 310 | cam.rotate_left(); 311 | break; 312 | case KEY_RIGHT: case 'l': case 'L': case 'd': case 'D': // right rotation 313 | cam.rotate_right(); 314 | break; 315 | case KEY_UP: case 'k': case 'K': case 'w': case 'W': // up rotation 316 | cam.rotate_up(); 317 | break; 318 | case KEY_DOWN: case 'j': case 'J': case 's': case 'S': // down rotation 319 | cam.rotate_down(); 320 | break; 321 | 322 | // +- / io 323 | case '+': case '=': case 'i': case 'I': // zoom in 324 | cam.zoom_in(); 325 | break; 326 | case '-': case 'o': case 'O': // zoom out 327 | cam.zoom_out(); 328 | break; 329 | default: 330 | break; 331 | } 332 | } 333 | 334 | // main 335 | int main(int argc, char **argv) 336 | { 337 | const Args args = parse_args(argc, argv); 338 | 339 | // load object 340 | Object obj; 341 | if (!obj.load(args.input_file.string(), args.color_support)) 342 | { 343 | return 1; 344 | } 345 | 346 | // normalize to unit cube 347 | obj.normalize(); 348 | 349 | // resize to make model >= 0.5 screen size 350 | obj.scale(3.0f); 351 | 352 | // flip faces winding order 353 | if (args.flip_faces) 354 | obj.flip_faces(); 355 | 356 | // invert along axes 357 | if (args.invert_x) 358 | obj.invert_x(); 359 | 360 | if (args.invert_y) 361 | obj.invert_y(); 362 | 363 | if (args.invert_z) 364 | obj.invert_z(); 365 | 366 | // init curses 367 | init_ncurses(); 368 | 369 | // init colors 370 | if (args.color_support) 371 | init_colors(obj.materials, args.theme); 372 | 373 | // buffer 374 | int rows; 375 | int cols; 376 | 377 | getmaxyx(stdscr, rows, cols); 378 | 379 | const float logical_y = 2.0f; 380 | const float logical_x = logical_y * static_cast(cols) / (static_cast(rows) * CHAR_ASPECT_RATIO); 381 | 382 | Buffer buf(static_cast(cols), static_cast(rows), logical_x, logical_y); 383 | 384 | // view 385 | Camera cam(args.zoom); // constructor with zoom 386 | Light light; // default 387 | bool hud = false; 388 | 389 | // animation 390 | bool rotate = args.animate; 391 | auto last = SteadyClock::now(); 392 | 393 | // optimizing drawing 394 | bool needs_redraw = true; 395 | 396 | // main render loop 397 | while (true) 398 | { 399 | auto now = SteadyClock::now(); 400 | float dt = std::chrono::duration(now - last).count(); // seconds since previous frame 401 | last = now; 402 | float fps = dt > 0.f ? 1.f / dt : 0.f; 403 | 404 | if (rotate) { 405 | cam.rotate_left(args.speed * dt); 406 | needs_redraw = true; 407 | } 408 | 409 | // handle key 410 | int ch = getch(); 411 | 412 | if (ch == KEY_RESIZE) 413 | { 414 | getmaxyx(stdscr, rows, cols); 415 | const float lx = logical_y * static_cast(cols) / (static_cast(rows) * CHAR_ASPECT_RATIO); 416 | buf = Buffer(static_cast(cols), static_cast(rows), lx, logical_y); 417 | needs_redraw = true; 418 | } 419 | else if (ch == 'q' || ch == 'Q') // exit 420 | { 421 | break; 422 | } 423 | else if (ch == '\t') // toggle hud 424 | { 425 | hud = !hud; 426 | needs_redraw = true; 427 | } 428 | else if (ch != ERR) 429 | { 430 | rotate = false; // stop animation on first movement 431 | handle_control(ch, cam); // handle camera control 432 | needs_redraw = true; 433 | } 434 | 435 | // redrawing 436 | if (needs_redraw) 437 | { 438 | // clear buffer 439 | buf.clear(); 440 | 441 | // render model 442 | Renderer::render(buf, obj, cam, light, args.static_light, args.color_support); 443 | 444 | move(0, 0); 445 | buf.printw(); 446 | 447 | // render hud 448 | if (hud) 449 | { 450 | render_hud(cam, fps); 451 | } 452 | 453 | // draw buffer 454 | refresh(); 455 | 456 | needs_redraw = false; 457 | } 458 | else if (hud) // update only hud 459 | { 460 | render_hud(cam, fps); 461 | refresh(); 462 | } 463 | 464 | // limiting fps 465 | auto frame_deadline = now + std::chrono::duration(FRAME_DURATION); 466 | std::this_thread::sleep_until(frame_deadline); 467 | } 468 | 469 | endwin(); 470 | return 0; 471 | } 472 | -------------------------------------------------------------------------------- /package.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | BIN_NAME="objcurses" 5 | BIN_PATH="cmake-build-release/$BIN_NAME" 6 | OUT_DIR="package" 7 | DEB_DIR="$OUT_DIR/${BIN_NAME}-deb" 8 | 9 | # check binary exists 10 | if [ ! -f "$BIN_PATH" ]; then 11 | echo "error: binary not found at $BIN_PATH" 12 | exit 1 13 | fi 14 | 15 | # extract version from --version output 16 | VERSION=$("$BIN_PATH" --version | grep -oE '[0-9]+\.[0-9]+\.[0-9]+') 17 | if [ -z "$VERSION" ]; then 18 | echo "error: could not extract version" 19 | exit 1 20 | fi 21 | 22 | echo "packaging $BIN_NAME version $VERSION..." 23 | 24 | # prepare output directory 25 | mkdir -p "$OUT_DIR" 26 | 27 | # prepare folder for tar.gz: package/objcurses--linux/objcurses 28 | TAR_DIR_NAME="${BIN_NAME}-${VERSION}-linux" 29 | TAR_DIR_PATH="$OUT_DIR/$TAR_DIR_NAME" 30 | mkdir -p "$TAR_DIR_PATH" 31 | cp "$BIN_PATH" "$TAR_DIR_PATH/$BIN_NAME" 32 | strip "$TAR_DIR_PATH/$BIN_NAME" 33 | 34 | # create tar.gz archive with versioned folder and plain binary inside 35 | tar -czf "$OUT_DIR/${TAR_DIR_NAME}.tar.gz" -C "$OUT_DIR" "$TAR_DIR_NAME" 36 | rm -rf "$TAR_DIR_PATH" 37 | 38 | # create .deb directory structure 39 | mkdir -p "$DEB_DIR/usr/bin" "$DEB_DIR/DEBIAN" 40 | cp "$BIN_PATH" "$DEB_DIR/usr/bin/$BIN_NAME" 41 | 42 | cat > "$DEB_DIR/DEBIAN/control" <= 2.27), libncurses6 (>= 6), libtinfo6 (>= 6), libstdc++6, libgcc1 49 | Maintainer: Anton Dmitriev 50 | Description: ncurses 3d object viewer 51 | It renders .obj models in real time using ASCII characters and a simple rendering pipeline. 52 | EOF 53 | 54 | # build .deb package 55 | dpkg-deb --build "$DEB_DIR" 56 | mv "${DEB_DIR}.deb" "$OUT_DIR/${BIN_NAME}-${VERSION}-linux.deb" 57 | rm -rf "$DEB_DIR" 58 | 59 | # final output 60 | echo "done, files created:" 61 | echo " - $OUT_DIR/${BIN_NAME}-${VERSION}-linux.tar.gz" 62 | echo " - $OUT_DIR/${BIN_NAME}-${VERSION}-linux.deb" 63 | -------------------------------------------------------------------------------- /resources/images/demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/admtrv/objcurses/0576e646c3ce149fb5a28e1d8370fac17c2da7dd/resources/images/demo.gif -------------------------------------------------------------------------------- /resources/images/fox-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/admtrv/objcurses/0576e646c3ce149fb5a28e1d8370fac17c2da7dd/resources/images/fox-1.png -------------------------------------------------------------------------------- /resources/images/fox-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/admtrv/objcurses/0576e646c3ce149fb5a28e1d8370fac17c2da7dd/resources/images/fox-2.png -------------------------------------------------------------------------------- /resources/images/linux-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/admtrv/objcurses/0576e646c3ce149fb5a28e1d8370fac17c2da7dd/resources/images/linux-1.png -------------------------------------------------------------------------------- /resources/images/linux-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/admtrv/objcurses/0576e646c3ce149fb5a28e1d8370fac17c2da7dd/resources/images/linux-2.png -------------------------------------------------------------------------------- /resources/images/pslogo-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/admtrv/objcurses/0576e646c3ce149fb5a28e1d8370fac17c2da7dd/resources/images/pslogo-1.png -------------------------------------------------------------------------------- /resources/images/pslogo-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/admtrv/objcurses/0576e646c3ce149fb5a28e1d8370fac17c2da7dd/resources/images/pslogo-2.png -------------------------------------------------------------------------------- /resources/images/tree-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/admtrv/objcurses/0576e646c3ce149fb5a28e1d8370fac17c2da7dd/resources/images/tree-1.png -------------------------------------------------------------------------------- /resources/images/tree-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/admtrv/objcurses/0576e646c3ce149fb5a28e1d8370fac17c2da7dd/resources/images/tree-2.png -------------------------------------------------------------------------------- /resources/images/usage.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/admtrv/objcurses/0576e646c3ce149fb5a28e1d8370fac17c2da7dd/resources/images/usage.gif -------------------------------------------------------------------------------- /resources/objects/.gitignore: -------------------------------------------------------------------------------- 1 | objcurses -------------------------------------------------------------------------------- /resources/objects/fox.mtl: -------------------------------------------------------------------------------- 1 | # Blender MTL File: 'None' 2 | # Material Count: 4 3 | 4 | newmtl Fox_BrownBlack_001 5 | Ns 225.000000 6 | Ka 1.000000 1.000000 1.000000 7 | Kd 0.069978 0.027417 0.004242 8 | Ks 0.500000 0.500000 0.500000 9 | Ke 0.000000 0.000000 0.000000 10 | Ni 1.000000 11 | d 1.000000 12 | illum 2 13 | 14 | newmtl Fox_Brown_001 15 | Ns 225.000000 16 | Ka 1.000000 1.000000 1.000000 17 | Kd 0.564712 0.194618 0.017642 18 | Ks 0.500000 0.500000 0.500000 19 | Ke 0.000000 0.000000 0.000000 20 | Ni 1.000000 21 | d 1.000000 22 | illum 2 23 | 24 | newmtl Fox_White_001 25 | Ns 225.000000 26 | Ka 1.000000 1.000000 1.000000 27 | Kd 0.896269 0.854993 0.799103 28 | Ks 0.500000 0.500000 0.500000 29 | Ke 0.000000 0.000000 0.000000 30 | Ni 1.000000 31 | d 1.000000 32 | illum 2 33 | 34 | newmtl Fox_nose_001 35 | Ns 225.000000 36 | Ka 1.000000 1.000000 1.000000 37 | Kd 0.014670 0.014670 0.014670 38 | Ks 0.500000 0.500000 0.500000 39 | Ke 0.000000 0.000000 0.000000 40 | Ni 1.000000 41 | d 1.000000 42 | illum 2 43 | -------------------------------------------------------------------------------- /resources/objects/fox.obj: -------------------------------------------------------------------------------- 1 | # HORIZONTAL ROTIERENDER FUCHS 2 | # www.blender.org 3 | mtllib fox.mtl 4 | o Cube_001_Cube.003 5 | v 0.068281 1.211081 -0.792773 6 | v -0.002711 1.228563 -0.880573 7 | v -0.007774 1.477286 -1.403494 8 | v 0.002966 1.258179 0.963047 9 | v 0.235599 1.286398 0.942474 10 | v 0.289787 1.801673 1.485482 11 | v 0.005550 1.784818 1.802263 12 | v 0.236124 1.837114 1.803306 13 | v 0.174736 1.805814 1.972321 14 | v 0.190135 1.985652 2.009221 15 | v 0.110020 2.031136 2.112843 16 | v 0.007055 1.926609 2.291308 17 | v 0.135337 1.811305 2.125912 18 | v 0.060182 1.893005 2.290872 19 | v 0.349816 2.015681 1.760592 20 | v 0.347972 1.958802 1.450320 21 | v 0.077709 1.230569 0.845843 22 | v 0.156987 0.934822 0.718448 23 | v 0.169094 2.407118 1.757284 24 | v 0.332760 2.277450 1.681454 25 | v 0.438442 2.713746 1.739467 26 | v 0.006255 1.740544 2.031332 27 | v 0.007055 1.847535 2.291326 28 | v 0.004566 1.665419 1.482833 29 | v 0.238187 1.475434 -1.296178 30 | v 0.117168 1.457492 -1.273325 31 | v 0.001657 1.102372 0.537975 32 | v -0.001191 1.131166 -0.386940 33 | v 0.233139 1.197133 -0.569454 34 | v 0.151148 0.949030 -1.175917 35 | v 0.126283 0.879217 0.563657 36 | v 0.126732 0.522190 -2.406165 37 | v -0.007350 0.491677 -2.387262 38 | v 0.091866 0.508105 -2.958243 39 | v 0.212498 0.613369 -2.505733 40 | v -0.007206 1.313000 -2.340235 41 | v 0.155772 0.825245 -2.685891 42 | v 0.080101 0.635224 -3.007533 43 | v 0.341936 1.296986 -0.570475 44 | v 0.174094 1.129840 0.388721 45 | v 0.125572 1.181640 -0.574965 46 | v 0.140529 1.508084 -1.407471 47 | v -0.009329 0.692819 -3.029716 48 | v -0.009074 0.481316 -2.946950 49 | v -0.073162 1.211081 -0.792337 50 | v -0.280634 1.801673 1.487239 51 | v -0.229790 1.286398 0.943907 52 | v -0.162587 1.805814 1.973359 53 | v -0.225014 1.837114 1.804726 54 | v -0.177758 1.985652 2.010353 55 | v -0.097006 2.031136 2.113480 56 | v -0.122243 1.811305 2.126705 57 | v -0.046074 1.893005 2.291199 58 | v -0.338967 2.015681 1.762713 59 | v -0.339033 1.958802 1.452436 60 | v -0.152560 0.934822 0.719401 61 | v -0.072498 1.230569 0.846306 62 | v -0.158269 2.407118 1.758293 63 | v -0.427722 2.713746 1.742134 64 | v -0.322399 2.277450 1.683470 65 | v -0.246164 1.475434 -1.294686 66 | v -0.125008 1.457492 -1.272579 67 | v -0.236641 1.197133 -0.568008 68 | v -0.158386 0.949030 -1.174963 69 | v -0.122810 0.879217 0.564425 70 | v -0.141547 0.522190 -2.405339 71 | v -0.110081 0.508105 -2.957621 72 | v -0.227924 0.613369 -2.504377 73 | v -0.098620 0.635224 -3.006982 74 | v -0.172309 0.825245 -2.684880 75 | v -0.171697 1.129840 0.389786 76 | v -0.345443 1.296986 -0.568358 77 | v -0.129110 1.181640 -0.574181 78 | v -0.156098 1.508084 -1.406558 79 | v -0.004632 1.132990 -1.504364 80 | v 0.200662 1.178991 -1.546297 81 | v 0.348929 1.230152 0.376972 82 | v 0.000857 2.203034 0.278326 83 | v 0.340770 2.020722 -0.827729 84 | v -0.001572 2.236625 -0.510379 85 | v 0.387762 1.851058 0.752603 86 | v 0.345248 1.986498 0.277266 87 | v 0.348644 2.086162 0.779447 88 | v 0.316793 1.949714 -1.298224 89 | v 0.363931 1.694586 -1.300893 90 | v 0.237521 1.671639 -1.409034 91 | v 0.393997 1.707422 -0.849117 92 | v 0.322240 0.962330 0.460341 93 | v 0.002397 2.300980 0.778292 94 | v 0.003405 2.459661 1.105573 95 | v 0.271300 2.287265 1.123781 96 | v 0.361686 2.210737 1.400266 97 | v 0.165486 2.480341 1.418549 98 | v 0.347221 1.463481 0.917809 99 | v 0.004360 2.532134 1.415981 100 | v 0.005420 2.449790 1.760340 101 | v 0.090252 2.140534 1.983268 102 | v 0.006206 2.117131 2.015380 103 | v 0.318444 1.116956 -0.624179 104 | v 0.217803 0.729859 -1.958590 105 | v 0.001698 2.277709 0.551420 106 | v -0.002711 2.224962 -0.880573 107 | v -0.003989 2.108801 -1.295432 108 | v -0.007781 1.934030 -1.405707 109 | v 0.396011 1.050529 -0.921016 110 | v 0.241414 1.112011 -0.585107 111 | v 0.309673 0.959790 -1.179388 112 | v 0.235997 0.965473 -1.257080 113 | v 0.292641 0.543343 -1.335545 114 | v 0.311984 0.605945 -1.247489 115 | v 0.167556 0.610286 -1.169759 116 | v 0.236941 0.561072 -1.387664 117 | v 0.160466 0.547620 -1.317982 118 | v 0.264299 0.710346 -1.048497 119 | v 0.360525 0.994469 0.549955 120 | v 0.312505 0.584293 0.532299 121 | v 0.155942 0.994469 0.460120 122 | v 0.205160 0.609048 0.499769 123 | v 0.247231 0.917507 0.779072 124 | v 0.319662 0.855394 0.685314 125 | v -0.005134 1.771302 -1.667421 126 | v 0.186257 1.791872 -1.427370 127 | v 0.261242 1.190196 -2.224325 128 | v 0.290269 0.864382 -2.036873 129 | v -0.005984 0.692981 -1.943286 130 | v 0.189160 1.286478 -2.278365 131 | v -0.210180 1.178991 -1.545032 132 | v -0.346600 1.230152 0.379113 133 | v -0.345862 2.020722 -0.825615 134 | v -0.383120 1.851058 0.754977 135 | v -0.343838 2.086162 0.781579 136 | v -0.343534 1.986498 0.279388 137 | v -0.324782 1.949714 -1.296249 138 | v -0.253098 1.671639 -1.407524 139 | v -0.371935 1.694586 -1.298627 140 | v -0.399218 1.707422 -0.846674 141 | v -0.319399 0.962330 0.462317 142 | v -0.264374 2.287265 1.125431 143 | v -0.353055 2.210737 1.402468 144 | v -0.156748 2.480341 1.419542 145 | v -0.341562 1.463481 0.919930 146 | v -0.078037 2.140534 1.983786 147 | v -0.322282 1.116956 -0.622205 148 | v -0.229861 0.729859 -1.957211 149 | v -0.401676 1.050529 -0.918560 150 | v -0.245012 1.112011 -0.583610 151 | v -0.316929 0.959790 -1.177459 152 | v -0.243734 0.965473 -1.255602 153 | v -0.300860 0.543343 -1.333718 154 | v -0.319660 0.605945 -1.245545 155 | v -0.174756 0.610286 -1.168705 156 | v -0.245482 0.561072 -1.386178 157 | v -0.168580 0.547620 -1.316969 158 | v -0.270751 0.710346 -1.046850 159 | v -0.309221 0.584293 0.534214 160 | v -0.357132 0.994469 0.552165 161 | v -0.202079 0.609048 0.501023 162 | v -0.153105 0.994469 0.461072 163 | v -0.242428 0.917507 0.780579 164 | v -0.315436 0.855394 0.687270 165 | v -0.274934 1.190196 -2.222673 166 | v -0.201947 1.791872 -1.426175 167 | v -0.302806 0.864382 -2.035047 168 | v -0.203187 1.286478 -2.277157 169 | v 0.259563 0.551180 -1.146396 170 | v 0.152462 0.150153 -1.167059 171 | v 0.317237 0.251441 -1.202886 172 | v 0.234760 0.003595 -1.183430 173 | v 0.318636 0.110469 -1.135521 174 | v 0.173618 0.225265 -1.152033 175 | v 0.189159 0.008088 -0.954959 176 | v 0.150578 -0.004187 -1.099514 177 | v 0.316912 -0.003522 -1.098958 178 | v 0.270191 0.009709 -0.955714 179 | v 0.235627 0.222217 -1.116211 180 | v 0.276842 0.261066 0.521427 181 | v 0.196676 0.174978 0.558265 182 | v 0.241628 0.198299 0.715101 183 | v 0.161944 0.218341 0.609650 184 | v 0.295108 0.203808 0.641258 185 | v 0.180817 0.027412 0.807383 186 | v 0.170605 -0.002059 0.590419 187 | v 0.301087 -0.001536 0.590836 188 | v 0.292105 0.019473 0.801544 189 | v 0.305760 0.176507 0.581185 190 | v 0.246683 0.007752 0.866235 191 | v -0.266619 0.551180 -1.144775 192 | v -0.159647 0.150153 -1.166098 193 | v -0.324638 0.251441 -1.200909 194 | v -0.242043 0.003595 -1.181962 195 | v -0.325623 0.110469 -1.133538 196 | v -0.180708 0.225265 -1.150942 197 | v -0.195036 0.008088 -0.953776 198 | v -0.157346 -0.004187 -1.098565 199 | v -0.323674 -0.003522 -1.096985 200 | v -0.276072 0.009709 -0.954032 201 | v -0.242497 0.222217 -1.114738 202 | v -0.273625 0.261066 0.523122 203 | v -0.193235 0.174978 0.559466 204 | v -0.237220 0.198299 0.716576 205 | v -0.158186 0.218341 0.610635 206 | v -0.291154 0.203808 0.643063 207 | v -0.175841 0.027412 0.808481 208 | v -0.166966 -0.002059 0.591458 209 | v -0.287163 0.019473 0.803328 210 | v -0.297443 -0.001536 0.592678 211 | v -0.302174 0.176507 0.583058 212 | v -0.241343 0.007752 0.867737 213 | vn 0.2940 -0.8622 -0.4126 214 | vn 0.2980 -0.8609 -0.4124 215 | vn 0.2967 -0.8613 -0.4125 216 | vn 0.1474 -0.7248 0.6730 217 | vn 0.2205 -0.9703 -0.0996 218 | vn 0.8134 0.1557 0.5605 219 | vn 0.9088 -0.0064 0.4172 220 | vn 0.7940 -0.3949 0.4622 221 | vn 0.9403 -0.3357 0.0559 222 | vn -0.3462 -0.4479 0.8244 223 | vn 0.2822 -0.1933 0.9397 224 | vn 0.3986 -0.9072 0.1347 225 | vn 0.2229 -0.9017 0.3704 226 | vn 0.4061 -0.8564 0.3189 227 | vn 0.0977 -0.9657 -0.2406 228 | vn 0.2485 -0.9681 -0.0309 229 | vn -0.0006 -0.9811 -0.1936 230 | vn -0.0022 -0.9811 -0.1936 231 | vn -0.9844 -0.0942 -0.1485 232 | vn -0.8261 -0.4179 0.3781 233 | vn 0.2233 -0.9747 0.0108 234 | vn 0.7132 -0.7005 -0.0272 235 | vn 0.6599 0.5686 -0.4912 236 | vn 0.9641 0.0323 -0.2636 237 | vn 0.9639 0.0330 -0.2640 238 | vn 0.9638 0.0330 -0.2646 239 | vn 0.6761 -0.7368 -0.0101 240 | vn 0.2931 -0.8625 -0.4125 241 | vn 0.1415 -0.9396 0.3116 242 | vn 0.2182 -0.9651 0.1445 243 | vn 0.2991 -0.9367 -0.1820 244 | vn 0.4759 0.7464 0.4651 245 | vn 0.9588 -0.1335 0.2507 246 | vn 0.5423 -0.6280 0.5581 247 | vn 0.9383 -0.1448 0.3140 248 | vn 0.9333 -0.3023 0.1937 249 | vn 0.8476 -0.4923 0.1980 250 | vn 0.1488 -0.9756 -0.1616 251 | vn 0.1482 -0.9756 -0.1621 252 | vn 0.1488 -0.9755 -0.1620 253 | vn 0.3475 -0.7386 0.5776 254 | vn 0.1885 -0.9223 0.3375 255 | vn 0.1743 -0.8930 -0.4149 256 | vn 0.1033 -0.9926 -0.0633 257 | vn 0.1388 -0.9759 -0.1684 258 | vn -0.8783 -0.3673 0.3062 259 | vn 0.5416 0.6241 -0.5631 260 | vn 0.2583 -0.9659 0.0171 261 | vn 0.9733 0.0010 -0.2296 262 | vn -0.0030 -0.3667 -0.9303 263 | vn -0.0029 -0.3644 -0.9312 264 | vn -0.0073 -0.3626 -0.9319 265 | vn -0.0082 -0.3622 -0.9321 266 | vn -0.3074 -0.8599 -0.4075 267 | vn -0.2998 -0.8625 -0.4078 268 | vn -0.2966 -0.8635 -0.4079 269 | vn -0.1433 -0.7248 0.6739 270 | vn -0.2211 -0.9703 -0.0982 271 | vn -0.8099 0.1558 0.5655 272 | vn -0.9062 -0.0064 0.4228 273 | vn -0.7911 -0.3949 0.4671 274 | vn -0.9400 -0.3357 0.0617 275 | vn 0.3512 -0.4479 0.8222 276 | vn -0.2764 -0.1933 0.9414 277 | vn -0.3978 -0.9072 0.1371 278 | vn -0.2206 -0.9017 0.3718 279 | vn -0.4042 -0.8564 0.3213 280 | vn -0.1001 -0.9666 -0.2358 281 | vn -0.2487 -0.9681 -0.0294 282 | vn 0.0010 -0.9811 -0.1936 283 | vn 0.9835 -0.0942 -0.1545 284 | vn 0.8284 -0.4179 0.3730 285 | vn -0.2233 -0.9747 0.0121 286 | vn -0.7133 -0.7005 -0.0228 287 | vn -0.6629 0.5686 -0.4871 288 | vn -0.9654 0.0330 -0.2587 289 | vn -0.6761 -0.7368 -0.0059 290 | vn -0.3098 -0.8591 -0.4074 291 | vn -0.1396 -0.9396 0.3125 292 | vn -0.2174 -0.9651 0.1458 293 | vn -0.3003 -0.9367 -0.1801 294 | vn -0.4731 0.7464 0.4680 295 | vn -0.9572 -0.1335 0.2566 296 | vn -0.5388 -0.6280 0.5614 297 | vn -0.9364 -0.1448 0.3198 298 | vn -0.9321 -0.3023 0.1994 299 | vn -0.8464 -0.4923 0.2032 300 | vn -0.1498 -0.9756 -0.1607 301 | vn -0.1497 -0.9755 -0.1609 302 | vn -0.1491 -0.9756 -0.1612 303 | vn -0.3439 -0.7386 0.5798 304 | vn -0.1864 -0.9223 0.3386 305 | vn -0.1779 -0.8969 -0.4049 306 | vn -0.1037 -0.9926 -0.0627 307 | vn -0.1398 -0.9759 -0.1676 308 | vn 0.8801 -0.3673 0.3007 309 | vn -0.5451 0.6241 -0.5597 310 | vn -0.2582 -0.9659 0.0187 311 | vn -0.9747 0.0011 -0.2236 312 | vn 0.0015 -0.3626 -0.9319 313 | vn 0.0024 -0.3622 -0.9321 314 | vn 0.0837 -0.2795 0.9565 315 | vn 0.2600 -0.3346 0.9058 316 | vn 0.4933 -0.8674 -0.0648 317 | vn 0.5553 0.8310 0.0337 318 | vn 0.9849 0.1684 -0.0401 319 | vn 0.9478 0.3187 0.0060 320 | vn 0.6318 0.1247 -0.7650 321 | vn 0.9806 0.1805 -0.0764 322 | vn 0.9826 0.1717 -0.0703 323 | vn 0.9824 0.1728 -0.0711 324 | vn 0.6376 -0.3798 -0.6702 325 | vn 0.6371 -0.3800 -0.6706 326 | vn 0.6390 -0.3846 -0.6661 327 | vn 0.1117 -0.3055 -0.9456 328 | vn 0.4881 0.7847 -0.3820 329 | vn 0.9799 0.1478 0.1338 330 | vn 0.8014 0.5899 -0.0987 331 | vn 0.9944 -0.0703 0.0791 332 | vn 0.9934 -0.0323 0.1098 333 | vn 0.2952 0.9294 0.2213 334 | vn 0.5402 0.8191 -0.1929 335 | vn 0.8091 0.2178 0.5459 336 | vn 0.5137 0.4244 -0.7456 337 | vn 0.6232 0.3902 0.6778 338 | vn 0.1471 0.8142 0.5617 339 | vn 0.7606 0.5487 0.3472 340 | vn 0.7956 -0.4441 0.4120 341 | vn 0.9976 -0.0685 0.0100 342 | vn 0.9547 -0.2523 0.1581 343 | vn -0.7385 0.6574 0.1500 344 | vn 0.4680 -0.2695 0.8416 345 | vn 0.9917 -0.1283 -0.0037 346 | vn 0.2889 -0.6414 0.7107 347 | vn 0.1727 0.6067 0.7759 348 | vn 0.5179 0.8248 -0.2271 349 | vn 0.5224 0.8388 -0.1532 350 | vn 0.2474 0.5132 -0.8219 351 | vn 0.9977 0.0104 -0.0667 352 | vn 0.1592 -0.1635 0.9736 353 | vn 0.2722 -0.1765 -0.9459 354 | vn -0.1744 -0.0745 -0.9819 355 | vn 0.7159 0.2193 -0.6629 356 | vn 0.9382 0.0713 -0.3386 357 | vn -0.3569 -0.6861 0.6339 358 | vn -0.6963 0.2191 -0.6835 359 | vn -0.9645 0.0679 -0.2550 360 | vn 0.3598 -0.6962 0.6212 361 | vn 0.8378 -0.4436 0.3182 362 | vn -0.9337 -0.2928 0.2060 363 | vn 0.9272 -0.0929 -0.3628 364 | vn -0.8888 -0.1578 -0.4302 365 | vn 0.6306 -0.2976 0.7168 366 | vn -0.5929 -0.3121 -0.7424 367 | vn 0.9981 -0.0556 0.0271 368 | vn -0.0189 -0.1047 -0.9943 369 | vn 0.5267 0.7015 -0.4801 370 | vn 0.9525 -0.1458 0.2675 371 | vn 0.8820 0.3239 -0.3423 372 | vn 0.9869 -0.0048 -0.1611 373 | vn 0.1756 -0.8968 0.4061 374 | vn 0.8877 -0.4593 0.0325 375 | vn 0.8144 0.3500 -0.4628 376 | vn 0.3112 0.6165 -0.7233 377 | vn -0.0240 -0.1831 0.9828 378 | vn 0.5141 0.8572 -0.0286 379 | vn 0.9857 0.1682 -0.0112 380 | vn 0.6064 0.1391 -0.7829 381 | vn 0.2555 0.4769 -0.8410 382 | vn 0.9803 0.1819 -0.0774 383 | vn 0.5253 0.8463 -0.0884 384 | vn 0.6392 -0.3854 -0.6654 385 | vn 0.5254 0.7808 -0.3380 386 | vn 0.8992 0.3968 -0.1841 387 | vn 0.9954 -0.0868 0.0406 388 | vn -0.0869 -0.4556 -0.8859 389 | vn 0.9981 -0.0461 0.0415 390 | vn 0.9981 0.0599 -0.0169 391 | vn 0.2792 0.8461 -0.4540 392 | vn 0.1325 0.6033 0.7865 393 | vn 0.5662 0.4777 0.6717 394 | vn 0.0319 0.7661 0.6419 395 | vn 0.9254 -0.1937 -0.3259 396 | vn -0.5679 -0.3483 0.7458 397 | vn 0.9904 -0.1372 -0.0170 398 | vn 0.4923 0.7414 -0.4560 399 | vn 0.9658 -0.0253 0.2580 400 | vn 0.8955 -0.2820 0.3444 401 | vn 0.2506 0.9468 0.2020 402 | vn 0.5577 0.8134 -0.1652 403 | vn 0.4291 0.8695 -0.2448 404 | vn 0.9536 -0.1163 -0.2778 405 | vn 0.5322 0.8463 0.0241 406 | vn 0.4459 -0.3088 0.8401 407 | vn 0.7224 -0.0559 -0.6892 408 | vn -0.6607 -0.1836 -0.7279 409 | vn -0.9675 -0.2130 0.1363 410 | vn 0.6505 -0.2968 0.6991 411 | vn -0.6268 -0.4252 -0.6529 412 | vn 0.4841 0.5331 0.6939 413 | vn 0.9779 -0.1218 0.1701 414 | vn 0.8310 0.5331 -0.1587 415 | vn 0.1626 -0.6971 0.6983 416 | vn 0.2778 0.7936 -0.5414 417 | vn 0.9949 0.0993 0.0186 418 | vn 0.9662 0.0424 -0.2543 419 | vn 0.2552 -0.8959 0.3638 420 | vn 0.8041 -0.5692 0.1714 421 | vn -0.0781 -0.2810 0.9565 422 | vn -0.2550 -0.3391 0.9055 423 | vn -0.4937 -0.8674 -0.0618 424 | vn -0.5551 0.8310 0.0371 425 | vn -0.9851 0.1684 -0.0340 426 | vn -0.9478 0.3187 0.0119 427 | vn -0.6564 0.1283 -0.7434 428 | vn -0.9810 0.1806 -0.0704 429 | vn -0.9828 0.1728 -0.0650 430 | vn -0.9830 0.1717 -0.0642 431 | vn -0.6588 -0.3896 -0.6436 432 | vn -0.6605 -0.3948 -0.6386 433 | vn -0.6586 -0.3895 -0.6439 434 | vn -0.1175 -0.3055 -0.9449 435 | vn -0.4905 0.7847 -0.3790 436 | vn -0.9791 0.1478 0.1398 437 | vn -0.8020 0.5899 -0.0938 438 | vn -0.9939 -0.0703 0.0852 439 | vn -0.9927 -0.0323 0.1160 440 | vn -0.2939 0.9294 0.2232 441 | vn -0.5414 0.8191 -0.1896 442 | vn -0.8057 0.2178 0.5509 443 | vn -0.5183 0.4244 -0.7424 444 | vn -0.6190 0.3902 0.6816 445 | vn -0.1436 0.8142 0.5626 446 | vn -0.7584 0.5487 0.3519 447 | vn -0.7931 -0.4441 0.4169 448 | vn -0.9975 -0.0685 0.0162 449 | vn -0.9537 -0.2523 0.1639 450 | vn 0.7394 0.6574 0.1454 451 | vn -0.4719 -0.2749 0.8377 452 | vn -0.9917 -0.1283 0.0024 453 | vn -0.2845 -0.6414 0.7125 454 | vn -0.1679 0.6067 0.7770 455 | vn -0.5193 0.8248 -0.2239 456 | vn -0.5233 0.8388 -0.1500 457 | vn -0.2557 0.5198 -0.8151 458 | vn -0.9981 0.0104 -0.0605 459 | vn -0.1532 -0.1635 0.9746 460 | vn -0.2780 -0.1765 -0.9442 461 | vn 0.1683 -0.0745 -0.9829 462 | vn -0.7200 0.2193 -0.6584 463 | vn -0.9403 0.0713 -0.3328 464 | vn 0.3608 -0.6861 0.6317 465 | vn 0.6921 0.2191 -0.6878 466 | vn 0.9630 0.0679 -0.2610 467 | vn -0.3559 -0.6962 0.6234 468 | vn -0.8358 -0.4436 0.3234 469 | vn 0.9350 -0.2928 0.2003 470 | vn -0.9294 -0.0929 -0.3571 471 | vn 0.8862 -0.1578 -0.4357 472 | vn -0.6261 -0.2976 0.7207 473 | vn 0.5883 -0.3121 -0.7460 474 | vn -0.9979 -0.0556 0.0333 475 | vn 0.0128 -0.1047 -0.9944 476 | vn -0.5198 0.7039 -0.4841 477 | vn -0.9457 -0.1612 0.2822 478 | vn -0.8820 0.3218 -0.3442 479 | vn -0.9879 -0.0048 -0.1551 480 | vn -0.1731 -0.8968 0.4072 481 | vn -0.8875 -0.4593 0.0379 482 | vn -0.8173 0.3500 -0.4578 483 | vn -0.3156 0.6165 -0.7213 484 | vn 0.0300 -0.1831 0.9826 485 | vn -0.5143 0.8572 -0.0254 486 | vn -0.9857 0.1682 -0.0052 487 | vn -0.6239 0.1463 -0.7677 488 | vn -0.2646 0.4817 -0.8354 489 | vn -0.9807 0.1819 -0.0714 490 | vn -0.5259 0.8463 -0.0852 491 | vn -0.6608 -0.3957 -0.6378 492 | vn -0.5275 0.7808 -0.3348 493 | vn -0.9004 0.3968 -0.1786 494 | vn -0.9951 -0.0868 0.0467 495 | vn 0.0814 -0.4556 -0.8864 496 | vn -0.9978 -0.0461 0.0476 497 | vn -0.9981 0.0599 -0.0108 498 | vn -0.2820 0.8461 -0.4523 499 | vn -0.1277 0.6033 0.7873 500 | vn -0.5621 0.4777 0.6752 501 | vn -0.0280 0.7661 0.6421 502 | vn -0.9274 -0.1937 -0.3202 503 | vn 0.5724 -0.3483 0.7423 504 | vn -0.9905 -0.1372 -0.0109 505 | vn -0.4911 0.7375 -0.4635 506 | vn -0.9642 -0.0253 0.2640 507 | vn -0.8933 -0.2820 0.3499 508 | vn -0.2494 0.9468 0.2035 509 | vn -0.5587 0.8134 -0.1618 510 | vn -0.4306 0.8695 -0.2421 511 | vn -0.9553 -0.1163 -0.2719 512 | vn -0.5320 0.8463 0.0273 513 | vn -0.4408 -0.3088 0.8428 514 | vn -0.7267 -0.0559 -0.6847 515 | vn 0.6562 -0.1836 -0.7319 516 | vn 0.9683 -0.2130 0.1304 517 | vn -0.6462 -0.2968 0.7031 518 | vn 0.6228 -0.4252 -0.6567 519 | vn -0.4798 0.5331 0.6968 520 | vn -0.9768 -0.1218 0.1761 521 | vn -0.8320 0.5331 -0.1536 522 | vn -0.1583 -0.6971 0.6993 523 | vn -0.2811 0.7936 -0.5397 524 | vn -0.9952 0.0959 0.0187 525 | vn -0.9677 0.0424 -0.2484 526 | vn -0.2529 -0.8959 0.3653 527 | vn -0.8030 -0.5692 0.1763 528 | vn 0.9089 -0.2377 0.3425 529 | vn -0.9989 0.0330 0.0338 530 | vn 0.8682 0.0746 0.4906 531 | vn 0.7261 -0.2906 -0.6231 532 | vn -0.6222 -0.2670 -0.7359 533 | vn -0.6230 -0.2669 -0.7353 534 | vn -0.6227 -0.2669 -0.7355 535 | vn -0.2208 0.0414 0.9744 536 | vn 0.9783 -0.0115 -0.2067 537 | vn 0.6042 -0.2869 -0.7434 538 | vn -0.9617 0.1196 0.2465 539 | vn 0.0037 -0.9965 0.0836 540 | vn 0.6877 -0.2312 -0.6883 541 | vn 0.9218 0.1746 0.3462 542 | vn 0.4902 0.5747 0.6553 543 | vn -0.3744 0.6083 0.6999 544 | vn 0.2901 0.0002 -0.9570 545 | vn -0.7641 -0.0715 -0.6411 546 | vn 0.7693 -0.0625 0.6358 547 | vn -0.5698 -0.1272 0.8119 548 | vn -0.9775 -0.0383 0.2076 549 | vn 0.9990 -0.0392 0.0227 550 | vn -0.9976 -0.0438 0.0529 551 | vn 0.0037 -0.9950 0.0994 552 | vn -0.8215 0.0175 -0.5700 553 | vn 0.2061 -0.0584 -0.9768 554 | vn 0.7064 0.4512 0.5453 555 | vn -0.6242 0.5314 0.5727 556 | vn 0.9866 0.0975 0.1306 557 | vn 0.7029 0.2200 -0.6764 558 | vn 0.9664 0.0546 -0.2511 559 | vn -0.0372 -0.7560 0.6535 560 | vn -0.6772 0.2315 -0.6985 561 | vn -0.4799 -0.4492 0.7536 562 | vn 0.7770 -0.4613 0.4282 563 | vn -0.6373 0.0254 0.7702 564 | vn 0.7263 0.0102 0.6873 565 | vn -0.6219 -0.2670 -0.7362 566 | vn -0.4927 0.1150 0.8626 567 | vn 0.6345 -0.2681 -0.7249 568 | vn -0.6610 -0.2941 -0.6904 569 | vn 0.0208 -0.9949 0.0987 570 | vn 0.0043 -0.9961 -0.0881 571 | vn 0.9497 0.0825 0.3021 572 | vn -0.9328 0.2032 0.2975 573 | vn -0.0046 0.6022 0.7983 574 | vn 0.2451 -0.1874 -0.9512 575 | vn 0.8508 -0.0764 -0.5198 576 | vn -0.8563 -0.0817 -0.5099 577 | vn 0.8104 -0.0699 0.5817 578 | vn -0.8012 -0.0468 0.5965 579 | vn -0.3039 -0.1214 -0.9450 580 | vn 0.9850 0.0044 0.1726 581 | vn 0.9987 -0.0238 0.0449 582 | vn 0.1820 -0.5252 -0.8313 583 | vn -0.3974 -0.9066 0.1419 584 | vn 0.2163 -0.9760 -0.0249 585 | vn 0.0039 -0.1792 -0.9838 586 | vn 0.6763 0.4770 0.5613 587 | vn -0.4635 0.5431 0.7002 588 | vn -0.9068 -0.2377 0.3481 589 | vn 0.9991 0.0330 0.0277 590 | vn -0.8652 0.0746 0.4959 591 | vn -0.7300 -0.2906 -0.6186 592 | vn 0.6177 -0.2669 -0.7397 593 | vn 0.6182 -0.2669 -0.7393 594 | vn 0.6185 -0.2669 -0.7391 595 | vn 0.2268 0.0414 0.9731 596 | vn -0.9796 -0.0115 -0.2007 597 | vn -0.6088 -0.2869 -0.7396 598 | vn 0.9632 0.1196 0.2406 599 | vn -0.0032 -0.9965 0.0837 600 | vn -0.6919 -0.2312 -0.6840 601 | vn -0.9196 0.1746 0.3518 602 | vn -0.4862 0.5747 0.6583 603 | vn 0.3787 0.6083 0.6975 604 | vn -0.2959 0.0002 -0.9552 605 | vn 0.7601 -0.0715 -0.6458 606 | vn -0.7654 -0.0625 0.6405 607 | vn 0.5748 -0.1272 0.8083 608 | vn 0.9787 -0.0383 0.2016 609 | vn -0.9988 -0.0392 0.0288 610 | vn 0.9979 -0.0438 0.0468 611 | vn -0.0031 -0.9950 0.0994 612 | vn 0.8179 0.0175 -0.5750 613 | vn -0.2121 -0.0583 -0.9755 614 | vn -0.7031 0.4512 0.5496 615 | vn 0.6277 0.5314 0.5688 616 | vn -0.9858 0.0975 0.1367 617 | vn -0.7071 0.2200 -0.6720 618 | vn -0.9679 0.0546 -0.2452 619 | vn 0.0412 -0.7560 0.6532 620 | vn 0.6728 0.2315 -0.7026 621 | vn 0.4846 -0.4492 0.7506 622 | vn -0.7744 -0.4613 0.4330 623 | vn 0.6421 0.0254 0.7662 624 | vn -0.7221 0.0102 0.6918 625 | vn 0.6174 -0.2670 -0.7400 626 | vn 0.4980 0.1150 0.8595 627 | vn -0.6390 -0.2681 -0.7210 628 | vn 0.6567 -0.2941 -0.6944 629 | vn -0.0202 -0.9949 0.0988 630 | vn -0.0048 -0.9961 -0.0881 631 | vn -0.9478 0.0826 0.3080 632 | vn 0.9347 0.2032 0.2918 633 | vn 0.0095 0.6022 0.7983 634 | vn -0.2509 -0.1874 -0.9497 635 | vn -0.8540 -0.0764 -0.5146 636 | vn 0.8532 -0.0817 -0.5152 637 | vn -0.8068 -0.0699 0.5867 638 | vn 0.8049 -0.0468 0.5916 639 | vn 0.2980 -0.1214 -0.9468 640 | vn -0.9839 0.0044 0.1787 641 | vn -0.9984 -0.0238 0.0511 642 | vn -0.1871 -0.5252 -0.8301 643 | vn 0.3982 -0.9066 0.1394 644 | vn -0.2165 -0.9760 -0.0236 645 | vn -0.0099 -0.1792 -0.9838 646 | vn -0.6728 0.4770 0.5654 647 | vn 0.4678 0.5431 0.6973 648 | vn 0.0084 0.0002 1.0000 649 | vn 0.0031 0.0002 1.0000 650 | vn -0.0022 0.0002 1.0000 651 | usemtl Fox_White_001 652 | s 1 653 | f 1//1 2//2 3//3 654 | f 4//4 5//4 6//4 655 | f 7//5 8//5 9//5 656 | f 10//6 11//6 12//6 657 | f 13//7 10//7 14//7 658 | f 8//8 15//8 10//8 659 | f 6//9 16//9 15//9 660 | f 5//10 17//10 18//10 661 | f 19//11 20//11 21//11 662 | f 22//12 9//12 13//12 663 | f 22//13 13//13 23//13 664 | f 24//14 6//14 7//14 665 | f 25//15 26//15 3//15 666 | f 27//16 28//16 29//16 667 | f 28//17 2//17 1//18 668 | f 1//19 26//19 30//19 669 | f 17//20 27//20 31//20 670 | f 32//21 33//21 34//21 671 | f 35//22 32//22 34//22 672 | f 36//23 37//23 38//23 673 | f 37//24 35//25 34//26 674 | f 29//27 39//27 40//27 675 | f 26//28 1//1 3//3 676 | f 4//29 17//29 5//29 677 | f 7//30 6//30 8//30 678 | f 22//31 7//31 9//31 679 | f 14//32 10//32 12//32 680 | f 13//33 9//33 10//33 681 | f 23//34 13//34 14//34 682 | f 9//35 8//35 10//35 683 | f 6//36 5//36 16//36 684 | f 8//37 6//37 15//37 685 | f 29//38 28//39 41//40 686 | f 24//41 4//41 6//41 687 | f 4//42 27//42 17//42 688 | f 42//43 25//43 3//43 689 | f 40//44 27//44 29//44 690 | f 41//40 28//39 1//45 691 | f 18//46 17//46 31//46 692 | f 43//47 36//47 38//47 693 | f 34//48 33//48 44//48 694 | f 38//49 37//49 34//49 695 | f 44//50 43//51 38//52 696 | f 34//53 44//50 38//52 697 | f 45//54 3//55 2//56 698 | f 4//57 46//57 47//57 699 | f 7//58 48//58 49//58 700 | f 50//59 12//59 51//59 701 | f 52//60 53//60 50//60 702 | f 49//61 50//61 54//61 703 | f 46//62 54//62 55//62 704 | f 47//63 56//63 57//63 705 | f 58//64 59//64 60//64 706 | f 22//65 52//65 48//65 707 | f 22//66 23//66 52//66 708 | f 24//67 7//67 46//67 709 | f 61//68 3//68 62//68 710 | f 27//69 63//69 28//69 711 | f 28//17 45//70 2//17 712 | f 45//71 64//71 62//71 713 | f 57//72 65//72 27//72 714 | f 66//73 67//73 33//73 715 | f 68//74 67//74 66//74 716 | f 36//75 69//75 70//75 717 | f 70//76 67//76 68//76 718 | f 63//77 71//77 72//77 719 | f 62//78 3//55 45//54 720 | f 4//79 47//79 57//79 721 | f 7//80 49//80 46//80 722 | f 22//81 48//81 7//81 723 | f 53//82 12//82 50//82 724 | f 52//83 50//83 48//83 725 | f 23//84 53//84 52//84 726 | f 48//85 50//85 49//85 727 | f 46//86 55//86 47//86 728 | f 49//87 54//87 46//87 729 | f 63//88 73//89 28//90 730 | f 24//91 46//91 4//91 731 | f 4//92 57//92 27//92 732 | f 74//93 3//93 61//93 733 | f 71//94 63//94 27//94 734 | f 73//89 45//95 28//90 735 | f 56//96 65//96 57//96 736 | f 43//97 69//97 36//97 737 | f 67//98 44//98 33//98 738 | f 69//99 67//99 70//99 739 | f 44//50 69//100 43//51 740 | f 67//101 69//100 44//50 741 | usemtl Fox_Brown_001 742 | f 42//102 3//102 75//102 743 | f 76//103 42//103 75//103 744 | f 39//104 77//104 40//104 745 | f 78//105 79//105 80//105 746 | f 81//106 82//106 83//106 747 | f 79//107 82//107 81//107 748 | f 84//108 85//108 86//108 749 | f 79//109 87//110 85//111 750 | f 85//112 25//113 42//114 751 | f 40//115 77//115 88//115 752 | f 83//116 89//116 90//116 753 | f 81//117 83//117 91//117 754 | f 92//118 91//118 93//118 755 | f 94//119 81//119 92//119 756 | f 16//120 92//120 20//120 757 | f 93//121 95//121 96//121 758 | f 91//122 90//122 95//122 759 | f 15//123 20//123 10//123 760 | f 92//124 93//124 21//124 761 | f 20//125 19//125 97//125 762 | f 11//126 98//126 12//126 763 | f 10//127 97//127 11//127 764 | f 5//128 94//128 16//128 765 | f 87//129 81//129 77//129 766 | f 20//130 92//130 21//130 767 | f 93//131 19//131 21//131 768 | f 86//132 42//132 76//132 769 | f 87//133 39//133 99//133 770 | f 76//134 75//134 100//134 771 | f 19//135 96//135 97//135 772 | f 82//136 78//136 101//136 773 | f 102//137 79//137 84//137 774 | f 103//138 84//138 104//138 775 | f 85//139 87//139 105//139 776 | f 39//140 29//140 106//140 777 | f 25//141 85//141 107//141 778 | f 26//142 25//142 108//142 779 | f 108//143 107//143 109//143 780 | f 107//144 105//144 110//144 781 | f 106//145 41//145 111//145 782 | f 30//146 108//146 112//146 783 | f 1//147 30//147 113//147 784 | f 99//148 106//148 114//148 785 | f 105//149 99//149 114//149 786 | f 41//150 1//150 113//150 787 | f 88//151 115//151 116//151 788 | f 31//152 117//152 118//152 789 | f 94//153 5//153 119//153 790 | f 27//154 40//154 117//154 791 | f 77//155 94//155 120//155 792 | f 117//156 88//156 118//156 793 | f 121//157 122//157 123//157 794 | f 86//158 76//158 124//158 795 | f 122//159 86//159 124//159 796 | f 123//160 124//160 35//160 797 | f 100//161 125//161 33//161 798 | f 124//162 100//162 32//162 799 | f 126//163 123//163 37//163 800 | f 36//164 126//164 37//164 801 | f 106//165 29//165 41//165 802 | f 80//166 79//166 102//166 803 | f 87//167 79//167 81//167 804 | f 122//168 84//168 86//168 805 | f 104//169 84//169 122//169 806 | f 84//170 79//109 85//111 807 | f 83//171 101//171 89//171 808 | f 86//172 85//112 42//114 809 | f 91//173 83//173 90//173 810 | f 92//174 81//174 91//174 811 | f 94//175 77//175 81//175 812 | f 117//176 40//176 88//176 813 | f 16//177 94//177 92//177 814 | f 15//178 16//178 20//178 815 | f 93//179 91//179 95//179 816 | f 97//180 96//180 98//180 817 | f 10//181 20//181 97//181 818 | f 11//182 97//182 98//182 819 | f 88//183 77//183 115//183 820 | f 119//184 5//184 18//184 821 | f 39//185 87//185 77//185 822 | f 121//186 104//186 122//186 823 | f 105//187 87//187 99//187 824 | f 124//188 76//188 100//188 825 | f 19//189 93//189 96//189 826 | f 83//190 82//190 101//190 827 | f 103//191 102//191 84//191 828 | f 107//192 85//192 105//192 829 | f 78//193 82//193 79//193 830 | f 99//194 39//194 106//194 831 | f 108//195 25//195 107//195 832 | f 30//196 26//196 108//196 833 | f 111//197 41//197 113//197 834 | f 120//198 94//198 119//198 835 | f 31//199 27//199 117//199 836 | f 115//200 77//200 120//200 837 | f 116//201 115//201 120//201 838 | f 126//202 121//202 123//202 839 | f 100//203 75//203 125//203 840 | f 36//204 121//204 126//204 841 | f 123//205 122//205 124//205 842 | f 37//24 123//206 35//25 843 | f 32//207 100//207 33//207 844 | f 35//208 124//208 32//208 845 | f 74//209 75//209 3//209 846 | f 127//210 75//210 74//210 847 | f 72//211 71//211 128//211 848 | f 78//212 80//212 129//212 849 | f 130//213 131//213 132//213 850 | f 129//214 130//214 132//214 851 | f 133//215 134//215 135//215 852 | f 129//216 135//217 136//218 853 | f 135//219 74//220 61//221 854 | f 71//222 137//222 128//222 855 | f 131//223 90//223 89//223 856 | f 130//224 138//224 131//224 857 | f 139//225 140//225 138//225 858 | f 141//226 139//226 130//226 859 | f 55//227 60//227 139//227 860 | f 140//228 96//228 95//228 861 | f 138//229 95//229 90//229 862 | f 54//230 50//230 60//230 863 | f 139//231 59//231 140//231 864 | f 60//232 142//232 58//232 865 | f 51//233 12//233 98//233 866 | f 50//234 51//234 142//234 867 | f 47//235 55//235 141//235 868 | f 136//236 128//236 130//236 869 | f 60//237 59//237 139//237 870 | f 140//238 59//238 58//238 871 | f 134//239 127//239 74//239 872 | f 136//240 143//240 72//240 873 | f 127//241 144//241 75//241 874 | f 58//242 142//242 96//242 875 | f 132//243 101//243 78//243 876 | f 102//244 133//244 129//244 877 | f 103//245 104//245 133//245 878 | f 135//246 145//246 136//246 879 | f 72//247 146//247 63//247 880 | f 61//248 147//248 135//248 881 | f 62//249 148//249 61//249 882 | f 148//250 149//250 147//250 883 | f 147//251 150//251 145//251 884 | f 146//252 151//252 73//252 885 | f 64//253 152//253 148//253 886 | f 45//254 153//254 64//254 887 | f 143//255 154//255 146//255 888 | f 145//256 154//256 143//256 889 | f 73//257 153//257 45//257 890 | f 137//258 155//258 156//258 891 | f 65//259 157//259 158//259 892 | f 141//260 159//260 47//260 893 | f 27//261 158//261 71//261 894 | f 128//262 160//262 141//262 895 | f 158//263 157//263 137//263 896 | f 121//264 161//264 162//264 897 | f 134//265 163//265 127//265 898 | f 162//266 163//266 134//266 899 | f 161//267 68//267 163//267 900 | f 144//268 33//268 125//268 901 | f 163//269 66//269 144//269 902 | f 164//270 70//270 161//270 903 | f 36//271 70//271 164//271 904 | f 146//272 73//272 63//272 905 | f 80//273 102//273 129//273 906 | f 136//274 130//274 129//274 907 | f 162//275 134//275 133//275 908 | f 104//276 162//276 133//276 909 | f 133//277 135//217 129//216 910 | f 131//278 89//278 101//278 911 | f 134//279 74//220 135//219 912 | f 138//280 90//280 131//280 913 | f 139//281 138//281 130//281 914 | f 141//282 130//282 128//282 915 | f 158//283 137//283 71//283 916 | f 55//284 139//284 141//284 917 | f 54//285 60//285 55//285 918 | f 140//286 95//286 138//286 919 | f 142//287 98//287 96//287 920 | f 50//288 142//288 60//288 921 | f 51//289 98//289 142//289 922 | f 137//290 156//290 128//290 923 | f 159//291 56//291 47//291 924 | f 72//292 128//292 136//292 925 | f 121//293 162//293 104//293 926 | f 145//294 143//294 136//294 927 | f 163//295 144//295 127//295 928 | f 58//296 96//296 140//296 929 | f 131//297 101//297 132//297 930 | f 103//298 133//298 102//298 931 | f 147//299 145//299 135//299 932 | f 78//300 129//300 132//300 933 | f 143//301 146//301 72//301 934 | f 148//302 147//302 61//302 935 | f 64//303 148//303 62//303 936 | f 151//304 153//304 73//304 937 | f 160//305 159//305 141//305 938 | f 65//306 158//306 27//306 939 | f 156//307 160//307 128//307 940 | f 155//308 160//308 156//308 941 | f 164//309 161//309 121//309 942 | f 144//310 125//310 75//310 943 | f 36//311 164//311 121//311 944 | f 161//312 163//312 162//312 945 | f 70//313 68//313 161//313 946 | f 66//314 33//314 144//314 947 | f 68//315 66//315 163//315 948 | usemtl Fox_BrownBlack_001 949 | f 110//316 114//316 165//316 950 | f 111//317 113//317 166//317 951 | f 110//318 165//318 167//318 952 | f 168//319 167//319 169//319 953 | f 113//320 112//321 168//322 954 | f 165//323 111//323 170//323 955 | f 109//324 110//324 167//324 956 | f 112//325 109//325 167//325 957 | f 171//326 166//326 172//326 958 | f 171//327 172//327 173//327 959 | f 168//328 169//328 173//328 960 | f 169//329 167//329 174//329 961 | f 167//330 175//330 174//330 962 | f 175//331 170//331 171//331 963 | f 118//332 116//332 176//332 964 | f 31//333 118//333 177//333 965 | f 120//334 119//334 178//334 966 | f 119//335 18//335 179//335 967 | f 18//336 31//336 179//336 968 | f 116//337 120//337 180//337 969 | f 181//338 179//338 182//338 970 | f 182//339 183//339 184//339 971 | f 179//340 177//340 182//340 972 | f 177//341 185//341 183//341 973 | f 180//342 178//342 186//342 974 | f 178//343 179//343 181//343 975 | f 185//344 180//344 184//344 976 | f 112//345 108//345 109//345 977 | f 109//346 107//346 110//346 978 | f 114//347 106//347 111//347 979 | f 113//348 30//348 112//348 980 | f 165//349 114//349 111//349 981 | f 110//350 105//350 114//350 982 | f 170//351 111//351 166//351 983 | f 167//352 165//352 175//352 984 | f 166//353 113//320 168//322 985 | f 175//354 165//354 170//354 986 | f 168//355 112//355 167//355 987 | f 172//356 166//356 168//356 988 | f 174//357 171//357 173//357 989 | f 168//358 173//358 172//358 990 | f 173//359 169//359 174//359 991 | f 171//360 170//360 166//360 992 | f 174//361 175//361 171//361 993 | f 118//362 88//362 116//362 994 | f 176//363 116//363 185//363 995 | f 179//364 31//364 177//364 996 | f 180//365 120//365 178//365 997 | f 178//366 119//366 179//366 998 | f 177//367 118//367 176//367 999 | f 185//368 116//368 180//368 1000 | f 183//369 185//369 184//369 1001 | f 177//370 176//370 185//370 1002 | f 181//371 182//371 186//371 1003 | f 186//372 182//372 184//372 1004 | f 182//373 177//373 183//373 1005 | f 184//374 180//374 186//374 1006 | f 186//375 178//375 181//375 1007 | f 150//376 187//376 154//376 1008 | f 151//377 188//377 153//377 1009 | f 150//378 189//378 187//378 1010 | f 190//379 191//379 189//379 1011 | f 153//380 190//381 152//382 1012 | f 187//383 192//383 151//383 1013 | f 149//384 189//384 150//384 1014 | f 152//385 189//385 149//385 1015 | f 193//386 194//386 188//386 1016 | f 193//387 195//387 194//387 1017 | f 190//388 195//388 191//388 1018 | f 191//389 196//389 189//389 1019 | f 189//390 196//390 197//390 1020 | f 197//391 193//391 192//391 1021 | f 157//392 198//392 155//392 1022 | f 65//393 199//393 157//393 1023 | f 160//394 200//394 159//394 1024 | f 159//395 201//395 56//395 1025 | f 56//396 201//396 65//396 1026 | f 155//397 202//397 160//397 1027 | f 203//398 204//398 201//398 1028 | f 204//399 205//399 206//399 1029 | f 201//400 204//400 199//400 1030 | f 199//401 206//401 207//401 1031 | f 202//402 208//402 200//402 1032 | f 200//403 203//403 201//403 1033 | f 207//404 205//404 202//404 1034 | f 152//405 149//405 148//405 1035 | f 149//406 150//406 147//406 1036 | f 154//407 151//407 146//407 1037 | f 153//408 152//408 64//408 1038 | f 187//409 151//409 154//409 1039 | f 150//410 154//410 145//410 1040 | f 192//411 188//411 151//411 1041 | f 189//412 197//412 187//412 1042 | f 188//413 190//381 153//380 1043 | f 197//414 192//414 187//414 1044 | f 190//415 189//415 152//415 1045 | f 194//416 190//416 188//416 1046 | f 196//417 195//417 193//417 1047 | f 190//418 194//418 195//418 1048 | f 195//419 196//419 191//419 1049 | f 193//420 188//420 192//420 1050 | f 196//421 193//421 197//421 1051 | f 157//422 155//422 137//422 1052 | f 198//423 207//423 155//423 1053 | f 201//424 199//424 65//424 1054 | f 202//425 200//425 160//425 1055 | f 200//426 201//426 159//426 1056 | f 199//427 198//427 157//427 1057 | f 207//428 202//428 155//428 1058 | f 206//429 205//429 207//429 1059 | f 199//430 207//430 198//430 1060 | f 203//431 208//431 204//431 1061 | f 208//432 205//432 204//432 1062 | f 204//433 206//433 199//433 1063 | f 205//434 208//434 202//434 1064 | f 208//435 203//435 200//435 1065 | usemtl Fox_nose_001 1066 | f 14//436 12//437 23//437 1067 | f 53//438 23//437 12//437 1068 | -------------------------------------------------------------------------------- /resources/objects/linux.mtl: -------------------------------------------------------------------------------- 1 | # Blender MTL File: 'linux.blend' 2 | # Material Count: 3 3 | 4 | newmtl black 5 | Ns 225.000000 6 | Ka 1.000000 1.000000 1.000000 7 | Kd 0.020379 0.020379 0.020379 8 | Ks 0.500000 0.500000 0.500000 9 | Ke 0.000000 0.000000 0.000000 10 | Ni 1.000000 11 | d 1.000000 12 | illum 2 13 | 14 | newmtl orange 15 | Ns 225.000000 16 | Ka 1.000000 1.000000 1.000000 17 | Kd 0.800000 0.205095 0.005634 18 | Ks 0.500000 0.500000 0.500000 19 | Ke 0.000000 0.000000 0.000000 20 | Ni 1.000000 21 | d 1.000000 22 | illum 2 23 | 24 | newmtl white 25 | Ns 225.000000 26 | Ka 1.000000 1.000000 1.000000 27 | Kd 0.841203 0.841203 0.841203 28 | Ks 0.500000 0.500000 0.500000 29 | Ke 0.000000 0.000000 0.000000 30 | Ni 1.000000 31 | d 1.000000 32 | illum 2 33 | -------------------------------------------------------------------------------- /resources/objects/pslogo.mtl: -------------------------------------------------------------------------------- 1 | # pslogo.mtl 2 | 3 | newmtl Untextured 4 | Ka 1.000000 1.000000 1.000000 5 | Kd 1.000000 1.000000 1.000000 6 | Ks 0.500000 0.500000 0.500000 7 | d 1.000000 8 | illum 2 9 | 10 | newmtl red 11 | Ka 1.000000 1.000000 1.000000 12 | Kd 0.733333 0.000000 0.113725 13 | Ks 0.500000 0.500000 0.500000 14 | d 1.000000 15 | illum 2 16 | 17 | newmtl blue 18 | Ka 1.000000 1.000000 1.000000 19 | Kd 0.152941 0.356863 0.592157 20 | Ks 0.500000 0.500000 0.500000 21 | d 1.000000 22 | illum 2 23 | 24 | newmtl green 25 | Ka 1.000000 1.000000 1.000000 26 | Kd 0.000000 0.564706 0.525490 27 | Ks 0.500000 0.500000 0.500000 28 | d 1.000000 29 | illum 2 30 | 31 | newmtl yellow 32 | Ka 1.000000 1.000000 1.000000 33 | Kd 0.803922 0.639216 0.003922 34 | Ks 0.500000 0.500000 0.500000 35 | d 1.000000 36 | illum 2 37 | 38 | -------------------------------------------------------------------------------- /resources/objects/pslogo.obj: -------------------------------------------------------------------------------- 1 | # Blender v2.83.0 OBJ File: '' 2 | # www.blender.org 3 | mtllib pslogo.mtl 4 | o pslogo 5 | v 118.000000 266.999451 729.000183 6 | v 118.000000 278.999451 729.000183 7 | v 150.000000 278.999451 696.000183 8 | v 118.000000 596.999451 729.000427 9 | v 150.000000 626.999451 696.000427 10 | v 150.000000 596.999451 696.000427 11 | v 118.000000 626.999451 729.000427 12 | v -22.000000 774.999451 589.000427 13 | v 76.000000 774.999451 622.000427 14 | v 10.000000 774.999634 556.000427 15 | v 44.000000 774.999451 655.000427 16 | v 44.000000 626.999451 655.000427 17 | v 76.000000 596.999451 622.000427 18 | v 76.000000 626.999451 622.000427 19 | v 44.000000 596.999451 655.000427 20 | v 173.000000 767.999451 784.000427 21 | v 262.000000 748.999451 808.000427 22 | v 205.000000 767.999451 751.000427 23 | v 310.000000 662.999451 921.000427 24 | v 361.000000 596.999451 907.000427 25 | v 343.000000 662.999451 889.000427 26 | v 328.000000 596.999207 939.000427 27 | v 44.000000 774.999451 655.000427 28 | v 150.000000 774.999451 696.000427 29 | v 76.000000 774.999451 622.000427 30 | v 118.000000 774.999451 729.000427 31 | v 323.000000 418.999390 935.000183 32 | v 335.000000 360.999390 880.000183 33 | v 356.000000 418.999390 902.000183 34 | v 302.000000 360.999390 913.000183 35 | v 118.000000 278.999451 729.000183 36 | v 150.000000 418.999451 696.000183 37 | v 150.000000 278.999451 696.000183 38 | v 118.000000 418.999451 729.000183 39 | v 150.000000 596.999451 696.000427 40 | v 118.000000 596.999451 729.000427 41 | v 44.000000 63.999565 655.000000 42 | v 76.000000 -114.000397 622.000000 43 | v 76.000000 63.999584 622.000000 44 | v 44.000000 -114.000412 655.000000 45 | v -148.000000 -114.000252 462.999817 46 | v -115.000000 63.999722 431.000000 47 | v -115.000000 -114.000237 430.999817 48 | v -148.000000 63.999687 463.000000 49 | v 44.000000 241.999573 655.000183 50 | v 76.000000 241.999573 622.000183 51 | v -115.000000 241.999634 431.000061 52 | v -148.000000 241.999634 463.000061 53 | v 44.000000 418.999603 655.000183 54 | v 76.000000 418.999603 622.000183 55 | v 44.000000 596.999451 655.000427 56 | v 76.000000 418.999603 622.000183 57 | v 76.000000 596.999451 622.000427 58 | v 44.000000 418.999603 655.000183 59 | v -148.000000 241.999634 463.000061 60 | v -115.000000 418.999756 431.000214 61 | v -115.000000 241.999634 431.000061 62 | v -148.000000 418.999756 463.000214 63 | v -115.000000 596.999634 431.000366 64 | v -148.000000 596.999634 463.000366 65 | v 81.000000 681.999451 692.000427 66 | v 66.000000 676.999451 677.000427 67 | v 99.000000 676.999451 644.000427 68 | v 118.000000 774.999451 729.000427 69 | v 205.000000 767.999451 751.000427 70 | v 150.000000 774.999451 696.000427 71 | v 173.000000 767.999451 784.000427 72 | v 118.000000 626.999451 729.000427 73 | v 229.000000 626.999451 840.000427 74 | v 118.000000 748.999451 729.000427 75 | v 229.000000 748.999451 840.000427 76 | v 118.000000 596.999451 729.000427 77 | v 229.000000 596.999451 840.000427 78 | v -22.000000 626.999451 589.000427 79 | v 44.000000 626.999451 655.000427 80 | v -22.000000 774.999451 589.000427 81 | v 44.000000 774.999451 655.000427 82 | v -22.000000 596.999451 589.000427 83 | v 328.000000 596.999207 939.000427 84 | v 229.000000 596.999451 840.000427 85 | v 332.000000 511.999390 943.000183 86 | v 229.000000 418.999451 840.000183 87 | v 229.000000 748.999451 840.000427 88 | v 229.000000 708.999451 840.000427 89 | v 281.000000 708.999451 892.000427 90 | v 229.000000 662.999451 840.000427 91 | v 310.000000 662.999451 921.000427 92 | v 118.000000 748.999451 729.000427 93 | v 173.000000 767.999451 784.000427 94 | v 271.000000 314.999390 882.000183 95 | v 229.000000 360.999451 840.000183 96 | v 229.000000 278.999451 840.000183 97 | v 118.000000 418.999451 729.000183 98 | v 118.000000 596.999451 729.000427 99 | v -22.000000 -226.000381 588.999634 100 | v 44.000000 -226.000412 654.999634 101 | v -22.000000 -114.000397 589.000000 102 | v 44.000000 -114.000412 655.000000 103 | v -148.000000 -226.000244 462.999817 104 | v -148.000000 -114.000252 462.999817 105 | v -22.000000 63.999607 589.000000 106 | v 44.000000 63.999565 655.000000 107 | v -148.000000 63.999687 463.000000 108 | v -22.000000 241.999603 589.000183 109 | v 44.000000 241.999573 655.000183 110 | v -148.000000 241.999634 463.000061 111 | v -22.000000 418.999603 589.000183 112 | v 44.000000 418.999603 655.000183 113 | v -22.000000 596.999451 589.000427 114 | v 44.000000 596.999451 655.000427 115 | v -148.000000 418.999756 463.000214 116 | v -148.000000 596.999634 463.000366 117 | v 66.000000 676.999451 677.000427 118 | v 81.000000 681.999451 692.000427 119 | v 44.000000 774.999451 655.000427 120 | v 118.000000 774.999451 729.000427 121 | v 118.000000 748.999451 729.000427 122 | v 173.000000 767.999451 784.000427 123 | v -22.000000 774.999451 589.000427 124 | v -148.000000 774.999634 463.000427 125 | v 150.000000 748.999451 696.000427 126 | v 262.000000 626.999451 808.000427 127 | v 150.000000 626.999451 696.000427 128 | v 262.000000 748.999451 808.000427 129 | v 262.000000 596.999451 808.000427 130 | v 150.000000 596.999451 696.000427 131 | v 10.000000 774.999634 556.000427 132 | v 76.000000 626.999451 622.000427 133 | v 10.000000 626.999634 556.000427 134 | v 76.000000 774.999451 622.000427 135 | v 76.000000 596.999451 622.000427 136 | v 10.000000 596.999634 556.000427 137 | v 205.000000 260.999451 751.000183 138 | v 150.000000 266.999451 696.000183 139 | v 150.000000 278.999451 696.000183 140 | v 262.000000 278.999451 808.000183 141 | v 364.000000 511.999390 910.000183 142 | v 262.000000 596.999451 808.000427 143 | v 361.000000 596.999451 907.000427 144 | v 262.000000 418.999451 808.000183 145 | v 313.000000 708.999451 859.000427 146 | v 262.000000 708.999451 808.000427 147 | v 262.000000 748.999451 808.000427 148 | v 262.000000 662.999451 808.000427 149 | v 343.000000 662.999451 889.000427 150 | v 205.000000 767.999451 751.000427 151 | v 150.000000 748.999451 696.000427 152 | v 150.000000 774.999451 696.000427 153 | v 113.000000 681.999451 659.000427 154 | v 335.000000 360.999390 880.000183 155 | v 356.000000 418.999390 902.000183 156 | v 150.000000 418.999451 696.000183 157 | v 262.000000 278.999451 808.000183 158 | v 150.000000 278.999451 696.000183 159 | v 262.000000 418.999451 808.000183 160 | v 150.000000 596.999451 696.000427 161 | v 262.000000 596.999451 808.000427 162 | v 10.000000 -114.000381 556.000000 163 | v 76.000000 -226.000412 621.999634 164 | v 10.000000 -226.000381 555.999634 165 | v 76.000000 -114.000397 622.000000 166 | v -115.000000 -114.000237 430.999817 167 | v -115.000000 -226.000244 430.999817 168 | v 10.000000 63.999626 556.000000 169 | v 76.000000 63.999584 622.000000 170 | v -115.000000 63.999722 431.000000 171 | v 10.000000 241.999603 556.000183 172 | v 76.000000 241.999573 622.000183 173 | v -115.000000 241.999634 431.000061 174 | v 10.000000 418.999603 556.000183 175 | v 76.000000 418.999603 622.000183 176 | v 10.000000 596.999634 556.000427 177 | v 76.000000 596.999451 622.000427 178 | v -115.000000 418.999756 431.000214 179 | v -115.000000 596.999634 431.000366 180 | v 76.000000 774.999451 622.000427 181 | v 113.000000 681.999451 659.000427 182 | v 99.000000 676.999451 644.000427 183 | v 205.000000 767.999451 751.000427 184 | v 150.000000 748.999451 696.000427 185 | v 150.000000 774.999451 696.000427 186 | v -115.000000 774.999634 431.000427 187 | v 10.000000 774.999634 556.000427 188 | v 172.000000 260.999451 784.000183 189 | v 150.000000 266.999451 696.000183 190 | v 205.000000 260.999451 751.000183 191 | v 229.000000 278.999451 840.000183 192 | v 262.000000 278.999451 808.000183 193 | v 328.000000 596.999207 939.000427 194 | v 364.000000 511.999390 910.000183 195 | v 361.000000 596.999451 907.000427 196 | v 332.000000 511.999390 943.000183 197 | v 356.000000 418.999390 902.000183 198 | v 323.000000 418.999390 935.000183 199 | v 229.000000 748.999451 840.000427 200 | v 313.000000 708.999451 859.000427 201 | v 262.000000 748.999451 808.000427 202 | v 281.000000 708.999451 892.000427 203 | v 343.000000 662.999451 889.000427 204 | v 310.000000 662.999451 921.000427 205 | v 229.000000 748.999451 840.000427 206 | v 108.000000 661.999451 719.000427 207 | v 128.000000 676.999451 674.000427 208 | v 141.000000 661.999451 686.000427 209 | v 95.000000 676.999451 707.000427 210 | v 118.000000 626.999451 729.000427 211 | v 150.000000 626.999451 696.000427 212 | v 113.000000 681.999451 659.000427 213 | v 81.000000 681.999451 692.000427 214 | v 66.000000 676.999451 677.000427 215 | v 86.000000 661.999451 632.000427 216 | v 99.000000 676.999451 644.000427 217 | v 53.000000 661.999451 665.000427 218 | v 76.000000 626.999451 622.000427 219 | v 44.000000 626.999451 655.000427 220 | v 271.000000 314.999390 882.000183 221 | v 262.000000 278.999451 808.000183 222 | v 304.000000 314.999390 850.000183 223 | v 229.000000 278.999451 840.000183 224 | v 302.000000 360.999390 913.000183 225 | v 335.000000 360.999390 880.000183 226 | v 44.000000 -226.000412 654.999634 227 | v 10.000000 -226.000381 555.999634 228 | v 76.000000 -226.000412 621.999634 229 | v -22.000000 -226.000381 588.999634 230 | v -148.000000 -226.000244 462.999817 231 | v -115.000000 -226.000244 430.999817 232 | v 113.000000 681.999451 659.000427 233 | v -148.000000 774.999634 463.000427 234 | v 10.000000 774.999634 556.000427 235 | v -115.000000 774.999634 431.000427 236 | v 118.000000 278.999451 729.000183 237 | v 118.000000 266.999451 729.000183 238 | v 172.000000 260.999451 784.000183 239 | v 323.000000 418.999390 935.000183 240 | v 44.000000 774.999451 655.000427 241 | v 81.000000 681.999451 692.000427 242 | v 118.000000 774.999451 729.000427 243 | v 95.000000 676.999451 707.000427 244 | v 108.000000 661.999451 719.000427 245 | v 118.000000 626.999451 729.000427 246 | v 53.000000 661.999451 665.000427 247 | v 66.000000 676.999451 677.000427 248 | v 44.000000 626.999451 655.000427 249 | v 302.000000 360.999390 913.000183 250 | v 141.000000 661.999451 686.000427 251 | v 128.000000 676.999451 674.000427 252 | v 150.000000 626.999451 696.000427 253 | v 99.000000 676.999451 644.000427 254 | v 86.000000 661.999451 632.000427 255 | v 262.000000 360.999451 808.000183 256 | v 304.000000 314.999390 850.000183 257 | v 213.000000 -185.000244 478.999817 258 | v 156.000000 -231.000381 535.999695 259 | v 213.000000 -231.000244 478.999817 260 | v 156.000000 -185.000381 536.000000 261 | v -2.000000 -185.000214 378.999817 262 | v 55.000000 -231.000183 321.999817 263 | v -2.000000 -231.000214 378.999817 264 | v 55.000000 -185.000183 321.999817 265 | v -50.000000 -185.000061 215.999832 266 | v -108.000000 -231.000183 271.999817 267 | v -50.000000 -231.000061 215.999832 268 | v -108.000000 -185.000183 271.999817 269 | v -318.000000 -184.999969 -52.000118 270 | v -375.000000 -231.000000 4.999849 271 | v -318.000000 -230.999969 -52.000145 272 | v -375.000000 -185.000000 4.999880 273 | v -535.000000 -184.999832 -154.000061 274 | v -481.000000 -230.999832 -215.000061 275 | v -535.000000 -230.999832 -154.000061 276 | v -481.000000 -184.999832 -215.000061 277 | v 70.000000 -231.000412 621.999634 278 | v 70.000000 -185.000412 622.000000 279 | v -422.000000 -185.000031 127.999832 280 | v -394.000000 -231.000061 152.999832 281 | v -422.000000 -231.000031 127.999817 282 | v -394.000000 -185.000061 152.999832 283 | v -108.000000 -185.000183 271.999817 284 | v -191.000000 -231.000214 327.999817 285 | v -108.000000 -231.000183 271.999817 286 | v -191.000000 -185.000214 327.999817 287 | v -87.000000 -185.000244 463.999817 288 | v -2.000000 -231.000214 378.999817 289 | v -87.000000 -231.000244 463.999817 290 | v -2.000000 -185.000214 378.999817 291 | v 156.000000 -185.000381 536.000000 292 | v 213.000000 -185.000244 478.999817 293 | v 90.000000 -185.000244 470.999817 294 | v 147.000000 -185.000214 413.999817 295 | v 55.000000 -185.000183 321.999817 296 | v -161.000000 -185.000061 218.999832 297 | v -104.000000 -185.000061 161.999832 298 | v -274.000000 -185.000031 106.999840 299 | v -217.000000 -185.000031 49.999866 300 | v -50.000000 -185.000061 215.999832 301 | v -375.000000 -185.000000 4.999880 302 | v -318.000000 -184.999969 -52.000118 303 | v -413.000000 -185.000000 -32.000122 304 | v -356.000000 -184.999969 -89.000122 305 | v -535.000000 -184.999832 -154.000061 306 | v -481.000000 -184.999832 -215.000061 307 | v 70.000000 -185.000412 622.000000 308 | v 5.000000 -185.000381 556.000000 309 | v -311.000000 -185.000061 140.999832 310 | v -422.000000 -185.000031 127.999832 311 | v -413.000000 -185.000061 218.999832 312 | v -394.000000 -185.000061 152.999832 313 | v -355.000000 -185.000061 160.999832 314 | v -411.000000 -185.000000 44.999866 315 | v -413.000000 -185.000000 -32.000122 316 | v -538.000000 -185.000031 93.999870 317 | v -411.000000 -185.000000 44.999866 318 | v -431.000000 -185.000031 89.999870 319 | v -422.000000 -185.000031 127.999832 320 | v -413.000000 -185.000061 218.999832 321 | v -287.000000 -185.000214 344.999817 322 | v -355.000000 -185.000061 160.999832 323 | v -311.000000 -185.000061 140.999832 324 | v -161.000000 -185.000061 218.999832 325 | v -535.000000 -184.999832 -154.000061 326 | v -586.000000 -184.999969 -68.000122 327 | v -611.000000 -185.000000 20.999878 328 | v -591.000000 -185.000061 146.999832 329 | v -541.000000 -185.000061 227.999832 330 | v -481.000000 -185.000183 287.999817 331 | v -392.000000 -185.000214 340.999817 332 | v -299.000000 -185.000214 356.999817 333 | v -191.000000 -185.000214 327.999817 334 | v -108.000000 -185.000183 271.999817 335 | v -2.000000 -185.000214 378.999817 336 | v -87.000000 -185.000244 463.999817 337 | v 90.000000 -185.000244 470.999817 338 | v 5.000000 -185.000381 556.000000 339 | v 156.000000 -185.000381 536.000000 340 | v 90.000000 -231.000244 470.999817 341 | v 213.000000 -231.000244 478.999817 342 | v 156.000000 -231.000381 535.999695 343 | v 147.000000 -231.000214 413.999817 344 | v -2.000000 -231.000214 378.999817 345 | v 55.000000 -231.000183 321.999817 346 | v -274.000000 -231.000031 106.999825 347 | v -104.000000 -231.000061 161.999832 348 | v -161.000000 -231.000061 218.999832 349 | v -217.000000 -231.000031 49.999844 350 | v -50.000000 -231.000061 215.999832 351 | v -108.000000 -231.000183 271.999817 352 | v -413.000000 -231.000000 -32.000145 353 | v -318.000000 -230.999969 -52.000145 354 | v -375.000000 -231.000000 4.999849 355 | v -356.000000 -230.999969 -89.000145 356 | v -535.000000 -230.999832 -154.000061 357 | v -481.000000 -230.999832 -215.000061 358 | v 5.000000 -231.000381 555.999634 359 | v 156.000000 -231.000381 535.999695 360 | v 70.000000 -231.000412 621.999634 361 | v -311.000000 -231.000061 140.999832 362 | v -394.000000 -231.000061 152.999832 363 | v -413.000000 -231.000061 218.999832 364 | v -422.000000 -231.000031 127.999817 365 | v -355.000000 -231.000061 160.999832 366 | v -411.000000 -231.000000 44.999844 367 | v -538.000000 -231.000031 93.999840 368 | v -431.000000 -231.000031 89.999840 369 | v -287.000000 -231.000214 344.999817 370 | v -586.000000 -230.999969 -68.000145 371 | v -611.000000 -231.000000 20.999844 372 | v -591.000000 -231.000061 146.999832 373 | v -541.000000 -231.000061 227.999832 374 | v -481.000000 -231.000183 287.999817 375 | v -392.000000 -231.000214 340.999817 376 | v -299.000000 -231.000214 356.999817 377 | v -191.000000 -231.000214 327.999817 378 | v 90.000000 -231.000244 470.999817 379 | v -87.000000 -231.000244 463.999817 380 | v -2.000000 -231.000214 378.999817 381 | v 5.000000 -231.000381 555.999634 382 | v 156.000000 -231.000381 535.999695 383 | v -274.000000 -185.000031 106.999840 384 | v -217.000000 -231.000031 49.999844 385 | v -274.000000 -231.000031 106.999825 386 | v -217.000000 -185.000031 49.999866 387 | v -311.000000 -185.000061 140.999832 388 | v -311.000000 -231.000061 140.999832 389 | v -394.000000 -185.000061 152.999832 390 | v -355.000000 -231.000061 160.999832 391 | v -394.000000 -231.000061 152.999832 392 | v -355.000000 -185.000061 160.999832 393 | v -375.000000 -185.000000 4.999880 394 | v -411.000000 -231.000000 44.999844 395 | v -375.000000 -231.000000 4.999849 396 | v -411.000000 -185.000000 44.999866 397 | v -431.000000 -231.000031 89.999840 398 | v -431.000000 -185.000031 89.999870 399 | v -422.000000 -231.000031 127.999817 400 | v -422.000000 -185.000031 127.999832 401 | v -311.000000 -231.000061 140.999832 402 | v -311.000000 -185.000061 140.999832 403 | v -586.000000 -184.999969 -68.000122 404 | v -535.000000 -230.999832 -154.000061 405 | v -586.000000 -230.999969 -68.000145 406 | v -535.000000 -184.999832 -154.000061 407 | v -611.000000 -185.000000 20.999878 408 | v -611.000000 -231.000000 20.999844 409 | v -591.000000 -185.000061 146.999832 410 | v -591.000000 -231.000061 146.999832 411 | v -541.000000 -185.000061 227.999832 412 | v -541.000000 -231.000061 227.999832 413 | v -481.000000 -185.000183 287.999817 414 | v -481.000000 -231.000183 287.999817 415 | v -392.000000 -185.000214 340.999817 416 | v -392.000000 -231.000214 340.999817 417 | v -299.000000 -185.000214 356.999817 418 | v -299.000000 -231.000214 356.999817 419 | v -191.000000 -185.000214 327.999817 420 | v -191.000000 -231.000214 327.999817 421 | v 530.000000 -185.000061 155.999832 422 | v 475.000000 -231.000061 213.999832 423 | v 530.000000 -231.000061 155.999832 424 | v 475.000000 -185.000061 213.999832 425 | v 319.000000 -185.000031 57.999866 426 | v 375.000000 -231.000000 1.999848 427 | v 319.000000 -231.000031 57.999844 428 | v 375.000000 -185.000000 1.999880 429 | v 48.000000 -184.999832 -214.000061 430 | v 104.000000 -230.999802 -270.000061 431 | v 48.000000 -230.999832 -214.000061 432 | v 104.000000 -184.999802 -270.000061 433 | v 271.000000 -184.999969 -103.000160 434 | v 215.000000 -230.999969 -47.000145 435 | v 271.000000 -230.999969 -103.000175 436 | v 215.000000 -184.999969 -47.000118 437 | v 2.000000 -184.999771 -372.000061 438 | v -54.000000 -230.999802 -316.000061 439 | v 2.000000 -230.999771 -372.000061 440 | v -54.000000 -184.999802 -316.000061 441 | v -217.000000 -184.999649 -479.000061 442 | v -161.000000 -230.999619 -535.000183 443 | v -217.000000 -230.999649 -479.000061 444 | v -161.000000 -184.999619 -535.000000 445 | v -102.000000 -184.999619 -594.000000 446 | v 24.000000 -230.999649 -468.000061 447 | v -102.000000 -230.999619 -594.000183 448 | v -102.000000 -184.999619 -594.000000 449 | v 24.000000 -184.999649 -468.000061 450 | v 24.000000 -230.999649 -468.000061 451 | v -161.000000 -184.999619 -535.000000 452 | v -102.000000 -230.999619 -594.000183 453 | v -161.000000 -230.999619 -535.000183 454 | v 475.000000 -185.000061 213.999832 455 | v 530.000000 -185.000061 155.999832 456 | v 411.000000 -185.000061 149.999832 457 | v 467.000000 -185.000031 93.999870 458 | v 319.000000 -185.000031 57.999866 459 | v 375.000000 -185.000000 1.999880 460 | v 160.000000 -184.999969 -102.000160 461 | v 216.000000 -184.999832 -158.000061 462 | v 48.000000 -184.999832 -214.000061 463 | v 104.000000 -184.999802 -270.000061 464 | v 215.000000 -184.999969 -47.000118 465 | v 271.000000 -184.999969 -103.000160 466 | v 2.000000 -184.999771 -372.000061 467 | v -92.000000 -184.999771 -353.000061 468 | v -54.000000 -184.999802 -316.000061 469 | v -36.000000 -184.999771 -409.000061 470 | v -217.000000 -184.999649 -479.000061 471 | v -161.000000 -184.999619 -535.000000 472 | v -102.000000 -184.999619 -594.000000 473 | v 24.000000 -184.999649 -468.000061 474 | v 488.000000 -184.999802 -285.000061 475 | v 402.000000 -184.999771 -344.000061 476 | v 467.000000 -184.999832 -158.000061 477 | v 399.000000 -184.999969 -134.000061 478 | v 342.000000 -184.999802 -283.000061 479 | v 358.000000 -184.999832 -152.000061 480 | v 309.000000 -184.999969 -134.000061 481 | v 216.000000 -184.999832 -158.000061 482 | v 271.000000 -184.999969 -103.000160 483 | v 467.000000 -185.000031 93.999870 484 | v 593.000000 -185.000000 -32.000122 485 | v 375.000000 -185.000000 1.999880 486 | v 414.000000 -184.999969 -51.000118 487 | v 418.000000 -184.999969 -108.000160 488 | v 332.000000 -184.999771 -365.000061 489 | v 263.000000 -184.999771 -362.000061 490 | v 179.000000 -184.999802 -327.000061 491 | v 104.000000 -184.999802 -270.000061 492 | v 61.000000 -184.999649 -431.000061 493 | v 530.000000 -185.000061 155.999832 494 | v 580.000000 -185.000031 70.999870 495 | v 605.000000 -185.000000 -20.000120 496 | v 608.000000 -184.999969 -47.000118 497 | v 594.000000 -184.999832 -141.000061 498 | v 594.000000 -184.999832 -141.000061 499 | v 541.000000 -184.999832 -232.000061 500 | v 467.000000 -184.999832 -158.000061 501 | v 488.000000 -184.999802 -285.000061 502 | v 411.000000 -231.000061 149.999832 503 | v 530.000000 -231.000061 155.999832 504 | v 475.000000 -231.000061 213.999832 505 | v 467.000000 -231.000031 93.999840 506 | v 319.000000 -231.000031 57.999844 507 | v 375.000000 -231.000000 1.999848 508 | v 48.000000 -230.999832 -214.000061 509 | v 216.000000 -230.999832 -158.000061 510 | v 160.000000 -230.999969 -102.000175 511 | v 104.000000 -230.999802 -270.000061 512 | v 271.000000 -230.999969 -103.000175 513 | v 215.000000 -230.999969 -47.000145 514 | v -54.000000 -230.999802 -316.000061 515 | v -92.000000 -230.999771 -353.000061 516 | v 2.000000 -230.999771 -372.000061 517 | v -36.000000 -230.999771 -409.000061 518 | v -217.000000 -230.999649 -479.000061 519 | v -161.000000 -230.999619 -535.000183 520 | v 24.000000 -230.999649 -468.000061 521 | v -102.000000 -230.999619 -594.000183 522 | v 467.000000 -230.999832 -158.000061 523 | v 402.000000 -230.999771 -344.000061 524 | v 488.000000 -230.999802 -285.000061 525 | v 358.000000 -230.999832 -152.000061 526 | v 342.000000 -230.999802 -283.000061 527 | v 399.000000 -230.999969 -134.000061 528 | v 309.000000 -230.999969 -134.000061 529 | v 593.000000 -231.000000 -32.000145 530 | v 414.000000 -230.999969 -51.000145 531 | v 593.000000 -231.000000 -32.000145 532 | v 375.000000 -231.000000 1.999848 533 | v 418.000000 -230.999969 -108.000175 534 | v 467.000000 -230.999832 -158.000061 535 | v 399.000000 -230.999969 -134.000061 536 | v 342.000000 -230.999802 -283.000061 537 | v 402.000000 -230.999771 -344.000061 538 | v 332.000000 -230.999771 -365.000061 539 | v 263.000000 -230.999771 -362.000061 540 | v 216.000000 -230.999832 -158.000061 541 | v 179.000000 -230.999802 -327.000061 542 | v 104.000000 -230.999802 -270.000061 543 | v 2.000000 -230.999771 -372.000061 544 | v -36.000000 -230.999771 -409.000061 545 | v 61.000000 -230.999649 -431.000061 546 | v 24.000000 -230.999649 -468.000061 547 | v -161.000000 -230.999619 -535.000183 548 | v 467.000000 -231.000031 93.999840 549 | v 580.000000 -231.000031 70.999840 550 | v 530.000000 -231.000061 155.999832 551 | v 605.000000 -231.000000 -20.000156 552 | v 608.000000 -230.999969 -47.000145 553 | v 594.000000 -230.999832 -141.000061 554 | v 541.000000 -230.999832 -232.000061 555 | v 488.000000 -230.999802 -285.000061 556 | v 402.000000 -184.999771 -344.000061 557 | v 488.000000 -230.999802 -285.000061 558 | v 402.000000 -230.999771 -344.000061 559 | v 488.000000 -184.999802 -285.000061 560 | v 399.000000 -184.999969 -134.000061 561 | v 358.000000 -230.999832 -152.000061 562 | v 399.000000 -230.999969 -134.000061 563 | v 358.000000 -184.999832 -152.000061 564 | v 309.000000 -230.999969 -134.000061 565 | v 309.000000 -184.999969 -134.000061 566 | v 271.000000 -230.999969 -103.000175 567 | v 271.000000 -184.999969 -103.000160 568 | v 375.000000 -185.000000 1.999880 569 | v 414.000000 -230.999969 -51.000145 570 | v 375.000000 -231.000000 1.999848 571 | v 414.000000 -184.999969 -51.000118 572 | v 418.000000 -230.999969 -108.000175 573 | v 418.000000 -184.999969 -108.000160 574 | v 332.000000 -184.999771 -365.000061 575 | v 332.000000 -230.999771 -365.000061 576 | v 263.000000 -184.999771 -362.000061 577 | v 263.000000 -230.999771 -362.000061 578 | v 179.000000 -184.999802 -327.000061 579 | v 179.000000 -230.999802 -327.000061 580 | v 104.000000 -184.999802 -270.000061 581 | v 104.000000 -230.999802 -270.000061 582 | v 61.000000 -184.999649 -431.000061 583 | v 2.000000 -230.999771 -372.000061 584 | v 61.000000 -230.999649 -431.000061 585 | v 2.000000 -184.999771 -372.000061 586 | v 24.000000 -184.999649 -468.000061 587 | v 24.000000 -230.999649 -468.000061 588 | v 580.000000 -185.000031 70.999870 589 | v 530.000000 -231.000061 155.999832 590 | v 580.000000 -231.000031 70.999840 591 | v 605.000000 -185.000000 -20.000120 592 | v 605.000000 -231.000000 -20.000156 593 | v 608.000000 -184.999969 -47.000118 594 | v 608.000000 -230.999969 -47.000145 595 | v 594.000000 -184.999832 -141.000061 596 | v 594.000000 -230.999832 -141.000061 597 | v 541.000000 -184.999832 -232.000061 598 | v 541.000000 -230.999832 -232.000061 599 | v 488.000000 -184.999802 -285.000061 600 | v 488.000000 -230.999802 -285.000061 601 | v 281.000000 -185.000214 410.999817 602 | v 213.000000 -231.000244 478.999817 603 | v 281.000000 -231.000214 410.999817 604 | v 213.000000 -185.000244 478.999817 605 | v 55.000000 -185.000183 321.999817 606 | v 124.000000 -231.000183 252.999832 607 | v 55.000000 -231.000183 321.999817 608 | v 124.000000 -185.000183 252.999832 609 | v 475.000000 -185.000061 213.999832 610 | v 407.000000 -231.000183 284.999817 611 | v 475.000000 -231.000061 213.999832 612 | v 407.000000 -185.000183 284.999817 613 | v 250.000000 -185.000031 127.999832 614 | v 319.000000 -231.000031 57.999844 615 | v 250.000000 -231.000031 127.999817 616 | v 319.000000 -185.000031 57.999866 617 | v 215.000000 -184.999969 -47.000118 618 | v 145.000000 -231.000000 22.999844 619 | v 215.000000 -230.999969 -47.000145 620 | v 145.000000 -185.000000 22.999878 621 | v -22.000000 -184.999832 -144.000061 622 | v 48.000000 -230.999832 -214.000061 623 | v -22.000000 -230.999832 -144.000061 624 | v 48.000000 -184.999832 -214.000061 625 | v -217.000000 -185.000031 49.999866 626 | v -148.000000 -231.000000 -19.000156 627 | v -217.000000 -231.000031 49.999844 628 | v -148.000000 -185.000000 -19.000120 629 | v 19.000000 -185.000061 148.999832 630 | v -50.000000 -231.000061 215.999832 631 | v 19.000000 -231.000061 148.999832 632 | v -50.000000 -185.000061 215.999832 633 | v -249.000000 -184.999969 -120.000160 634 | v -318.000000 -230.999969 -52.000145 635 | v -249.000000 -230.999969 -120.000175 636 | v -318.000000 -184.999969 -52.000118 637 | v -54.000000 -184.999802 -316.000061 638 | v -124.000000 -230.999802 -246.000061 639 | v -54.000000 -230.999802 -316.000061 640 | v -124.000000 -184.999802 -246.000061 641 | v -481.000000 -184.999832 -215.000061 642 | v -413.000000 -230.999802 -283.000061 643 | v -481.000000 -230.999832 -215.000061 644 | v -413.000000 -184.999802 -283.000061 645 | v -287.000000 -184.999771 -409.000061 646 | v -217.000000 -230.999649 -479.000061 647 | v -287.000000 -230.999771 -409.000061 648 | v -217.000000 -184.999649 -479.000061 649 | v 407.000000 -185.000183 284.999817 650 | v 281.000000 -231.000214 410.999817 651 | v 407.000000 -231.000183 284.999817 652 | v 281.000000 -185.000214 410.999817 653 | v 124.000000 -185.000183 252.999832 654 | v 250.000000 -231.000031 127.999817 655 | v 124.000000 -231.000183 252.999832 656 | v 250.000000 -185.000031 127.999832 657 | v -249.000000 -230.999969 -120.000175 658 | v -249.000000 -184.999969 -120.000160 659 | v -148.000000 -185.000000 -19.000120 660 | v -22.000000 -230.999832 -144.000061 661 | v -148.000000 -231.000000 -19.000156 662 | v -22.000000 -184.999832 -144.000061 663 | v 145.000000 -185.000000 22.999878 664 | v 19.000000 -231.000061 148.999832 665 | v 145.000000 -231.000000 22.999844 666 | v 19.000000 -185.000061 148.999832 667 | v 213.000000 -185.000244 478.999817 668 | v 147.000000 -185.000214 413.999817 669 | v 147.000000 -185.000214 413.999817 670 | v 281.000000 -185.000214 410.999817 671 | v 216.000000 -185.000214 344.999817 672 | v 55.000000 -185.000183 321.999817 673 | v 124.000000 -185.000183 252.999832 674 | v 407.000000 -185.000183 284.999817 675 | v 475.000000 -185.000061 213.999832 676 | v 342.000000 -185.000061 218.999832 677 | v 411.000000 -185.000061 149.999832 678 | v 250.000000 -185.000031 127.999832 679 | v 319.000000 -185.000031 57.999866 680 | v 145.000000 -185.000000 22.999878 681 | v 215.000000 -184.999969 -47.000118 682 | v 90.000000 -185.000000 -32.000122 683 | v 160.000000 -184.999969 -102.000160 684 | v -22.000000 -184.999832 -144.000061 685 | v 48.000000 -184.999832 -214.000061 686 | v -104.000000 -185.000061 161.999832 687 | v -36.000000 -185.000031 93.999870 688 | v -217.000000 -185.000031 49.999866 689 | v -148.000000 -185.000000 -19.000120 690 | v -50.000000 -185.000061 215.999832 691 | v 19.000000 -185.000061 148.999832 692 | v -318.000000 -184.999969 -52.000118 693 | v -249.000000 -184.999969 -120.000160 694 | v -356.000000 -184.999969 -89.000122 695 | v -287.000000 -184.999832 -158.000061 696 | v -124.000000 -184.999802 -246.000061 697 | v -54.000000 -184.999802 -316.000061 698 | v -161.000000 -184.999802 -283.000061 699 | v -92.000000 -184.999771 -353.000061 700 | v -481.000000 -184.999832 -215.000061 701 | v -481.000000 -184.999832 -215.000061 702 | v -287.000000 -184.999832 -158.000061 703 | v -413.000000 -184.999802 -283.000061 704 | v -161.000000 -184.999802 -283.000061 705 | v -92.000000 -184.999771 -353.000061 706 | v -287.000000 -184.999771 -409.000061 707 | v -217.000000 -184.999649 -479.000061 708 | v 281.000000 -185.000214 410.999817 709 | v 407.000000 -185.000183 284.999817 710 | v 216.000000 -185.000214 344.999817 711 | v 342.000000 -185.000061 218.999832 712 | v 124.000000 -185.000183 252.999832 713 | v 250.000000 -185.000031 127.999832 714 | v -124.000000 -184.999802 -246.000061 715 | v -249.000000 -184.999969 -120.000160 716 | v -22.000000 -184.999832 -144.000061 717 | v -148.000000 -185.000000 -19.000120 718 | v 90.000000 -185.000000 -32.000122 719 | v -36.000000 -185.000031 93.999870 720 | v 19.000000 -185.000061 148.999832 721 | v 145.000000 -185.000000 22.999878 722 | v 147.000000 -231.000214 413.999817 723 | v 281.000000 -231.000214 410.999817 724 | v 213.000000 -231.000244 478.999817 725 | v 216.000000 -231.000214 344.999817 726 | v 55.000000 -231.000183 321.999817 727 | v 124.000000 -231.000183 252.999832 728 | v 342.000000 -231.000061 218.999832 729 | v 475.000000 -231.000061 213.999832 730 | v 407.000000 -231.000183 284.999817 731 | v 411.000000 -231.000061 149.999832 732 | v 250.000000 -231.000031 127.999817 733 | v 319.000000 -231.000031 57.999844 734 | v 411.000000 -231.000061 149.999832 735 | v 250.000000 -231.000031 127.999817 736 | v 90.000000 -231.000000 -32.000145 737 | v 215.000000 -230.999969 -47.000145 738 | v 145.000000 -231.000000 22.999844 739 | v 160.000000 -230.999969 -102.000175 740 | v -22.000000 -230.999832 -144.000061 741 | v 48.000000 -230.999832 -214.000061 742 | v -217.000000 -231.000031 49.999844 743 | v -36.000000 -231.000031 93.999840 744 | v -104.000000 -231.000061 161.999832 745 | v -148.000000 -231.000000 -19.000156 746 | v 19.000000 -231.000061 148.999832 747 | v -50.000000 -231.000061 215.999832 748 | v -356.000000 -230.999969 -89.000145 749 | v -249.000000 -230.999969 -120.000175 750 | v -318.000000 -230.999969 -52.000145 751 | v -287.000000 -230.999832 -158.000061 752 | v -161.000000 -230.999802 -283.000061 753 | v -54.000000 -230.999802 -316.000061 754 | v -124.000000 -230.999802 -246.000061 755 | v -92.000000 -230.999771 -353.000061 756 | v -481.000000 -230.999832 -215.000061 757 | v -413.000000 -230.999802 -283.000061 758 | v -287.000000 -230.999771 -409.000061 759 | v -217.000000 -230.999649 -479.000061 760 | v 216.000000 -231.000214 344.999817 761 | v 407.000000 -231.000183 284.999817 762 | v 281.000000 -231.000214 410.999817 763 | v 342.000000 -231.000061 218.999832 764 | v 124.000000 -231.000183 252.999832 765 | vt 0.000000 0.000000 766 | vt 0.000000 0.000000 767 | vt 0.000000 0.000000 768 | vt 0.000000 0.000000 769 | vt 0.000000 0.000000 770 | vt 0.000000 0.000000 771 | vt 0.000000 0.000000 772 | vt 0.000000 0.000000 773 | vt 0.000000 0.000000 774 | vt 0.000000 0.000000 775 | vt 0.000000 0.000000 776 | vt 0.000000 0.000000 777 | vt 0.000000 0.000000 778 | vt 0.000000 0.000000 779 | vt 0.000000 0.000000 780 | vt 0.000000 0.000000 781 | vt 0.000000 0.000000 782 | vt 0.000000 0.000000 783 | vt 0.000000 0.000000 784 | vt 0.000000 0.000000 785 | vt 0.000000 0.000000 786 | vt 0.000000 0.000000 787 | vt 0.000000 0.000000 788 | vt 0.000000 0.000000 789 | vt 0.000000 0.000000 790 | vt 0.000000 0.000000 791 | vt 0.000000 0.000000 792 | vt 0.000000 0.000000 793 | vt 0.000000 0.000000 794 | vt 0.000000 0.000000 795 | vt 0.000000 0.000000 796 | vt 0.000000 0.000000 797 | vt 0.000000 0.000000 798 | vt 0.000000 0.000000 799 | vt 0.000000 0.000000 800 | vt 0.000000 0.000000 801 | vt 0.000000 0.000000 802 | vt 0.000000 0.000000 803 | vt 0.000000 0.000000 804 | vt 0.000000 0.000000 805 | vt 0.000000 0.000000 806 | vt 0.000000 0.000000 807 | vt 0.000000 0.000000 808 | vt 0.000000 0.000000 809 | vt 0.000000 0.000000 810 | vt 0.000000 0.000000 811 | vt 0.000000 0.000000 812 | vt 0.000000 0.000000 813 | vt 0.000000 0.000000 814 | vt 0.000000 0.000000 815 | vt 0.000000 0.000000 816 | vt 0.000000 0.000000 817 | vt 0.000000 0.000000 818 | vt 0.000000 0.000000 819 | vt 0.000000 0.000000 820 | vt 0.000000 0.000000 821 | vt 0.000000 0.000000 822 | vt 0.000000 0.000000 823 | vt 0.000000 0.000000 824 | vt 0.000000 0.000000 825 | vt 0.000000 0.000000 826 | vt 0.000000 0.000000 827 | vt 0.000000 0.000000 828 | vt 0.000000 0.000000 829 | vt 0.000000 0.000000 830 | vt 0.000000 0.000000 831 | vt 0.000000 0.000000 832 | vt 0.000000 0.000000 833 | vt 0.000000 0.000000 834 | vt 0.000000 0.000000 835 | vt 0.000000 0.000000 836 | vt 0.000000 0.000000 837 | vt 0.000000 0.000000 838 | vt 0.000000 0.000000 839 | vt 0.000000 0.000000 840 | vt 0.000000 0.000000 841 | vt 0.000000 0.000000 842 | vt 0.000000 0.000000 843 | vt 0.000000 0.000000 844 | vt 0.000000 0.000000 845 | vt 0.000000 0.000000 846 | vt 0.000000 0.000000 847 | vt 0.000000 0.000000 848 | vt 0.000000 0.000000 849 | vt 0.000000 0.000000 850 | vt 0.000000 0.000000 851 | vt 0.000000 0.000000 852 | vt 0.000000 0.000000 853 | vt 0.000000 0.000000 854 | vt 0.000000 0.000000 855 | vt 0.000000 0.000000 856 | vt 0.000000 0.000000 857 | vt 0.000000 0.000000 858 | vt 0.000000 0.000000 859 | vt 0.000000 0.000000 860 | vt 0.000000 0.000000 861 | vt 0.000000 0.000000 862 | vt 0.000000 0.000000 863 | vt 0.000000 0.000000 864 | vt 0.000000 0.000000 865 | vt 0.000000 0.000000 866 | vt 0.000000 0.000000 867 | vt 0.000000 0.000000 868 | vt 0.000000 0.000000 869 | vt 0.000000 0.000000 870 | vt 0.000000 0.000000 871 | vt 0.000000 0.000000 872 | vt 0.000000 0.000000 873 | vt 0.000000 0.000000 874 | vt 0.000000 0.000000 875 | vt 0.000000 0.000000 876 | vt 0.000000 0.000000 877 | vt 0.000000 0.000000 878 | vt 0.000000 0.000000 879 | vt 0.000000 0.000000 880 | vt 0.000000 0.000000 881 | vt 0.000000 0.000000 882 | vt 0.000000 0.000000 883 | vt 0.000000 0.000000 884 | vt 0.000000 0.000000 885 | vt 0.000000 0.000000 886 | vt 0.000000 0.000000 887 | vt 0.000000 0.000000 888 | vt 0.000000 0.000000 889 | vt 0.000000 0.000000 890 | vt 0.000000 0.000000 891 | vt 0.000000 0.000000 892 | vt 0.000000 0.000000 893 | vt 0.000000 0.000000 894 | vt 0.000000 0.000000 895 | vt 0.000000 0.000000 896 | vt 0.000000 0.000000 897 | vt 0.000000 0.000000 898 | vt 0.000000 0.000000 899 | vt 0.000000 0.000000 900 | vt 0.000000 0.000000 901 | vt 0.000000 0.000000 902 | vt 0.000000 0.000000 903 | vt 0.000000 0.000000 904 | vt 0.000000 0.000000 905 | vt 0.000000 0.000000 906 | vt 0.000000 0.000000 907 | vt 0.000000 0.000000 908 | vt 0.000000 0.000000 909 | vt 0.000000 0.000000 910 | vt 0.000000 0.000000 911 | vt 0.000000 0.000000 912 | vt 0.000000 0.000000 913 | vt 0.000000 0.000000 914 | vt 0.000000 0.000000 915 | vt 0.000000 0.000000 916 | vt 0.000000 0.000000 917 | vt 0.000000 0.000000 918 | vt 0.000000 0.000000 919 | vt 0.000000 0.000000 920 | vt 0.000000 0.000000 921 | vt 0.000000 0.000000 922 | vt 0.000000 0.000000 923 | vt 0.000000 0.000000 924 | vt 0.000000 0.000000 925 | vt 0.000000 0.000000 926 | vt 0.000000 0.000000 927 | vt 0.000000 0.000000 928 | vt 0.000000 0.000000 929 | vt 0.000000 0.000000 930 | vt 0.000000 0.000000 931 | vt 0.000000 0.000000 932 | vt 0.000000 0.000000 933 | vt 0.000000 0.000000 934 | vt 0.000000 0.000000 935 | vt 0.000000 0.000000 936 | vt 0.000000 0.000000 937 | vt 0.000000 0.000000 938 | vt 0.000000 0.000000 939 | vt 0.000000 0.000000 940 | vt 0.000000 0.000000 941 | vt 0.000000 0.000000 942 | vt 0.000000 0.000000 943 | vt 0.000000 0.000000 944 | vt 0.000000 0.000000 945 | vt 0.000000 0.000000 946 | vt 0.000000 0.000000 947 | vt 0.000000 0.000000 948 | vt 0.000000 0.000000 949 | vt 0.000000 0.000000 950 | vt 0.000000 0.000000 951 | vt 0.000000 0.000000 952 | vt 0.000000 0.000000 953 | vt 0.000000 0.000000 954 | vt 0.000000 0.000000 955 | vt 0.000000 0.000000 956 | vt 0.000000 0.000000 957 | vt 0.000000 0.000000 958 | vt 0.000000 0.000000 959 | vt 0.000000 0.000000 960 | vt 0.000000 0.000000 961 | vt 0.000000 0.000000 962 | vt 0.000000 0.000000 963 | vt 0.000000 0.000000 964 | vt 0.000000 0.000000 965 | vt 0.000000 0.000000 966 | vt 0.000000 0.000000 967 | vt 0.000000 0.000000 968 | vt 0.000000 0.000000 969 | vt 0.000000 0.000000 970 | vt 0.000000 0.000000 971 | vt 0.000000 0.000000 972 | vt 0.000000 0.000000 973 | vt 0.000000 0.000000 974 | vt 0.000000 0.000000 975 | vt 0.000000 0.000000 976 | vt 0.000000 0.000000 977 | vt 0.000000 0.000000 978 | vt 0.000000 0.000000 979 | vt 0.000000 0.000000 980 | vt 0.000000 0.000000 981 | vt 0.000000 0.000000 982 | vt 0.000000 0.000000 983 | vt 0.000000 0.000000 984 | vt 0.000000 0.000000 985 | vt 0.000000 0.000000 986 | vt 0.000000 0.000000 987 | vt 0.000000 0.000000 988 | vt 0.000000 0.000000 989 | vt 0.000000 0.000000 990 | vt 0.000000 0.000000 991 | vt 0.000000 0.000000 992 | vt 0.000000 0.000000 993 | vt 0.000000 0.000000 994 | vt 0.000000 0.000000 995 | vt 0.000000 0.000000 996 | vt 0.000000 0.000000 997 | vt 0.000000 0.000000 998 | vt 0.000000 0.000000 999 | vt 0.000000 0.000000 1000 | vt 0.000000 0.000000 1001 | vt 0.000000 0.000000 1002 | vt 0.000000 0.000000 1003 | vt 0.000000 0.000000 1004 | vt 0.000000 0.000000 1005 | vt 0.000000 0.000000 1006 | vt 0.000000 0.000000 1007 | vt 0.000000 0.000000 1008 | vt 0.000000 0.000000 1009 | vt 0.000000 0.000000 1010 | vt 0.000000 0.000000 1011 | vt 0.000000 0.000000 1012 | vt 0.000000 0.000000 1013 | vt 0.000000 0.000000 1014 | vt 0.000000 0.000000 1015 | vt 0.000000 0.000000 1016 | vt 0.000000 0.000000 1017 | vt 0.000000 0.000000 1018 | vt 0.000000 0.000000 1019 | vt 0.000000 0.000000 1020 | vt 0.000000 0.000000 1021 | vt 0.000000 0.000000 1022 | vt 0.000000 0.000000 1023 | vt 0.000000 0.000000 1024 | vt 0.000000 0.000000 1025 | vt 0.000000 0.000000 1026 | vt 0.000000 0.000000 1027 | vt 0.000000 0.000000 1028 | vt 0.000000 0.000000 1029 | vt 0.000000 0.000000 1030 | vt 0.000000 0.000000 1031 | vt 0.000000 0.000000 1032 | vt 0.000000 0.000000 1033 | vt 0.000000 0.000000 1034 | vt 0.000000 0.000000 1035 | vt 0.000000 0.000000 1036 | vt 0.000000 0.000000 1037 | vt 0.000000 0.000000 1038 | vt 0.000000 0.000000 1039 | vt 0.000000 0.000000 1040 | vt 0.000000 0.000000 1041 | vt 0.000000 0.000000 1042 | vt 0.000000 0.000000 1043 | vt 0.000000 0.000000 1044 | vt 0.000000 0.000000 1045 | vt 0.000000 0.000000 1046 | vt 0.000000 0.000000 1047 | vt 0.000000 0.000000 1048 | vt 0.000000 0.000000 1049 | vt 0.000000 0.000000 1050 | vt 0.000000 0.000000 1051 | vt 0.000000 0.000000 1052 | vt 0.000000 0.000000 1053 | vt 0.000000 0.000000 1054 | vt 0.000000 0.000000 1055 | vt 0.000000 0.000000 1056 | vt 0.000000 0.000000 1057 | vt 0.000000 0.000000 1058 | vt 0.000000 0.000000 1059 | vt 0.000000 0.000000 1060 | vt 0.000000 0.000000 1061 | vt 0.000000 0.000000 1062 | vt 0.000000 0.000000 1063 | vt 0.000000 0.000000 1064 | vt 0.000000 0.000000 1065 | vt 0.000000 0.000000 1066 | vt 0.000000 0.000000 1067 | vt 0.000000 0.000000 1068 | vt 0.000000 0.000000 1069 | vt 0.000000 0.000000 1070 | vt 0.000000 0.000000 1071 | vt 0.000000 0.000000 1072 | vt 0.000000 0.000000 1073 | vt 0.000000 0.000000 1074 | vt 0.000000 0.000000 1075 | vt 0.000000 0.000000 1076 | vt 0.000000 0.000000 1077 | vt 0.000000 0.000000 1078 | vt 0.000000 0.000000 1079 | vt 0.000000 0.000000 1080 | vt 0.000000 0.000000 1081 | vt 0.000000 0.000000 1082 | vt 0.000000 0.000000 1083 | vt 0.000000 0.000000 1084 | vt 0.000000 0.000000 1085 | vt 0.000000 0.000000 1086 | vt 0.000000 0.000000 1087 | vt 0.000000 0.000000 1088 | vt 0.000000 0.000000 1089 | vt 0.000000 0.000000 1090 | vt 0.000000 0.000000 1091 | vt 0.000000 0.000000 1092 | vt 0.000000 0.000000 1093 | vt 0.000000 0.000000 1094 | vt 0.000000 0.000000 1095 | vt 0.000000 0.000000 1096 | vt 0.000000 0.000000 1097 | vt 0.000000 0.000000 1098 | vt 0.000000 0.000000 1099 | vt 0.000000 0.000000 1100 | vt 0.000000 0.000000 1101 | vt 0.000000 0.000000 1102 | vt 0.000000 0.000000 1103 | vt 0.000000 0.000000 1104 | vt 0.000000 0.000000 1105 | vt 0.000000 0.000000 1106 | vt 0.000000 0.000000 1107 | vt 0.000000 0.000000 1108 | vt 0.000000 0.000000 1109 | vt 0.000000 0.000000 1110 | vt 0.000000 0.000000 1111 | vt 0.000000 0.000000 1112 | vt 0.000000 0.000000 1113 | vt 0.000000 0.000000 1114 | vt 0.000000 0.000000 1115 | vt 0.000000 0.000000 1116 | vt 0.000000 0.000000 1117 | vt 0.000000 0.000000 1118 | vt 0.000000 0.000000 1119 | vt 0.000000 0.000000 1120 | vt 0.000000 0.000000 1121 | vt 0.000000 0.000000 1122 | vt 0.000000 0.000000 1123 | vt 0.000000 0.000000 1124 | vt 0.000000 0.000000 1125 | vt 0.000000 0.000000 1126 | vt 0.000000 0.000000 1127 | vt 0.000000 0.000000 1128 | vt 0.000000 0.000000 1129 | vt 0.000000 0.000000 1130 | vt 0.000000 0.000000 1131 | vt 0.000000 0.000000 1132 | vt 0.000000 0.000000 1133 | vt 0.000000 0.000000 1134 | vt 0.000000 0.000000 1135 | vt 0.000000 0.000000 1136 | vt 0.000000 0.000000 1137 | vt 0.000000 0.000000 1138 | vt 0.000000 0.000000 1139 | vt 0.000000 0.000000 1140 | vt 0.000000 0.000000 1141 | vt 0.000000 0.000000 1142 | vt 0.000000 0.000000 1143 | vt 0.000000 0.000000 1144 | vt 0.000000 0.000000 1145 | vt 0.000000 0.000000 1146 | vt 0.000000 0.000000 1147 | vt 0.000000 0.000000 1148 | vt 0.000000 0.000000 1149 | vt 0.000000 0.000000 1150 | vt 0.000000 0.000000 1151 | vt 0.000000 0.000000 1152 | vt 0.000000 0.000000 1153 | vt 0.000000 0.000000 1154 | vt 0.000000 0.000000 1155 | vt 0.000000 0.000000 1156 | vt 0.000000 0.000000 1157 | vt 0.000000 0.000000 1158 | vt 0.000000 0.000000 1159 | vt 0.000000 0.000000 1160 | vt 0.000000 0.000000 1161 | vt 0.000000 0.000000 1162 | vt 0.000000 0.000000 1163 | vt 0.000000 0.000000 1164 | vt 0.000000 0.000000 1165 | vt 0.000000 0.000000 1166 | vt 0.000000 0.000000 1167 | vt 0.000000 0.000000 1168 | vt 0.000000 0.000000 1169 | vt 0.000000 0.000000 1170 | vt 0.000000 0.000000 1171 | vt 0.000000 0.000000 1172 | vt 0.000000 0.000000 1173 | vt 0.000000 0.000000 1174 | vt 0.000000 0.000000 1175 | vt 0.000000 0.000000 1176 | vt 0.000000 0.000000 1177 | vt 0.000000 0.000000 1178 | vt 0.000000 0.000000 1179 | vt 0.000000 0.000000 1180 | vt 0.000000 0.000000 1181 | vt 0.000000 0.000000 1182 | vt 0.000000 0.000000 1183 | vt 0.000000 0.000000 1184 | vt 0.000000 0.000000 1185 | vt 0.000000 0.000000 1186 | vt 0.000000 0.000000 1187 | vt 0.000000 0.000000 1188 | vt 0.000000 0.000000 1189 | vt 0.000000 0.000000 1190 | vt 0.000000 0.000000 1191 | vt 0.000000 0.000000 1192 | vt 0.000000 0.000000 1193 | vt 0.000000 0.000000 1194 | vt 0.000000 0.000000 1195 | vt 0.000000 0.000000 1196 | vt 0.000000 0.000000 1197 | vt 0.000000 0.000000 1198 | vt 0.000000 0.000000 1199 | vt 0.000000 0.000000 1200 | vt 0.000000 0.000000 1201 | vt 0.000000 0.000000 1202 | vt 0.000000 0.000000 1203 | vt 0.000000 0.000000 1204 | vt 0.000000 0.000000 1205 | vt 0.000000 0.000000 1206 | vt 0.000000 0.000000 1207 | vt 0.000000 0.000000 1208 | vt 0.000000 0.000000 1209 | vt 0.000000 0.000000 1210 | vt 0.000000 0.000000 1211 | vt 0.000000 0.000000 1212 | vt 0.000000 0.000000 1213 | vt 0.000000 0.000000 1214 | vt 0.000000 0.000000 1215 | vt 0.000000 0.000000 1216 | vt 0.000000 0.000000 1217 | vt 0.000000 0.000000 1218 | vt 0.000000 0.000000 1219 | vt 0.000000 0.000000 1220 | vt 0.000000 0.000000 1221 | vt 0.000000 0.000000 1222 | vt 0.000000 0.000000 1223 | vt 0.000000 0.000000 1224 | vt 0.000000 0.000000 1225 | vt 0.000000 0.000000 1226 | vt 0.000000 0.000000 1227 | vt 0.000000 0.000000 1228 | vt 0.000000 0.000000 1229 | vt 0.000000 0.000000 1230 | vt 0.000000 0.000000 1231 | vt 0.000000 0.000000 1232 | vt 0.000000 0.000000 1233 | vt 0.000000 0.000000 1234 | vt 0.000000 0.000000 1235 | vt 0.000000 0.000000 1236 | vt 0.000000 0.000000 1237 | vt 0.000000 0.000000 1238 | vt 0.000000 0.000000 1239 | vt 0.000000 0.000000 1240 | vt 0.000000 0.000000 1241 | vt 0.000000 0.000000 1242 | vt 0.000000 0.000000 1243 | vt 0.000000 0.000000 1244 | vt 0.000000 0.000000 1245 | vt 0.000000 0.000000 1246 | vt 0.000000 0.000000 1247 | vt 0.000000 0.000000 1248 | vt 0.000000 0.000000 1249 | vt 0.000000 0.000000 1250 | vt 0.000000 0.000000 1251 | vt 0.000000 0.000000 1252 | vt 0.000000 0.000000 1253 | vt 0.000000 0.000000 1254 | vt 0.000000 0.000000 1255 | vt 0.000000 0.000000 1256 | vt 0.000000 0.000000 1257 | vt 0.000000 0.000000 1258 | vt 0.000000 0.000000 1259 | vt 0.000000 0.000000 1260 | vt 0.000000 0.000000 1261 | vt 0.000000 0.000000 1262 | vt 0.000000 0.000000 1263 | vt 0.000000 0.000000 1264 | vt 0.000000 0.000000 1265 | vt 0.000000 0.000000 1266 | vt 0.000000 0.000000 1267 | vt 0.000000 0.000000 1268 | vt 0.000000 0.000000 1269 | vt 0.000000 0.000000 1270 | vt 0.000000 0.000000 1271 | vt 0.000000 0.000000 1272 | vt 0.000000 0.000000 1273 | vt 0.000000 0.000000 1274 | vt 0.000000 0.000000 1275 | vt 0.000000 0.000000 1276 | vt 0.000000 0.000000 1277 | vt 0.000000 0.000000 1278 | vt 0.000000 0.000000 1279 | vt 0.000000 0.000000 1280 | vt 0.000000 0.000000 1281 | vt 0.000000 0.000000 1282 | vt 0.000000 0.000000 1283 | vt 0.000000 0.000000 1284 | vt 0.000000 0.000000 1285 | vt 0.000000 0.000000 1286 | vt 0.000000 0.000000 1287 | vt 0.000000 0.000000 1288 | vt 0.000000 0.000000 1289 | vt 0.000000 0.000000 1290 | vt 0.000000 0.000000 1291 | vt 0.000000 0.000000 1292 | vt 0.000000 0.000000 1293 | vt 0.000000 0.000000 1294 | vt 0.000000 0.000000 1295 | vt 0.000000 0.000000 1296 | vt 0.000000 0.000000 1297 | vt 0.000000 0.000000 1298 | vt 0.000000 0.000000 1299 | vt 0.000000 0.000000 1300 | vt 0.000000 0.000000 1301 | vt 0.000000 0.000000 1302 | vt 0.000000 0.000000 1303 | vt 0.000000 0.000000 1304 | vt 0.000000 0.000000 1305 | vt 0.000000 0.000000 1306 | vt 0.000000 0.000000 1307 | vt 0.000000 0.000000 1308 | vt 0.000000 0.000000 1309 | vt 0.000000 0.000000 1310 | vt 0.000000 0.000000 1311 | vt 0.000000 0.000000 1312 | vt 0.000000 0.000000 1313 | vt 0.000000 0.000000 1314 | vt 0.000000 0.000000 1315 | vt 0.000000 0.000000 1316 | vt 0.000000 0.000000 1317 | vt 0.000000 0.000000 1318 | vt 0.000000 0.000000 1319 | vt 0.000000 0.000000 1320 | vt 0.000000 0.000000 1321 | vt 0.000000 0.000000 1322 | vt 0.000000 0.000000 1323 | vt 0.000000 0.000000 1324 | vt 0.000000 0.000000 1325 | vt 0.000000 0.000000 1326 | vt 0.000000 0.000000 1327 | vt 0.000000 0.000000 1328 | vt 0.000000 0.000000 1329 | vt 0.000000 0.000000 1330 | vt 0.000000 0.000000 1331 | vt 0.000000 0.000000 1332 | vt 0.000000 0.000000 1333 | vt 0.000000 0.000000 1334 | vt 0.000000 0.000000 1335 | vt 0.000000 0.000000 1336 | vt 0.000000 0.000000 1337 | vt 0.000000 0.000000 1338 | vt 0.000000 0.000000 1339 | vt 0.000000 0.000000 1340 | vt 0.000000 0.000000 1341 | vt 0.000000 0.000000 1342 | vt 0.000000 0.000000 1343 | vt 0.000000 0.000000 1344 | vt 0.000000 0.000000 1345 | vt 0.000000 0.000000 1346 | vt 0.000000 0.000000 1347 | vt 0.000000 0.000000 1348 | vt 0.000000 0.000000 1349 | vt 0.000000 0.000000 1350 | vt 0.000000 0.000000 1351 | vt 0.000000 0.000000 1352 | vt 0.000000 0.000000 1353 | vt 0.000000 0.000000 1354 | vt 0.000000 0.000000 1355 | vt 0.000000 0.000000 1356 | vt 0.000000 0.000000 1357 | vt 0.000000 0.000000 1358 | vt 0.000000 0.000000 1359 | vt 0.000000 0.000000 1360 | vt 0.000000 0.000000 1361 | vt 0.000000 0.000000 1362 | vt 0.000000 0.000000 1363 | vt 0.000000 0.000000 1364 | vt 0.000000 0.000000 1365 | vt 0.000000 0.000000 1366 | vt 0.000000 0.000000 1367 | vt 0.000000 0.000000 1368 | vt 0.000000 0.000000 1369 | vt 0.000000 0.000000 1370 | vt 0.000000 0.000000 1371 | vt 0.000000 0.000000 1372 | vt 0.000000 0.000000 1373 | vt 0.000000 0.000000 1374 | vt 0.000000 0.000000 1375 | vt 0.000000 0.000000 1376 | vt 0.000000 0.000000 1377 | vt 0.000000 0.000000 1378 | vt 0.000000 0.000000 1379 | vt 0.000000 0.000000 1380 | vt 0.000000 0.000000 1381 | vt 0.000000 0.000000 1382 | vt 0.000000 0.000000 1383 | vt 0.000000 0.000000 1384 | vt 0.000000 0.000000 1385 | vt 0.000000 0.000000 1386 | vt 0.000000 0.000000 1387 | vt 0.000000 0.000000 1388 | vt 0.000000 0.000000 1389 | vt 0.000000 0.000000 1390 | vt 0.000000 0.000000 1391 | vt 0.000000 0.000000 1392 | vt 0.000000 0.000000 1393 | vt 0.000000 0.000000 1394 | vt 0.000000 0.000000 1395 | vt 0.000000 0.000000 1396 | vt 0.000000 0.000000 1397 | vt 0.000000 0.000000 1398 | vt 0.000000 0.000000 1399 | vt 0.000000 0.000000 1400 | vt 0.000000 0.000000 1401 | vt 0.000000 0.000000 1402 | vt 0.000000 0.000000 1403 | vt 0.000000 0.000000 1404 | vt 0.000000 0.000000 1405 | vt 0.000000 0.000000 1406 | vt 0.000000 0.000000 1407 | vt 0.000000 0.000000 1408 | vt 0.000000 0.000000 1409 | vt 0.000000 0.000000 1410 | vt 0.000000 0.000000 1411 | vt 0.000000 0.000000 1412 | vt 0.000000 0.000000 1413 | vt 0.000000 0.000000 1414 | vt 0.000000 0.000000 1415 | vt 0.000000 0.000000 1416 | vt 0.000000 0.000000 1417 | vt 0.000000 0.000000 1418 | vt 0.000000 0.000000 1419 | vt 0.000000 0.000000 1420 | vt 0.000000 0.000000 1421 | vt 0.000000 0.000000 1422 | vt 0.000000 0.000000 1423 | vt 0.000000 0.000000 1424 | vt 0.000000 0.000000 1425 | vt 0.000000 0.000000 1426 | vt 0.000000 0.000000 1427 | vt 0.000000 0.000000 1428 | vt 0.000000 0.000000 1429 | vt 0.000000 0.000000 1430 | vt 0.000000 0.000000 1431 | vt 0.000000 0.000000 1432 | vt 0.000000 0.000000 1433 | vt 0.000000 0.000000 1434 | vt 0.000000 0.000000 1435 | vt 0.000000 0.000000 1436 | vt 0.000000 0.000000 1437 | vt 0.000000 0.000000 1438 | vt 0.000000 0.000000 1439 | vt 0.000000 0.000000 1440 | vt 0.000000 0.000000 1441 | vt 0.000000 0.000000 1442 | vt 0.000000 0.000000 1443 | vt 0.000000 0.000000 1444 | vt 0.000000 0.000000 1445 | vt 0.000000 0.000000 1446 | vt 0.000000 0.000000 1447 | vt 0.000000 0.000000 1448 | vt 0.000000 0.000000 1449 | vt 0.000000 0.000000 1450 | vt 0.000000 0.000000 1451 | vt 0.000000 0.000000 1452 | vt 0.000000 0.000000 1453 | vt 0.000000 0.000000 1454 | vt 0.000000 0.000000 1455 | vt 0.000000 0.000000 1456 | vt 0.000000 0.000000 1457 | vt 0.000000 0.000000 1458 | vt 0.000000 0.000000 1459 | vt 0.000000 0.000000 1460 | vt 0.000000 0.000000 1461 | vt 0.000000 0.000000 1462 | vt 0.000000 0.000000 1463 | vt 0.000000 0.000000 1464 | vt 0.000000 0.000000 1465 | vt 0.000000 0.000000 1466 | vt 0.000000 0.000000 1467 | vt 0.000000 0.000000 1468 | vt 0.000000 0.000000 1469 | vt 0.000000 0.000000 1470 | vt 0.000000 0.000000 1471 | vt 0.000000 0.000000 1472 | vt 0.000000 0.000000 1473 | vt 0.000000 0.000000 1474 | vt 0.000000 0.000000 1475 | vt 0.000000 0.000000 1476 | vt 0.000000 0.000000 1477 | vt 0.000000 0.000000 1478 | vt 0.000000 0.000000 1479 | vt 0.000000 0.000000 1480 | vt 0.000000 0.000000 1481 | vt 0.000000 0.000000 1482 | vt 0.000000 0.000000 1483 | vt 0.000000 0.000000 1484 | vt 0.000000 0.000000 1485 | vt 0.000000 0.000000 1486 | vt 0.000000 0.000000 1487 | vt 0.000000 0.000000 1488 | vt 0.000000 0.000000 1489 | vt 0.000000 0.000000 1490 | vt 0.000000 0.000000 1491 | vt 0.000000 0.000000 1492 | vt 0.000000 0.000000 1493 | vt 0.000000 0.000000 1494 | vt 0.000000 0.000000 1495 | vt 0.000000 0.000000 1496 | vt 0.000000 0.000000 1497 | vt 0.000000 0.000000 1498 | vt 0.000000 0.000000 1499 | vt 0.000000 0.000000 1500 | vt 0.000000 0.000000 1501 | vt 0.000000 0.000000 1502 | vt 0.000000 0.000000 1503 | vt 0.000000 0.000000 1504 | vt 0.000000 0.000000 1505 | vt 0.000000 0.000000 1506 | vt 0.000000 0.000000 1507 | vt 0.000000 0.000000 1508 | vt 0.000000 0.000000 1509 | vt 0.000000 0.000000 1510 | vt 0.000000 0.000000 1511 | vt 0.000000 0.000000 1512 | vt 0.000000 0.000000 1513 | vt 0.000000 0.000000 1514 | vt 0.000000 0.000000 1515 | vt 0.000000 0.000000 1516 | vt 0.000000 0.000000 1517 | vt 0.000000 0.000000 1518 | vt 0.000000 0.000000 1519 | vt 0.000000 0.000000 1520 | vt 0.000000 0.000000 1521 | vt 0.000000 0.000000 1522 | vt 0.000000 0.000000 1523 | vt 0.000000 0.000000 1524 | vt 0.000000 0.000000 1525 | vn -0.5235 -0.6843 -0.5076 1526 | vn -0.7179 0.0000 -0.6961 1527 | vn -0.5289 -0.6759 -0.5133 1528 | vn -0.0000 1.0000 0.0000 1529 | vn 0.7179 0.0000 0.6961 1530 | vn 0.1647 0.9733 0.1597 1531 | vn 0.6495 0.3598 0.6698 1532 | vn 0.6263 -0.4643 0.6263 1533 | vn -0.6961 0.0000 -0.7179 1534 | vn 0.1622 -0.9733 0.1622 1535 | vn 0.0644 0.9960 0.0624 1536 | vn -0.7071 0.0000 0.7071 1537 | vn 0.7071 0.0000 -0.7071 1538 | vn 0.7071 0.0122 -0.7071 1539 | vn 0.7281 0.0171 -0.6853 1540 | vn 0.0509 -0.9974 0.0512 1541 | vn 0.0505 -0.9974 0.0512 1542 | vn 0.1529 -0.9758 0.1561 1543 | vn 0.1517 -0.9760 0.1565 1544 | vn 0.7020 0.0551 0.7100 1545 | vn 0.7142 -0.0299 0.6993 1546 | vn 0.6953 0.0498 0.7170 1547 | vn 0.7160 -0.0286 0.6975 1548 | vn 0.7046 -0.1260 0.6983 1549 | vn 0.7013 -0.1282 0.7013 1550 | vn 0.3394 0.8758 0.3432 1551 | vn 0.4396 0.7887 0.4297 1552 | vn 0.3377 0.8745 0.3482 1553 | vn 0.4406 0.7859 0.4339 1554 | vn 0.5230 0.6706 0.5261 1555 | vn 0.5196 0.6654 0.5359 1556 | vn 0.1640 0.9730 0.1622 1557 | vn 0.1624 0.9724 0.1675 1558 | vn 0.1632 0.9727 0.1649 1559 | vn -0.5722 -0.5875 -0.5722 1560 | vn -0.3202 -0.8916 -0.3202 1561 | vn -0.5786 -0.5807 -0.5727 1562 | vn -0.3216 -0.8913 -0.3197 1563 | vn -0.6620 -0.3675 -0.6532 1564 | vn -0.6703 -0.3581 -0.6500 1565 | vn -0.1644 -0.9728 -0.1630 1566 | vn -0.1702 -0.9715 -0.1650 1567 | vn 0.4575 -0.7625 0.4575 1568 | vn 0.5722 -0.5875 0.5722 1569 | vn 0.5786 -0.5807 0.5727 1570 | vn 0.6620 -0.3675 0.6532 1571 | vn 0.6703 -0.3581 0.6500 1572 | vn 0.4357 -0.7800 0.4493 1573 | vn 0.3609 -0.8552 0.3721 1574 | vn 0.4396 -0.7774 0.4500 1575 | vn 0.5111 -0.6864 0.5174 1576 | vn 0.5158 -0.6840 0.5158 1577 | vn 0.5101 -0.7036 0.4947 1578 | vn -0.0000 -1.0000 -0.0000 1579 | vn 0.5052 -0.7105 0.4898 1580 | vn -0.4947 -0.7036 -0.5101 1581 | vn -0.4898 -0.7105 -0.5052 1582 | vn 0.1644 -0.9728 0.1630 1583 | vn 0.1680 -0.9720 0.1642 1584 | vn 0.1702 -0.9715 0.1650 1585 | vn -0.4947 0.7036 -0.5101 1586 | vn -0.4898 0.7105 -0.5052 1587 | vn -0.5024 0.7037 0.5024 1588 | vn -0.7099 0.0029 0.7043 1589 | vn -0.7136 0.0000 0.7006 1590 | vn -0.7070 0.0372 0.7063 1591 | vn -0.7071 0.0032 0.7071 1592 | vn -0.7077 0.0000 0.7065 1593 | vn -0.7108 0.0014 0.7034 1594 | vn -0.7082 0.0024 0.7060 1595 | vn -0.7072 0.0014 0.7070 1596 | vn -0.7189 0.0095 0.6950 1597 | vn -0.7067 0.0016 0.7075 1598 | vn -0.7030 0.0053 0.7112 1599 | vn -0.7001 -0.0012 0.7141 1600 | vn -0.7279 0.0027 0.6857 1601 | vn -0.6845 0.0100 0.7290 1602 | vn -0.7433 0.0000 0.6690 1603 | vn -0.7091 -0.0051 0.7051 1604 | vn -0.7078 0.0000 0.7064 1605 | vn 0.7071 0.0048 -0.7071 1606 | vn 0.7055 0.0020 -0.7088 1607 | vn 0.7279 0.0027 -0.6857 1608 | vn 0.6949 0.0054 -0.7191 1609 | vn 0.7072 0.0012 -0.7070 1610 | vn 0.7433 0.0000 -0.6690 1611 | vn 0.6811 -0.0045 -0.7322 1612 | vn 0.7001 -0.0012 -0.7141 1613 | vn 0.7055 -0.0003 -0.7088 1614 | vn 0.7036 -0.0019 -0.7106 1615 | vn 0.7043 -0.0052 -0.7099 1616 | vn 0.7049 0.0040 -0.7093 1617 | vn 0.7071 0.0000 0.7071 1618 | vn -0.7071 0.0000 -0.7071 1619 | vn 0.6946 0.0000 0.7194 1620 | vn -0.7488 0.0000 -0.6628 1621 | vn 0.6660 0.0000 -0.7459 1622 | vn 0.5593 0.0000 0.8290 1623 | vn -0.6920 -0.0000 -0.7219 1624 | vn -0.6766 -0.0000 -0.7363 1625 | vn 0.2009 0.0000 -0.9796 1626 | vn -0.1119 0.0000 -0.9937 1627 | vn 0.7433 -0.0000 0.6690 1628 | vn 0.8389 -0.0000 0.5443 1629 | vn 0.9957 0.0000 0.0927 1630 | vn 0.9731 -0.0000 -0.2305 1631 | vn -0.4138 0.0000 -0.9104 1632 | vn -0.9193 0.0000 -0.3936 1633 | vn -0.8601 0.0000 -0.5101 1634 | vn -0.9983 -0.0000 -0.0582 1635 | vn -0.9376 0.0000 0.3478 1636 | vn -0.7843 0.0000 0.6204 1637 | vn -0.6141 0.0000 0.7892 1638 | vn -0.3464 0.0000 0.9381 1639 | vn 0.0460 0.0000 0.9989 1640 | vn 0.2593 0.0000 0.9658 1641 | vn 0.7256 0.0000 0.6881 1642 | vn 0.4317 0.0000 -0.9020 1643 | vn 0.5657 0.0000 -0.8246 1644 | vn -0.6262 0.0000 0.7796 1645 | vn -0.0308 0.0000 0.9995 1646 | vn 0.4953 0.0000 0.8687 1647 | vn 0.6321 -0.0000 0.7749 1648 | vn -0.8054 0.0000 -0.5927 1649 | vn -0.9386 0.0000 -0.3450 1650 | vn -0.9609 0.0000 0.2768 1651 | vn 0.1237 0.0000 -0.9923 1652 | vn -0.2174 0.0000 -0.9761 1653 | vn -0.4989 0.0000 -0.8667 1654 | vn -0.6051 0.0000 -0.7962 1655 | vn 1.0000 0.0000 -0.0000 1656 | vn 0.9211 -0.0000 0.3893 1657 | vn 0.8619 -0.0000 0.5070 1658 | vn 0.6059 0.7112 0.3564 1659 | vn 0.9821 -0.0000 0.1883 1660 | vn 0.9998 -0.0000 -0.0186 1661 | vn 0.9435 0.0000 -0.3312 1662 | vn 0.7922 0.0000 -0.6103 1663 | vn 0.7222 0.0000 0.6917 1664 | vn -0.7122 0.0000 -0.7020 1665 | vn 0.6966 0.0000 0.7174 1666 | vn 0.7019 0.0000 0.7122 1667 | vn -0.7043 0.0000 -0.7099 1668 | vn 0.7099 0.0000 0.7043 1669 | usemtl Untextured 1670 | s 1 1671 | f 1/1/1 3/2/2 185/3/3 1672 | usemtl red 1673 | s off 1674 | f 4/4/2 5/5/2 6/6/2 1675 | f 4/4/2 7/7/2 5/5/2 1676 | f 8/8/4 9/9/4 10/10/4 1677 | f 8/8/4 11/11/4 9/9/4 1678 | f 12/12/5 13/13/5 14/14/5 1679 | f 12/12/5 15/15/5 13/13/5 1680 | f 16/16/6 17/17/6 18/18/6 1681 | f 19/19/7 20/20/7 21/21/7 1682 | f 19/19/7 22/22/7 20/20/7 1683 | f 23/23/4 24/24/4 25/25/4 1684 | f 23/23/4 26/26/4 24/24/4 1685 | f 27/27/8 28/28/8 29/29/8 1686 | f 27/27/8 30/30/8 28/28/8 1687 | f 31/31/2 32/32/2 33/33/2 1688 | f 31/31/2 34/34/2 32/32/2 1689 | f 34/34/2 35/35/2 32/32/2 1690 | f 34/34/2 36/36/2 35/35/2 1691 | f 37/37/5 38/38/5 39/39/5 1692 | f 37/37/5 40/40/5 38/38/5 1693 | f 41/41/9 42/42/9 43/43/9 1694 | f 41/41/9 44/44/9 42/42/9 1695 | f 45/45/5 39/39/5 46/46/5 1696 | f 45/45/5 37/37/5 39/39/5 1697 | f 44/44/9 47/47/9 42/42/9 1698 | f 44/44/9 48/48/9 47/47/9 1699 | f 49/49/5 46/46/5 50/50/5 1700 | f 49/49/5 45/45/5 46/46/5 1701 | f 51/51/5 52/52/5 53/53/5 1702 | f 51/51/5 54/54/5 52/52/5 1703 | f 55/55/9 56/56/9 57/57/9 1704 | f 55/55/9 58/58/9 56/56/9 1705 | f 58/58/9 59/59/9 56/56/9 1706 | f 58/58/9 60/60/9 59/59/9 1707 | f 61/61/10 62/62/10 63/63/10 1708 | f 64/64/11 65/65/11 66/66/11 1709 | f 64/64/11 67/67/11 65/65/11 1710 | f 68/68/12 69/69/12 70/70/12 1711 | f 70/70/12 69/69/12 71/71/12 1712 | f 72/72/12 73/73/12 68/68/12 1713 | f 68/68/12 73/73/12 69/69/12 1714 | f 74/74/12 75/75/12 76/76/12 1715 | f 76/76/12 75/75/12 77/77/12 1716 | f 78/78/12 51/51/12 74/74/12 1717 | f 74/74/12 51/51/12 75/75/12 1718 | f 79/79/12 80/80/12 81/81/12 1719 | f 80/80/12 82/82/12 81/81/12 1720 | f 83/83/12 84/84/12 85/85/12 1721 | f 84/84/12 86/86/12 85/85/12 1722 | f 85/85/12 86/86/12 87/87/12 1723 | f 88/88/12 83/83/12 89/89/12 1724 | f 87/87/12 86/86/12 80/80/12 1725 | f 79/79/12 87/87/12 80/80/12 1726 | f 90/90/12 91/91/12 92/92/12 1727 | f 93/93/12 82/82/12 94/94/12 1728 | f 94/94/12 82/82/12 80/80/12 1729 | f 95/95/12 96/96/12 97/97/12 1730 | f 97/97/12 96/96/12 98/98/12 1731 | f 99/99/12 95/95/12 100/100/12 1732 | f 100/100/12 95/95/12 97/97/12 1733 | f 97/97/12 98/98/12 101/101/12 1734 | f 101/101/12 98/98/12 102/102/12 1735 | f 100/100/12 97/97/12 103/103/12 1736 | f 103/103/12 97/97/12 101/101/12 1737 | f 101/101/12 102/102/12 104/104/12 1738 | f 104/104/12 102/102/12 105/105/12 1739 | f 103/103/12 101/101/12 106/106/12 1740 | f 106/106/12 101/101/12 104/104/12 1741 | f 104/104/12 105/105/12 107/107/12 1742 | f 107/107/12 105/105/12 108/108/12 1743 | f 107/107/12 108/108/12 109/109/12 1744 | f 109/109/12 108/108/12 110/110/12 1745 | f 106/106/12 104/104/12 111/111/12 1746 | f 111/111/12 104/104/12 107/107/12 1747 | f 111/111/12 107/107/12 112/112/12 1748 | f 112/112/12 107/107/12 109/109/12 1749 | f 113/113/12 114/114/12 115/115/12 1750 | f 116/116/12 117/117/12 118/118/12 1751 | f 109/109/12 119/119/12 120/120/12 1752 | f 120/120/12 112/112/12 109/109/12 1753 | f 121/121/13 122/122/13 123/123/13 1754 | f 124/124/13 122/122/13 121/121/13 1755 | f 123/123/13 125/125/13 126/126/13 1756 | f 122/122/13 125/125/13 123/123/13 1757 | f 127/127/13 128/128/13 129/129/13 1758 | f 130/130/13 128/128/13 127/127/13 1759 | f 129/129/13 131/131/13 132/132/13 1760 | f 128/128/13 131/131/13 129/129/13 1761 | f 133/133/13 134/134/13 135/135/13 1762 | f 133/133/13 135/135/13 136/136/13 1763 | f 137/137/13 138/138/13 139/139/13 1764 | f 137/137/13 140/140/13 138/138/13 1765 | f 141/141/13 142/142/13 143/143/13 1766 | f 141/141/13 144/144/13 142/142/13 1767 | f 145/145/13 144/144/13 141/141/13 1768 | f 146/146/13 143/143/13 147/147/13 1769 | f 138/138/13 144/144/13 145/145/13 1770 | f 138/138/13 145/145/13 139/139/13 1771 | f 148/148/13 149/149/13 130/130/13 1772 | f 150/150/14 140/140/14 151/151/14 1773 | f 152/152/13 153/153/13 154/154/13 1774 | f 155/155/13 153/153/13 152/152/13 1775 | f 156/156/13 155/155/13 152/152/13 1776 | f 157/157/13 155/155/13 156/156/13 1777 | f 158/158/13 159/159/13 160/160/13 1778 | f 161/161/13 159/159/13 158/158/13 1779 | f 162/162/13 160/160/13 163/163/13 1780 | f 158/158/13 160/160/13 162/162/13 1781 | f 164/164/13 161/161/13 158/158/13 1782 | f 165/165/13 161/161/13 164/164/13 1783 | f 166/166/13 158/158/13 162/162/13 1784 | f 164/164/13 158/158/13 166/166/13 1785 | f 167/167/13 165/165/13 164/164/13 1786 | f 168/168/13 165/165/13 167/167/13 1787 | f 169/169/13 164/164/13 166/166/13 1788 | f 167/167/13 164/164/13 169/169/13 1789 | f 170/170/13 168/168/13 167/167/13 1790 | f 171/171/13 168/168/13 170/170/13 1791 | f 172/172/13 171/171/13 170/170/13 1792 | f 173/173/13 171/171/13 172/172/13 1793 | f 174/174/13 167/167/13 169/169/13 1794 | f 170/170/13 167/167/13 174/174/13 1795 | f 175/175/13 170/170/13 174/174/13 1796 | f 172/172/13 170/170/13 175/175/13 1797 | f 176/176/15 177/177/15 178/178/15 1798 | f 179/179/13 180/180/13 181/181/13 1799 | f 182/182/13 183/183/13 172/172/13 1800 | f 172/172/13 175/175/13 182/182/13 1801 | s 1 1802 | f 1/1/1 2/184/2 3/2/2 1803 | f 184/185/16 185/3/3 186/186/17 1804 | f 184/185/16 1/1/1 185/3/3 1805 | f 187/187/18 186/186/17 188/188/19 1806 | f 187/187/18 184/185/16 186/186/17 1807 | f 189/189/20 190/190/21 191/191/22 1808 | f 189/189/20 192/192/23 190/190/21 1809 | f 192/192/23 193/193/24 190/190/21 1810 | f 192/192/23 194/194/25 193/193/24 1811 | f 195/195/26 196/196/27 197/197/28 1812 | f 195/195/26 198/198/29 196/196/27 1813 | f 198/198/29 199/199/30 196/196/27 1814 | f 198/198/29 200/200/31 199/199/30 1815 | f 16/16/32 201/201/33 17/17/34 1816 | f 202/202/35 203/203/36 204/204/37 1817 | f 202/202/35 205/205/38 203/203/36 1818 | f 206/206/39 204/204/37 207/207/40 1819 | f 206/206/39 202/202/35 204/204/37 1820 | f 205/205/38 208/208/41 203/203/36 1821 | f 205/205/38 209/209/42 208/208/41 1822 | f 210/210/43 211/211/44 212/212/43 1823 | f 210/210/43 213/213/45 211/211/44 1824 | f 213/213/45 214/214/46 211/211/44 1825 | f 213/213/45 215/215/47 214/214/46 1826 | f 216/216/48 217/217/49 218/218/50 1827 | f 216/216/48 219/219/49 217/217/49 1828 | f 220/220/51 218/218/50 221/221/52 1829 | f 220/220/51 216/216/48 218/218/50 1830 | f 222/222/53 223/223/54 224/224/55 1831 | f 222/222/53 225/225/54 223/223/54 1832 | f 40/40/5 224/224/55 38/38/5 1833 | f 40/40/5 222/222/53 224/224/55 1834 | f 226/226/56 43/43/9 227/227/57 1835 | f 226/226/56 41/41/9 43/43/9 1836 | f 225/225/54 227/227/57 223/223/54 1837 | f 225/225/54 226/226/56 227/227/57 1838 | f 61/61/58 63/63/59 228/228/60 1839 | f 229/229/61 230/230/4 231/231/62 1840 | f 229/229/61 76/76/63 230/230/4 1841 | f 60/60/9 231/231/62 59/59/9 1842 | f 60/60/9 229/229/61 231/231/62 1843 | f 232/232/64 233/233/65 234/234/66 1844 | f 92/92/67 232/232/64 234/234/66 1845 | f 82/82/68 235/235/69 81/81/70 1846 | f 236/236/71 237/237/72 238/238/73 1847 | f 238/238/73 239/239/74 240/240/75 1848 | f 238/238/73 240/240/75 241/241/12 1849 | f 239/239/74 238/238/73 237/237/72 1850 | f 236/236/71 242/242/76 243/243/77 1851 | f 236/236/71 244/244/78 242/242/76 1852 | f 235/235/69 82/82/68 245/245/79 1853 | f 245/245/79 82/82/68 91/91/12 1854 | f 245/245/79 91/91/12 90/90/12 1855 | f 232/232/64 92/92/67 93/93/12 1856 | f 93/93/12 92/92/67 82/82/80 1857 | f 137/137/13 151/151/81 140/140/82 1858 | f 246/246/83 247/247/84 148/148/85 1859 | f 248/248/86 246/246/83 148/148/85 1860 | f 149/149/13 148/148/85 247/247/84 1861 | f 249/249/87 250/250/88 130/130/89 1862 | f 250/250/88 128/128/13 130/130/89 1863 | f 136/136/13 251/251/90 252/252/91 1864 | f 251/251/90 140/140/82 150/150/92 1865 | f 252/252/91 251/251/90 150/150/92 1866 | usemtl yellow 1867 | s off 1868 | f 253/253/93 254/254/93 255/255/93 1869 | f 253/253/93 256/256/93 254/254/93 1870 | f 257/257/94 258/258/94 259/259/94 1871 | f 257/257/94 260/260/94 258/258/94 1872 | f 261/261/95 262/262/95 263/263/95 1873 | f 261/261/95 264/264/95 262/262/95 1874 | f 265/265/93 266/266/93 267/267/93 1875 | f 265/265/93 268/268/93 266/266/93 1876 | f 269/269/96 270/270/96 271/271/96 1877 | f 269/269/96 272/272/96 270/270/96 1878 | f 256/256/93 273/273/93 254/254/93 1879 | f 256/256/93 274/274/93 273/273/93 1880 | f 275/275/97 276/276/97 277/277/97 1881 | f 275/275/97 278/278/97 276/276/97 1882 | f 279/279/98 280/280/98 281/281/98 1883 | f 279/279/98 282/282/98 280/280/98 1884 | f 283/283/94 284/284/94 285/285/94 1885 | f 283/283/94 286/286/94 284/284/94 1886 | f 287/287/4 288/288/4 289/289/4 1887 | f 289/289/4 288/288/4 290/290/4 1888 | f 289/289/4 290/290/4 286/286/4 1889 | f 286/286/4 290/290/4 291/291/4 1890 | f 292/292/4 293/293/4 294/294/4 1891 | f 294/294/4 293/293/4 295/295/4 1892 | f 279/279/4 296/296/4 292/292/4 1893 | f 292/292/4 296/296/4 293/293/4 1894 | f 297/297/4 298/298/4 299/299/4 1895 | f 299/299/4 298/298/4 300/300/4 1896 | f 299/299/4 300/300/4 301/301/4 1897 | f 301/301/4 300/300/4 302/302/4 1898 | f 303/303/4 287/287/4 304/304/4 1899 | f 292/292/4 294/294/4 305/305/4 1900 | f 306/306/4 307/307/4 308/308/4 1901 | f 307/307/4 309/309/4 308/308/4 1902 | f 297/297/4 299/299/4 310/310/4 1903 | f 311/311/4 312/312/4 313/313/4 1904 | f 313/313/4 312/312/4 314/314/4 1905 | f 314/314/4 312/312/4 315/315/4 1906 | f 315/315/4 312/312/4 316/316/4 1907 | f 316/316/4 317/317/4 318/318/4 1908 | f 318/318/4 317/317/4 319/319/4 1909 | f 319/319/4 317/317/4 320/320/4 1910 | f 321/321/4 322/322/4 311/311/4 1911 | f 322/322/4 323/323/4 311/311/4 1912 | f 311/311/4 323/323/4 312/312/4 1913 | f 323/323/4 324/324/4 312/312/4 1914 | f 324/324/4 325/325/4 312/312/4 1915 | f 316/316/4 312/312/4 325/325/4 1916 | f 325/325/4 326/326/4 316/316/4 1917 | f 326/326/4 327/327/4 316/316/4 1918 | f 327/327/4 328/328/4 316/316/4 1919 | f 317/317/4 316/316/4 328/328/4 1920 | f 328/328/4 329/329/4 320/320/4 1921 | f 329/329/4 330/330/4 320/320/4 1922 | f 331/331/4 332/332/4 333/333/4 1923 | f 332/332/4 334/334/4 333/333/4 1924 | f 334/334/4 335/335/4 333/333/4 1925 | f 336/336/54 337/337/54 338/338/54 1926 | f 339/339/54 337/337/54 336/336/54 1927 | f 340/340/54 339/339/54 336/336/54 1928 | f 341/341/54 339/339/54 340/340/54 1929 | f 342/342/54 343/343/54 344/344/54 1930 | f 345/345/54 343/343/54 342/342/54 1931 | f 344/344/54 346/346/54 347/347/54 1932 | f 343/343/54 346/346/54 344/344/54 1933 | f 348/348/54 349/349/54 350/350/54 1934 | f 351/351/54 349/349/54 348/348/54 1935 | f 352/352/54 351/351/54 348/348/54 1936 | f 353/353/54 351/351/54 352/352/54 1937 | f 354/354/54 355/355/54 356/356/54 1938 | f 357/357/54 342/342/54 344/344/54 1939 | f 358/358/54 359/359/54 360/360/54 1940 | f 358/358/54 361/361/54 359/359/54 1941 | f 362/362/54 348/348/54 350/350/54 1942 | f 362/362/54 363/363/54 348/348/54 1943 | f 364/364/54 363/363/54 362/362/54 1944 | f 360/360/54 363/363/54 364/364/54 1945 | f 359/359/54 363/363/54 360/360/54 1946 | f 361/361/54 365/365/54 359/359/54 1947 | f 357/357/54 365/365/54 361/361/54 1948 | f 344/344/54 365/365/54 357/357/54 1949 | f 348/348/54 366/366/54 352/352/54 1950 | f 348/348/54 367/367/54 366/366/54 1951 | f 363/363/54 367/367/54 348/348/54 1952 | f 363/363/54 368/368/54 367/367/54 1953 | f 363/363/54 369/369/54 368/368/54 1954 | f 369/369/54 363/363/54 359/359/54 1955 | f 359/359/54 370/370/54 369/369/54 1956 | f 359/359/54 371/371/54 370/370/54 1957 | f 359/359/54 372/372/54 371/371/54 1958 | f 372/372/54 359/359/54 365/365/54 1959 | f 344/344/54 373/373/54 372/372/54 1960 | f 344/344/54 347/347/54 373/373/54 1961 | f 374/374/54 375/375/54 376/376/54 1962 | f 374/374/54 377/377/54 375/375/54 1963 | f 374/374/54 378/378/54 377/377/54 1964 | s 1 1965 | f 379/379/99 380/380/94 381/381/99 1966 | f 379/379/99 382/382/94 380/380/94 1967 | f 383/383/100 381/381/99 384/384/100 1968 | f 383/383/100 379/379/99 381/381/99 1969 | f 385/385/101 386/386/102 387/387/101 1970 | f 385/385/101 388/388/102 386/386/102 1971 | f 389/389/103 390/390/104 391/391/103 1972 | f 389/389/103 392/392/104 390/390/104 1973 | f 392/392/104 393/393/105 390/390/104 1974 | f 392/392/104 394/394/105 393/393/105 1975 | f 394/394/105 395/395/106 393/393/105 1976 | f 394/394/105 396/396/106 395/395/106 1977 | f 388/388/102 397/397/107 386/386/102 1978 | f 388/388/102 398/398/107 397/397/107 1979 | f 399/399/108 400/400/109 401/401/108 1980 | f 399/399/108 402/402/109 400/400/109 1981 | f 403/403/110 401/401/108 404/404/110 1982 | f 403/403/110 399/399/108 401/401/108 1983 | f 405/405/111 404/404/110 406/406/111 1984 | f 405/405/111 403/403/110 404/404/110 1985 | f 407/407/112 406/406/111 408/408/112 1986 | f 407/407/112 405/405/111 406/406/111 1987 | f 409/409/113 408/408/112 410/410/113 1988 | f 409/409/113 407/407/112 408/408/112 1989 | f 411/411/114 410/410/113 412/412/114 1990 | f 411/411/114 409/409/113 410/410/113 1991 | f 413/413/115 412/412/114 414/414/115 1992 | f 413/413/115 411/411/114 412/412/114 1993 | f 415/415/116 414/414/115 416/416/116 1994 | f 415/415/116 413/413/115 414/414/115 1995 | usemtl blue 1996 | s off 1997 | f 417/417/117 418/418/117 419/419/117 1998 | f 417/417/117 420/420/117 418/418/117 1999 | f 421/421/94 422/422/94 423/423/94 2000 | f 421/421/94 424/424/94 422/422/94 2001 | f 425/425/94 426/426/94 427/427/94 2002 | f 425/425/94 428/428/94 426/426/94 2003 | f 429/429/93 430/430/93 431/431/93 2004 | f 429/429/93 432/432/93 430/430/93 2005 | f 433/433/93 434/434/93 435/435/93 2006 | f 433/433/93 436/436/93 434/434/93 2007 | f 437/437/94 438/438/94 439/439/94 2008 | f 437/437/94 440/440/94 438/438/94 2009 | f 441/441/13 442/442/13 443/443/13 2010 | f 444/444/13 445/445/13 446/446/13 2011 | f 447/447/94 448/448/94 449/449/94 2012 | f 447/447/94 444/444/94 448/448/94 2013 | f 450/450/4 451/451/4 452/452/4 2014 | f 452/452/4 451/451/4 453/453/4 2015 | f 452/452/4 453/453/4 454/454/4 2016 | f 454/454/4 453/453/4 455/455/4 2017 | f 456/456/4 457/457/4 458/458/4 2018 | f 458/458/4 457/457/4 459/459/4 2019 | f 460/460/4 461/461/4 456/456/4 2020 | f 456/456/4 461/461/4 457/457/4 2021 | f 462/462/4 463/463/4 464/464/4 2022 | f 463/463/4 462/462/4 465/465/4 2023 | f 463/463/4 465/465/4 466/466/4 2024 | f 466/466/4 465/465/4 467/467/4 2025 | f 468/468/4 467/467/4 469/469/4 2026 | f 470/470/4 471/471/4 472/472/4 2027 | f 473/473/4 474/474/4 475/475/4 2028 | f 475/475/4 474/474/4 476/476/4 2029 | f 474/474/4 477/477/4 476/476/4 2030 | f 476/476/4 477/477/4 478/478/4 2031 | f 479/479/4 480/480/4 481/481/4 2032 | f 481/481/4 480/480/4 482/482/4 2033 | f 482/482/4 480/480/4 483/483/4 2034 | f 483/483/4 480/480/4 472/472/4 2035 | f 483/483/4 472/472/4 473/473/4 2036 | f 473/473/4 472/472/4 474/474/4 2037 | f 472/472/4 471/471/4 474/474/4 2038 | f 471/471/4 484/484/4 474/474/4 2039 | f 484/484/4 485/485/4 474/474/4 2040 | f 474/474/4 485/485/4 477/477/4 2041 | f 485/485/4 486/486/4 477/477/4 2042 | f 486/486/4 487/487/4 477/477/4 2043 | f 488/488/4 465/465/4 462/462/4 2044 | f 488/488/4 469/469/4 465/465/4 2045 | f 469/469/4 467/467/4 465/465/4 2046 | f 489/489/4 490/490/4 479/479/4 2047 | f 490/490/4 491/491/4 479/479/4 2048 | f 479/479/4 491/491/4 492/492/4 2049 | f 480/480/4 492/492/4 472/472/4 2050 | f 492/492/4 493/493/4 472/472/4 2051 | f 494/494/4 495/495/4 496/496/4 2052 | f 497/497/4 496/496/4 495/495/4 2053 | f 498/498/54 499/499/54 500/500/54 2054 | f 501/501/54 499/499/54 498/498/54 2055 | f 502/502/54 501/501/54 498/498/54 2056 | f 503/503/54 501/501/54 502/502/54 2057 | f 504/504/54 505/505/54 506/506/54 2058 | f 507/507/54 505/505/54 504/504/54 2059 | f 506/506/54 508/508/54 509/509/54 2060 | f 505/505/54 508/508/54 506/506/54 2061 | f 510/510/54 511/511/54 512/512/54 2062 | f 513/513/54 512/512/54 511/511/54 2063 | f 514/514/54 513/513/54 511/511/54 2064 | f 515/515/54 513/513/54 514/514/54 2065 | f 516/516/54 515/515/54 517/517/54 2066 | f 518/518/54 519/519/54 520/520/54 2067 | f 521/521/54 522/522/54 523/523/54 2068 | f 524/524/54 522/522/54 521/521/54 2069 | f 524/524/54 505/505/54 522/522/54 2070 | f 508/508/54 505/505/54 524/524/54 2071 | f 503/503/54 525/525/54 501/501/54 2072 | f 526/526/54 527/527/54 528/528/54 2073 | f 529/529/54 527/527/54 526/526/54 2074 | f 530/530/54 527/527/54 529/529/54 2075 | f 531/531/54 530/530/54 529/529/54 2076 | f 532/532/54 530/530/54 531/531/54 2077 | f 532/532/54 533/533/54 530/530/54 2078 | f 532/532/54 534/534/54 533/533/54 2079 | f 532/532/54 535/535/54 534/534/54 2080 | f 536/536/54 535/535/54 532/532/54 2081 | f 536/536/54 537/537/54 535/535/54 2082 | f 536/536/54 538/538/54 537/537/54 2083 | f 539/539/54 540/540/54 541/541/54 2084 | f 540/540/54 542/542/54 541/541/54 2085 | f 540/540/54 543/543/54 542/542/54 2086 | f 544/544/54 545/545/54 546/546/54 2087 | f 544/544/54 547/547/54 545/545/54 2088 | f 548/548/54 547/547/54 544/544/54 2089 | f 530/530/54 548/548/54 527/527/54 2090 | f 530/530/54 549/549/54 548/548/54 2091 | f 530/530/54 550/550/54 549/549/54 2092 | f 550/550/54 530/530/54 551/551/54 2093 | s 1 2094 | f 552/552/118 553/553/119 554/554/118 2095 | f 552/552/118 555/555/119 553/553/119 2096 | f 556/556/120 557/557/121 558/558/120 2097 | f 556/556/120 559/559/121 557/557/121 2098 | f 559/559/121 560/560/122 557/557/121 2099 | f 559/559/121 561/561/122 560/560/122 2100 | f 561/561/122 562/562/123 560/560/122 2101 | f 561/561/122 563/563/123 562/562/123 2102 | f 564/564/124 565/565/125 566/566/124 2103 | f 564/564/124 567/567/125 565/565/125 2104 | f 567/567/125 568/568/126 565/565/125 2105 | f 567/567/125 569/569/126 568/568/126 2106 | f 569/569/126 558/558/120 568/568/126 2107 | f 569/569/126 556/556/120 558/558/120 2108 | f 570/570/127 554/554/118 571/571/127 2109 | f 570/570/127 552/552/118 554/554/118 2110 | f 572/572/128 571/571/127 573/573/128 2111 | f 572/572/128 570/570/127 571/571/127 2112 | f 574/574/129 573/573/128 575/575/129 2113 | f 574/574/129 572/572/128 573/573/128 2114 | f 576/576/130 575/575/129 577/577/130 2115 | f 576/576/130 574/574/129 575/575/129 2116 | f 578/578/131 579/579/93 580/580/131 2117 | f 578/578/131 581/581/93 579/579/93 2118 | f 582/582/13 580/580/131 583/583/13 2119 | f 582/582/13 578/578/131 580/580/131 2120 | f 584/584/132 585/585/133 586/586/132 2121 | f 584/584/132 451/451/134 585/585/133 2122 | f 587/587/135 586/586/132 588/588/135 2123 | f 587/587/135 584/584/132 586/586/132 2124 | f 589/589/136 588/588/135 590/590/136 2125 | f 589/589/136 587/587/135 588/588/135 2126 | f 591/591/137 590/590/136 592/592/137 2127 | f 591/591/137 589/589/136 590/590/136 2128 | f 593/593/138 592/592/137 594/594/138 2129 | f 593/593/138 591/591/137 592/592/137 2130 | f 595/595/13 594/594/138 596/596/13 2131 | f 595/595/13 593/593/138 594/594/138 2132 | usemtl green 2133 | s off 2134 | f 597/597/93 598/598/93 599/599/93 2135 | f 597/597/93 600/600/93 598/598/93 2136 | f 601/601/94 602/602/94 603/603/94 2137 | f 601/601/94 604/604/94 602/602/94 2138 | f 605/605/139 606/606/139 607/607/139 2139 | f 605/605/139 608/608/139 606/606/139 2140 | f 609/609/140 610/610/140 611/611/140 2141 | f 609/609/140 612/612/140 610/610/140 2142 | f 613/613/93 614/614/93 615/615/93 2143 | f 613/613/93 616/616/93 614/614/93 2144 | f 617/617/94 618/618/94 619/619/94 2145 | f 617/617/94 620/620/94 618/618/94 2146 | f 621/621/94 622/622/94 623/623/94 2147 | f 621/621/94 624/624/94 622/622/94 2148 | f 625/625/141 626/626/141 627/627/141 2149 | f 625/625/141 628/628/141 626/626/141 2150 | f 629/629/142 630/630/142 631/631/142 2151 | f 629/629/142 632/632/142 630/630/142 2152 | f 633/633/93 634/634/93 635/635/93 2153 | f 633/633/93 636/636/93 634/634/93 2154 | f 637/637/94 638/638/94 639/639/94 2155 | f 637/637/94 640/640/94 638/638/94 2156 | f 641/641/94 642/642/94 643/643/94 2157 | f 641/641/94 644/644/94 642/642/94 2158 | f 645/645/93 646/646/93 647/647/93 2159 | f 645/645/93 648/648/93 646/646/93 2160 | f 649/649/143 650/650/143 651/651/143 2161 | f 649/649/143 652/652/143 650/650/143 2162 | f 640/640/94 643/643/94 638/638/94 2163 | f 640/640/94 641/641/94 643/643/94 2164 | f 636/636/144 653/653/144 634/634/144 2165 | f 636/636/144 654/654/144 653/653/144 2166 | f 655/655/143 656/656/143 657/657/143 2167 | f 655/655/143 658/658/143 656/656/143 2168 | f 659/659/93 660/660/93 661/661/93 2169 | f 659/659/93 662/662/93 660/660/93 2170 | f 663/663/4 648/648/4 664/664/4 2171 | f 665/665/4 666/666/4 667/667/4 2172 | f 665/665/4 667/667/4 668/668/4 2173 | f 668/668/4 667/667/4 669/669/4 2174 | f 670/670/4 671/671/4 672/672/4 2175 | f 672/672/4 671/671/4 673/673/4 2176 | f 672/672/4 673/673/4 674/674/4 2177 | f 674/674/4 673/673/4 675/675/4 2178 | f 676/676/4 677/677/4 678/678/4 2179 | f 678/678/4 677/677/4 679/679/4 2180 | f 678/678/4 679/679/4 680/680/4 2181 | f 680/680/4 679/679/4 681/681/4 2182 | f 682/682/4 683/683/4 684/684/4 2183 | f 684/684/4 683/683/4 685/685/4 2184 | f 686/686/4 687/687/4 682/682/4 2185 | f 682/682/4 687/687/4 683/683/4 2186 | f 688/688/4 689/689/4 690/690/4 2187 | f 690/690/4 689/689/4 691/691/4 2188 | f 692/692/4 693/693/4 694/694/4 2189 | f 694/694/4 693/693/4 695/695/4 2190 | f 690/690/4 691/691/4 696/696/4 2191 | f 697/697/4 698/698/4 699/699/4 2192 | f 700/700/4 701/701/4 702/702/4 2193 | f 702/702/4 701/701/4 703/703/4 2194 | f 704/704/4 705/705/4 706/706/4 2195 | f 705/705/4 707/707/4 706/706/4 2196 | f 706/706/4 707/707/4 708/708/4 2197 | f 708/708/4 707/707/4 709/709/4 2198 | f 702/702/4 699/699/4 700/700/4 2199 | f 699/699/4 698/698/4 700/700/4 2200 | f 700/700/4 698/698/4 710/710/4 2201 | f 710/710/4 698/698/4 711/711/4 2202 | f 712/712/4 713/713/4 714/714/4 2203 | f 714/714/4 713/713/4 715/715/4 2204 | f 716/716/4 717/717/4 715/715/4 2205 | f 715/715/4 717/717/4 714/714/4 2206 | f 718/718/54 719/719/54 720/720/54 2207 | f 721/721/54 719/719/54 718/718/54 2208 | f 722/722/54 721/721/54 718/718/54 2209 | f 723/723/54 721/721/54 722/722/54 2210 | f 724/724/54 725/725/54 726/726/54 2211 | f 727/727/54 725/725/54 724/724/54 2212 | f 728/728/54 727/727/54 724/724/54 2213 | f 729/729/54 730/730/54 731/731/54 2214 | f 732/732/54 733/733/54 734/734/54 2215 | f 735/735/54 733/733/54 732/732/54 2216 | f 736/736/54 735/735/54 732/732/54 2217 | f 737/737/54 735/735/54 736/736/54 2218 | f 738/738/54 739/739/54 740/740/54 2219 | f 741/741/54 739/739/54 738/738/54 2220 | f 740/740/54 742/742/54 743/743/54 2221 | f 739/739/54 742/742/54 740/740/54 2222 | f 744/744/54 745/745/54 746/746/54 2223 | f 747/747/54 745/745/54 744/744/54 2224 | f 748/748/54 749/749/54 750/750/54 2225 | f 751/751/54 749/749/54 748/748/54 2226 | f 752/752/54 747/747/54 744/744/54 2227 | f 753/753/54 747/747/54 752/752/54 2228 | f 754/754/54 751/751/54 748/748/54 2229 | f 755/755/54 751/751/54 754/754/54 2230 | f 756/756/54 757/757/54 758/758/54 2231 | f 756/756/54 759/759/54 757/757/54 2232 | f 760/760/54 759/759/54 756/756/54 2233 | f 731/731/54 759/759/54 760/760/54 2234 | f 748/748/54 753/753/54 754/754/54 2235 | f 748/748/54 747/747/54 753/753/54 2236 | f 750/750/54 747/747/54 748/748/54 2237 | f 745/745/54 747/747/54 750/750/54 2238 | f 732/732/54 741/741/54 736/736/54 2239 | f 739/739/54 741/741/54 732/732/54 2240 | f 739/739/54 734/734/54 742/742/54 2241 | f 732/732/54 734/734/54 739/739/54 2242 | -------------------------------------------------------------------------------- /resources/objects/tree.mtl: -------------------------------------------------------------------------------- 1 | # MTL written from D:\Cloud\Projects\Personal\Turbosquid\Lowpoly_Trees\Publish_Sample\Lowpoly_tree_sample.obj 2 | newmtl Bark 3 | Kd 0.207595 0.138513 0.055181 4 | Ns 256 5 | d 1 6 | illum 1 7 | Ka 0 0 0 8 | Ks 0 0 0 9 | newmtl Tree 10 | Kd 0.256861 0.440506 0.110769 11 | Ns 256 12 | d 1 13 | illum 1 14 | Ka 0 0 0 15 | Ks 0 0 0 16 | -------------------------------------------------------------------------------- /resources/objects/tree.obj: -------------------------------------------------------------------------------- 1 | # OBJ written from D:\Cloud\Projects\Personal\Turbosquid\Lowpoly_Trees\Publish_Sample\Lowpoly_tree_sample.obj 2 | # Units meters 3 | 4 | o Tree_lp_11 5 | v -0.524753 -0.707811 -1.37533 6 | v -1.53072 -0.666692 -0.246043 7 | v -0.906262 -0.661508 1.11465 8 | v 0.545834 -0.691875 1.43058 9 | v 1.42838 -0.731081 0.229593 10 | v 1.00376 -0.742633 -1.23456 11 | v 0.786882 2.82926 -1.29208 12 | v 0.63432 3.39803 -0.788073 13 | v 0.981512 3.47944 -0.0789129 14 | v 1.52378 2.91226 0.0919508 15 | v 1.67634 2.34349 -0.412051 16 | v 1.32915 2.26209 -1.12121 17 | v 2.59035 4.58157 -2.36406 18 | v 2.28499 4.93522 -1.78959 19 | v 2.61892 4.92501 -1.15015 20 | v 3.30715 4.6892 -1.05697 21 | v 3.57986 4.27748 -1.60876 22 | v 3.19057 4.18931 -2.20974 23 | v 3.54873 7.47469 -3.08566 24 | v 3.17914 7.78206 -2.58487 25 | v 3.45759 7.91591 -1.98529 26 | v 4.12953 7.82592 -1.85391 27 | v 4.46704 7.4315 -2.31475 28 | v 4.16741 7.24017 -2.88795 29 | v 4.61062 9.7155 -4.61096 30 | v 4.32967 10.0261 -4.18947 31 | v 4.61849 10.3778 -3.75896 32 | v 5.1932 10.1512 -3.64934 33 | v 5.4464 9.75916 -4.01712 34 | v 5.23061 9.62172 -4.58895 35 | v 5.32991 12.1494 -6.04678 36 | v 4.94374 12.4323 -5.75564 37 | v 5.13216 12.7581 -5.32972 38 | v 5.682 12.7851 -5.24367 39 | v 6.06216 12.6056 -5.61406 40 | v 5.87457 12.2655 -6.02901 41 | v 4.50482 14.4674 -8.187 42 | v 4.19017 14.5513 -7.82242 43 | v 4.29636 14.8645 -7.4208 44 | v 4.81238 14.9139 -7.37723 45 | v 5.12365 14.8422 -7.74729 46 | v 4.97229 14.6929 -8.22209 47 | v 3.99985 17.357 -8.28958 48 | v 3.73223 17.4265 -7.97026 49 | v 3.86047 17.5496 -7.58888 50 | v 4.27885 17.5479 -7.50233 51 | v 4.54164 17.4121 -7.80389 52 | v 4.41747 17.3449 -8.20025 53 | v -1.32999 3.06875 -0.363729 54 | v -1.55759 2.54365 0.157999 55 | v -1.27446 2.48797 0.896637 56 | v -0.713633 3.03217 1.07856 57 | v -0.486032 3.55727 0.556835 58 | v -0.769166 3.61295 -0.181802 59 | v -3.13891 4.92041 0.608952 60 | v -3.54369 4.65459 1.16326 61 | v -3.18725 4.57937 1.79795 62 | v -2.5597 4.89534 1.93327 63 | v -2.19822 5.25073 1.3996 64 | v -2.47852 5.16848 0.728617 65 | v -3.69165 8.11752 0.828338 66 | v -4.08153 7.96337 1.40745 67 | v -3.81857 7.91917 2.02716 68 | v -3.12958 8.04124 2.1732 69 | v -2.73953 7.95445 1.58035 70 | v -3.00248 7.98061 0.959613 71 | v -3.08732 11.0352 1.06462 72 | v -3.43606 10.9484 1.53576 73 | v -3.28627 11.1202 2.13284 74 | v -2.66283 11.013 2.19557 75 | v -2.3154 10.9363 1.72171 76 | v -2.46225 11.1303 1.13072 77 | v -3.48996 13.9078 1.06409 78 | v -3.90333 13.8031 1.44793 79 | v -3.71347 13.7671 1.99329 80 | v -3.18115 13.8962 2.10893 81 | v -2.83285 14.1725 1.74622 82 | v -2.99599 14.138 1.19218 83 | v -4.00133 8.77271 1.0531 84 | v -3.13923 8.37941 1.16974 85 | v -4.34707 8.11694 0.90442 86 | v -3.49063 7.64338 1.01312 87 | v -4.50992 8.03998 1.63875 88 | v -3.67443 7.55971 1.81871 89 | v -4.16418 8.69576 1.78744 90 | v -3.32303 8.29574 1.97533 91 | v -5.39095 9.67738 0.666911 92 | v -5.90213 9.28261 0.442941 93 | v -6.10893 9.22953 1.09234 94 | v -5.72877 9.77441 1.25323 95 | v -6.74064 11.3948 0.568838 96 | v -7.10149 10.9461 0.356538 97 | v -7.23338 10.7799 0.932314 98 | v -6.87331 11.2291 1.14461 99 | v -7.69876 11.9113 0.443552 100 | v -8.10324 11.5316 0.251496 101 | v -8.0992 11.2996 0.790802 102 | v -7.82275 11.7732 1.00053 103 | v -8.46285 12.8019 1.2725 104 | v -8.95731 12.5917 1.14086 105 | v -8.88589 12.2117 1.53638 106 | v -8.43099 12.471 1.71465 107 | v -2.28227 5.84553 1.04559 108 | v -2.87672 5.10514 0.686232 109 | v -2.54328 5.76185 1.81172 110 | v -3.17736 4.99241 1.52808 111 | v -1.91518 5.26874 1.96791 112 | v -2.49943 4.42257 1.69388 113 | v -1.65417 5.35241 1.20179 114 | v -2.19879 4.5353 0.85203 115 | v -0.650002 6.83895 1.47679 116 | v -0.894234 6.86803 2.01372 117 | v -0.728117 6.31387 2.13249 118 | v -0.483885 6.28479 1.59556 119 | v 0.312135 7.16361 2.20397 120 | v 0.0298738 7.21088 2.69134 121 | v 0.133727 6.65995 2.763 122 | v 0.567266 6.70004 2.40261 123 | v 0.97366 7.64614 2.8445 124 | v 0.635033 7.68697 3.24996 125 | v 0.953424 7.38978 3.5517 126 | v 1.23368 7.27369 3.11728 127 | v 1.42008 8.48807 2.84257 128 | v 1.21664 8.65476 3.26961 129 | v 1.63447 8.52095 3.51262 130 | v 1.85446 8.40175 3.07795 131 | v 1.63962 9.84556 2.50049 132 | v 1.46076 9.79022 2.97366 133 | v 1.91164 9.93458 3.16023 134 | v 2.07711 9.72142 2.72881 135 | v 1.54687 11.2027 2.46467 136 | v 1.40554 11.0172 2.87937 137 | v 1.81029 11.1741 3.07406 138 | v 1.94363 11.0134 2.64659 139 | v -2.15729 7.1855 2.14287 140 | v -2.35035 6.72039 2.45419 141 | v -1.80345 6.61322 2.65402 142 | v -1.61039 7.07833 2.3427 143 | v -2.26412 7.84226 3.28072 144 | v -2.44926 7.37123 3.51805 145 | v -1.91809 7.23764 3.62975 146 | v -1.75831 7.75817 3.50332 147 | v -2.58399 8.10859 4.30162 148 | v -2.74287 7.62928 4.45258 149 | v -2.33356 7.59262 4.78256 150 | v -2.13677 8.03292 4.57001 151 | v -3.14679 8.66965 4.83075 152 | v -3.44636 8.45936 5.17168 153 | v -3.07754 8.47961 5.50897 154 | v -2.77663 8.68594 5.16679 155 | v -3.17157 9.93949 4.85731 156 | v -3.47714 9.77942 5.20787 157 | v -3.15146 9.89589 5.55751 158 | v -2.81727 9.92985 5.19828 159 | v -3.7328 11.1812 5.02111 160 | v -3.90473 10.8456 5.35205 161 | v -3.69858 11.1441 5.6986 162 | v -3.36631 11.0456 5.3358 163 | v 5.748 11.6475 -6.08637 164 | v 5.56824 11.7865 -4.97864 165 | v 5.79319 11.0142 -6.00004 166 | v 5.62471 11.0673 -4.90753 167 | v 5.17074 10.9534 -6.1396 168 | v 4.91558 10.9983 -5.04161 169 | v 5.12555 11.5867 -6.22594 170 | v 4.85911 11.7176 -5.11272 171 | v 6.01564 11.4634 -7.14982 172 | v 6.05398 10.8789 -7.03803 173 | v 5.46197 10.8451 -7.10101 174 | v 5.46079 11.3852 -7.35379 175 | v 6.27901 10.9308 -8.18239 176 | v 6.17475 10.465 -7.86734 177 | v 5.73833 10.3553 -8.2203 178 | v 5.71131 10.9257 -8.25148 179 | v 6.89322 10.6549 -9.06408 180 | v 6.86041 10.1333 -9.0109 181 | v 6.50352 10.1118 -9.39583 182 | v 6.47504 10.6362 -9.38154 183 | v 7.62143 10.7374 -9.75395 184 | v 7.90282 10.3007 -9.89653 185 | v 7.50426 10.3398 -10.2569 186 | v 7.63472 10.8621 -10.2779 187 | v 8.96624 11.0281 -9.91979 188 | v 9.25974 10.646 -9.98339 189 | v 9.04398 10.6783 -10.4176 190 | v 9.05387 11.1626 -10.3784 191 | v 1.85614 12.673 2.9672 192 | v -4.10729 12.4851 5.3907 193 | v 10.8466 20.3032 -5.81436 194 | v 6.87322 24.2135 -4.22274 195 | v 5.90952 18.5685 -3.3188 196 | v 8.06006 15.6382 -7.83539 197 | v 2.36455 16.6654 -7.49283 198 | v 1.63104 21.9652 -5.26009 199 | v 9.61936 24.7719 -9.29799 200 | v 10.3529 19.4721 -11.5307 201 | v 6.07439 22.8688 -13.472 202 | v 5.11069 17.2238 -12.5681 203 | v 1.13734 21.1341 -10.9765 204 | v 3.92385 25.7991 -8.95543 205 | v -8.0904 21.5101 5.79498 206 | v -0.851714 21.0368 6.86486 207 | v -3.50264 25.4041 1.60499 208 | v -4.99437 14.9908 7.09148 209 | v 1.50683 14.8557 3.70278 210 | v 2.42877 21.2915 0.311945 211 | v -9.28367 22.0573 -1.41917 212 | v -6.92512 15.8762 -4.58125 213 | v -10.2056 15.6215 1.97166 214 | v -4.27419 11.5089 0.678616 215 | v 0.313567 15.403 -3.51137 216 | v -2.78246 21.9222 -4.80787 217 | v -12.0443 16.7223 6.65824 218 | v -10.8649 19.2722 2.91027 219 | v -14.0619 15.8715 2.5175 220 | v -12.7275 12.3079 5.24887 221 | v -11.9703 12.1295 0.629857 222 | v -10.8191 16.4337 -0.81548 223 | v -7.55456 17.8104 5.88439 224 | v -8.70571 13.5062 7.32972 225 | v -5.46294 14.0684 3.99675 226 | v -8.65997 10.6677 3.60398 227 | v -7.48055 13.2176 -0.143998 228 | v -6.79736 17.632 1.26537 229 | v 0.0260677 13.3493 1.17591 230 | v 1.76198 15.2723 2.18123 231 | v 2.72727 13.2562 0.530265 232 | v 1.3649 10.9144 1.14809 233 | v 3.92825 11.3325 2.13621 234 | v 4.17366 14.0259 2.77472 235 | v -0.196977 14.1765 3.81941 236 | v -0.442385 11.4831 3.1809 237 | v 1.004 12.2528 5.42535 238 | v 1.9693 10.2367 3.77439 239 | v 3.7052 12.1597 4.77971 240 | v 2.36637 14.5946 4.80753 241 | v 13.9192 11.3979 -10.9759 242 | v 11.569 9.36617 -12.6032 243 | v 11.6449 12.8144 -13.2389 244 | v 12.2513 8.87661 -9.19811 245 | v 8.94605 8.73477 -10.3623 246 | v 8.57131 11.1684 -12.8597 247 | v 12.3741 14.4559 -10.2267 248 | v 9.75122 13.8245 -7.9858 249 | v 12.7489 12.0222 -7.72934 250 | v 9.67527 10.3763 -7.35011 251 | v 7.40095 11.7927 -9.61308 252 | v 9.06893 14.3141 -11.3909 253 | v 2.00384 21.4118 -4.55281 254 | v 4.54963 22.6688 -2.18035 255 | v 3.04216 19.3275 -1.67746 256 | v -0.529795 19.531 -2.62065 257 | v 0.450123 19.6257 0.945956 258 | v 3.58938 21.565 1.21808 259 | v 1.90933 24.9374 -3.43434 260 | v -1.22992 22.9981 -3.70646 261 | v -0.68271 25.2355 -0.810925 262 | v -2.19017 21.8942 -0.308036 263 | v 0.355617 23.1513 2.06443 264 | v 2.88925 25.0321 0.132266 265 | v -0.36303 2.39901 -1.14342 266 | v -1.26129 2.20093 -0.194404 267 | v -0.714177 2.18956 0.836823 268 | v -1.18249 5.8804 1.388 269 | v 0.48326 2.3491 1.08727 270 | v 1.31858 2.03719 0.103932 271 | v 0.854202 2.07139 -0.969078 272 | v -0.0482781 3.49454 -0.524021 273 | v 0.324427 3.47256 0.458374 274 | v -1.91764 6.39276 1.22418 275 | v -2.25408 6.35112 2.06127 276 | v -1.52244 5.91116 2.12541 277 | v -1.44617 6.78437 1.88912 278 | v -4.14722 12.4928 5.11924 279 | v -4.33194 12.2734 5.42385 280 | v -4.06593 12.4726 5.66204 281 | v 1.58185 12.5037 3.05804 282 | v 1.94016 12.411 3.18549 283 | v -3.85257 12.5966 5.35495 284 | v 1.73995 12.659 2.71297 285 | v 2.09998 12.581 2.84234 286 | vn -0.707182 0.353103 -0.612545 287 | vn -0.576446 0.794496 0.191014 288 | vn 0.157502 0.419852 0.893822 289 | vn 0.723032 -0.339289 0.601753 290 | vn 0.624026 -0.749965 -0.21942 291 | vn -0.124887 -0.393752 -0.910693 292 | vn -0.834439 0.143717 -0.532031 293 | vn -0.879745 0.339599 0.332747 294 | vn -0.0428168 0.256548 0.965583 295 | vn 0.860824 -0.0988569 0.499209 296 | vn 0.812408 -0.3353 -0.47704 297 | vn 0.0893123 -0.243302 -0.96583 298 | vn -0.807039 -0.00841916 -0.590439 299 | vn -0.796072 0.552821 0.24629 300 | vn -0.0738101 0.605625 0.792319 301 | vn 0.826996 0.053808 0.559628 302 | vn 0.808648 -0.535295 -0.244022 303 | vn 0.0336526 -0.59079 -0.806123 304 | vn -0.861242 -0.103988 -0.497442 305 | vn -0.878697 0.396901 0.265258 306 | vn 0.0383358 0.51224 0.857986 307 | vn 0.863208 0.0917777 0.496436 308 | vn 0.903706 -0.340856 -0.2591 309 | vn -0.0398797 -0.470447 -0.881526 310 | vn -0.714044 -0.594926 -0.36906 311 | vn -0.920447 0.0221743 0.390237 312 | vn -0.14676 0.669673 0.728011 313 | vn 0.669345 0.640291 0.376835 314 | vn 0.916898 -0.0193545 -0.398653 315 | vn 0.158834 -0.628719 -0.761238 316 | vn -0.765264 -0.155906 -0.624551 317 | vn -0.928788 -0.130087 0.34703 318 | vn -0.0885963 0.0478956 0.994915 319 | vn 0.769435 0.184895 0.611378 320 | vn 0.915247 0.194387 -0.352898 321 | vn -0.053307 -0.0447307 -0.997576 322 | vn -0.68682 -0.340379 -0.642199 323 | vn -0.664158 -0.720262 0.200291 324 | vn 0.0463175 -0.359323 0.932063 325 | vn 0.666022 0.36028 0.653156 326 | vn 0.609832 0.772854 -0.175502 327 | vn -0.0869996 0.395345 -0.914403 328 | vn -0.814856 -0.0901956 -0.572603 329 | vn -0.864835 -0.195223 0.462545 330 | vn -0.18881 -0.102715 0.976627 331 | vn 0.837629 0.110946 0.534854 332 | vn 0.895232 0.199529 -0.398433 333 | vn 0.143801 0.0924713 -0.985277 334 | vn -0.836449 0.202754 -0.50916 335 | vn -0.908172 0.137974 0.395204 336 | vn -0.207736 0.00225185 0.978182 337 | vn 0.818963 -0.132831 0.558261 338 | vn 0.910324 -0.134882 -0.391303 339 | vn 0.191016 0.0205507 -0.981372 340 | vn -0.664689 -0.0933061 -0.741271 341 | vn -0.948671 -0.14666 0.280205 342 | vn -0.0980147 0.012282 0.995109 343 | vn 0.677216 0.102767 0.728572 344 | vn 0.969336 0.156428 -0.189521 345 | vn 0.0993703 0.0379529 -0.994326 346 | vn 0.188658 0.117397 -0.975001 347 | vn -0.455691 -0.868697 -0.194191 348 | vn -0.255258 -0.0831096 0.963294 349 | vn 0.387588 0.903631 0.182281 350 | vn 0.243292 0.248047 -0.9377 351 | vn -0.447376 -0.826708 -0.341187 352 | vn -0.270999 -0.225065 0.935898 353 | vn 0.411902 0.846101 0.338304 354 | vn -0.144646 0.564955 -0.812345 355 | vn -0.839764 -0.501033 -0.209194 356 | vn 0.217365 -0.498533 0.839177 357 | vn 0.843755 0.446108 0.298439 358 | vn -0.728398 0.663397 -0.171291 359 | vn -0.309459 -0.0928102 0.946373 360 | vn 0.775854 -0.599432 0.196804 361 | vn 0.356748 0.156449 -0.921008 362 | vn -0.21305 0.965581 -0.149209 363 | vn -0.590367 -0.00398174 0.807125 364 | vn 0.24993 -0.95404 0.16536 365 | vn 0.606147 0.0112522 -0.795273 366 | vn -0.360379 0.885076 -0.294565 367 | vn -0.677921 -0.0322752 0.734425 368 | vn 0.389094 -0.841661 0.374449 369 | vn 0.697044 0.0782124 -0.71275 370 | vn -0.726923 0.447432 -0.520949 371 | vn -0.414308 0.279371 0.866199 372 | vn 0.750064 -0.434363 0.498732 373 | vn 0.419295 -0.261059 -0.869505 374 | vn -0.89704 0.0340356 -0.440636 375 | vn -0.407885 0.295336 0.863948 376 | vn 0.916326 -0.081961 0.391956 377 | vn 0.379315 -0.283312 -0.880826 378 | vn -0.930044 -0.0730704 -0.36011 379 | vn -0.390895 0.0319849 0.919879 380 | vn 0.945226 0.117049 0.304709 381 | vn 0.464535 0.0083811 -0.885515 382 | vn -0.943895 0.23982 -0.227045 383 | vn -0.331916 -0.818096 0.469628 384 | vn 0.941978 -0.223147 0.250765 385 | vn 0.326394 0.833163 -0.446436 386 | vn -0.921241 0.191484 -0.338597 387 | vn -0.276894 -0.94188 0.19024 388 | vn 0.905052 -0.184758 0.383073 389 | vn 0.231847 0.958712 -0.164679 390 | vn -0.707738 0.0121329 -0.706371 391 | vn -0.447412 -0.760574 0.470478 392 | vn 0.711301 0.0212401 0.702566 393 | vn 0.40221 0.800375 -0.444554 394 | vn -0.753924 0.000429211 -0.656962 395 | vn -0.7201 -0.0612769 0.691159 396 | vn 0.731393 0.0148055 0.681795 397 | vn 0.671197 0.0285953 -0.740727 398 | vn -0.733572 -0.248089 -0.632712 399 | vn -0.623464 -0.352172 0.698045 400 | vn 0.701341 0.23119 0.674294 401 | vn 0.646852 0.379613 -0.66142 402 | vn 0.984666 0.0919602 0.148247 403 | vn 0.085229 -0.994523 0.0604959 404 | vn -0.970396 -0.0980064 -0.220741 405 | vn -0.0709067 0.988553 -0.133176 406 | vn 0.968858 0.100014 0.22652 407 | vn 0.0639715 -0.9874 0.144735 408 | vn -0.958241 -0.104655 -0.266123 409 | vn -0.052922 0.980187 -0.190874 410 | vn 0.975256 0.101531 0.196384 411 | vn 0.00938224 -0.915213 0.402861 412 | vn -0.975334 -0.0953226 -0.199091 413 | vn 0.0397141 0.892126 -0.450039 414 | vn 0.866559 0.13163 0.481404 415 | vn 0.0533302 -0.970355 0.235727 416 | vn -0.842565 -0.0690981 -0.534144 417 | vn 0.0966777 0.97793 -0.185223 418 | vn 0.643519 0.0374734 0.764513 419 | vn 0.0347652 -0.988689 -0.145894 420 | vn -0.61011 -0.0115512 -0.792233 421 | vn -0.117826 0.988313 0.0967233 422 | vn 0.12183 -0.23622 0.964032 423 | vn 0.194827 -0.966228 -0.168658 424 | vn -0.100535 -0.0148497 -0.994823 425 | vn -0.186754 0.956762 0.223001 426 | vn 0.430095 0.0706945 0.900011 427 | vn 0.520386 -0.581685 0.625173 428 | vn -0.124898 -0.858437 0.497481 429 | vn -0.613996 -0.377099 0.693401 430 | vn -0.270992 0.197136 0.942179 431 | vn 0.613996 0.377099 -0.693401 432 | vn 0.270992 -0.197136 -0.942179 433 | vn -0.430095 -0.0706945 -0.900011 434 | vn -0.520386 0.581685 -0.625173 435 | vn 0.124898 0.858437 -0.497481 436 | vn 0.712328 0.542627 0.445135 437 | vn 0.858421 -0.512945 0.000436633 438 | vn -0.18567 -0.960739 -0.206173 439 | vn -0.977048 -0.181918 0.110833 440 | vn -0.422055 0.747213 0.513363 441 | vn 0.977048 0.181918 -0.110833 442 | vn 0.422055 -0.747213 -0.513364 443 | vn -0.712328 -0.542627 -0.445135 444 | vn -0.858421 0.512945 -0.000436642 445 | vn 0.18567 0.960739 0.206173 446 | vn -0.0468872 0.756776 0.651991 447 | vn -0.136615 0.130414 0.982002 448 | vn 0.440658 -0.269844 0.856157 449 | vn 0.88716 0.109145 0.448368 450 | vn 0.585841 0.743631 0.322187 451 | vn -0.88716 -0.109145 -0.448368 452 | vn -0.585841 -0.743631 -0.322187 453 | vn 0.0468871 -0.756776 -0.651991 454 | vn 0.136615 -0.130414 -0.982002 455 | vn -0.440658 0.269844 -0.856157 456 | vn -0.554069 0.818158 0.153706 457 | vn -0.699251 -0.195317 0.687677 458 | vn 0.234797 -0.842948 0.484054 459 | vn 0.957252 -0.229732 -0.175762 460 | vn 0.469706 0.796888 -0.379928 461 | vn -0.957252 0.229732 0.175762 462 | vn -0.469706 -0.796888 0.379928 463 | vn 0.554069 -0.818158 -0.153706 464 | vn 0.699251 0.195317 -0.687677 465 | vn -0.234796 0.842948 -0.484055 466 | vn -0.723515 0.655 0.217949 467 | vn -0.898899 -0.000772606 0.438154 468 | vn -0.89193 -0.433237 -0.129485 469 | vn -0.712238 -0.0447417 -0.70051 470 | vn -0.608152 0.627825 -0.485785 471 | vn 0.712238 0.0447416 0.70051 472 | vn 0.608152 -0.627825 0.485785 473 | vn 0.723515 -0.655 -0.217949 474 | vn 0.8989 0.000772474 -0.438154 475 | vn 0.89193 0.433237 0.129485 476 | vn -0.110776 0.837572 0.534979 477 | vn -0.394555 -0.223491 0.891279 478 | vn -0.383279 -0.923232 -0.0271805 479 | vn -0.0925313 -0.294635 -0.95112 480 | vn 0.0758845 0.793602 -0.603686 481 | vn 0.0925313 0.294635 0.95112 482 | vn -0.0758845 -0.793602 0.603686 483 | vn 0.110776 -0.837572 -0.534979 484 | vn 0.394555 0.223491 -0.891279 485 | vn 0.383279 0.923232 0.0271805 486 | vn -0.17167 0.573662 -0.8009 487 | vn -0.234693 -0.118022 -0.964878 488 | vn 0.384657 -0.438119 -0.81246 489 | vn 0.83046 0.0557355 -0.554283 490 | vn 0.486632 0.68105 -0.547139 491 | vn -0.83046 -0.0557355 0.554283 492 | vn -0.486632 -0.68105 0.547139 493 | vn 0.17167 -0.573662 0.8009 494 | vn 0.234693 0.118022 0.964878 495 | vn -0.384657 0.438119 0.81246 496 | vn -0.635804 0.719719 -0.278851 497 | vn -0.737778 -0.399449 -0.544172 498 | vn 0.264352 -0.917376 -0.297555 499 | vn 0.985677 -0.118304 0.120185 500 | vn 0.429351 0.893477 0.131744 501 | vn -0.985677 0.118304 -0.120185 502 | vn -0.429351 -0.893477 -0.131744 503 | vn 0.635804 -0.719719 0.278851 504 | vn 0.737778 0.399449 0.544172 505 | vn -0.264352 0.917376 0.297555 506 | vn 0.648023 -0.151861 -0.746327 507 | vn 0.724277 -0.647073 -0.238157 508 | vn 0.0988479 -0.981993 -0.16099 509 | vn -0.363943 -0.693773 -0.62147 510 | vn -0.0245342 -0.180723 -0.983228 511 | vn 0.363943 0.693773 0.62147 512 | vn 0.0245344 0.180723 0.983228 513 | vn -0.648023 0.151861 0.746327 514 | vn -0.724277 0.647073 0.238157 515 | vn -0.0988479 0.981993 0.16099 516 | vn 0.74928 0.488225 -0.447454 517 | vn 0.872662 -0.313045 0.374784 518 | vn -0.139304 -0.854958 0.499641 519 | vn -0.888115 -0.388607 -0.24543 520 | vn -0.33894 0.441525 -0.830768 521 | vn 0.888115 0.388607 0.24543 522 | vn 0.33894 -0.441525 0.830768 523 | vn -0.74928 -0.488225 0.447454 524 | vn -0.872662 0.313045 -0.374784 525 | vn 0.139304 0.854958 -0.499642 526 | vn 0.721958 -0.409644 -0.557646 527 | vn 0.116466 -0.783693 -0.610132 528 | vn -0.0687442 -0.996603 0.0453484 529 | vn 0.422281 -0.75414 0.502943 530 | vn 0.910962 -0.391379 0.130272 531 | vn -0.422281 0.75414 -0.502943 532 | vn -0.910962 0.391379 -0.130272 533 | vn -0.721958 0.409644 0.557646 534 | vn -0.116466 0.783693 0.610132 535 | vn 0.0687442 0.996603 -0.0453484 536 | vn 0.586919 0.259081 -0.767075 537 | vn -0.392788 -0.346144 -0.851999 538 | vn -0.692464 -0.69064 0.20859 539 | vn 0.102032 -0.298326 0.948995 540 | vn 0.892734 0.288634 0.346001 541 | vn -0.102032 0.298326 -0.948995 542 | vn -0.892734 -0.288634 -0.346001 543 | vn -0.586919 -0.259081 0.767075 544 | vn 0.392788 0.346144 0.851999 545 | vn 0.692464 0.69064 -0.20859 546 | vn -0.74219 0.0882244 -0.664358 547 | vn -0.906226 0.077662 0.415599 548 | vn -0.209306 0.105442 0.972149 549 | vn 0.804333 0.0829717 0.588357 550 | vn 0.957402 0.077135 -0.278266 551 | vn 0.0930523 0.0692961 -0.993247 552 | vn -0.301743 0.533451 -0.790178 553 | vn 0.00597455 0.99978 0.020105 554 | vn 0.454371 0.483178 0.748389 555 | vn 0.726362 -0.161178 0.668147 556 | vn 0.435797 -0.873629 -0.216456 557 | vn 0.0268942 -0.389906 -0.920462 558 | vn -0.69279 -0.190547 -0.69551 559 | vn -0.439492 -0.869976 0.22358 560 | vn -0.121255 -0.200066 0.97225 561 | vn 0.278698 0.498809 0.820681 562 | vn 0.146497 0.988645 -0.0334561 563 | vn -0.276805 0.531974 -0.800239 564 | vn -0.80173 0.519009 -0.296408 565 | vn -0.167819 -0.136748 0.976287 566 | vn 0.64492 -0.691164 0.326143 567 | vn 0.276333 0.0905736 -0.956784 568 | vn -0.29345 0.938043 -0.184289 569 | vn -0.145497 0.270243 0.951735 570 | vn 0.437523 -0.867173 0.237874 571 | vn 0.202826 -0.0219909 -0.978968 572 | vn -0.953548 0.168949 -0.249404 573 | vn -0.413667 -0.0601257 0.908441 574 | vn 0.930239 -0.135374 0.34107 575 | vn 0.442294 0.0675622 -0.894322 576 | vn -0.920847 0.142321 -0.363023 577 | vn -0.442797 -0.645672 0.622124 578 | vn 0.902154 0.0375057 0.42978 579 | vn 0.216477 0.76637 -0.604827 580 | vn -0.771364 -0.200427 -0.604008 581 | vn -0.561279 -0.208215 0.801007 582 | vn 0.748128 0.226852 0.623572 583 | vn 0.571888 0.189145 -0.798228 584 | vn 0.0761471 0.895747 0.437993 585 | vn 0.0295078 0.890108 0.454794 586 | vn 0.909357 -0.0522323 -0.412725 587 | vn -0.665006 0.735969 0.126948 588 | vn -0.396443 0.913304 0.0933186 589 | vn 0.948522 0.288194 -0.131341 590 | vn -0.348466 -0.157361 0.924018 591 | vn -0.768726 -0.569365 -0.29135 592 | vn 0.730221 0.59323 0.338902 593 | vn 0.28988 0.159987 -0.943596 594 | vn -0.344032 -0.0313883 0.938433 595 | vn -0.538136 -0.817545 -0.205011 596 | vn 0.495396 0.845687 0.198483 597 | vn 0.301507 0.056832 -0.951769 598 | vt 0.175435 0.163566 599 | vt 0.227393 0.163566 600 | vt 0.202202 0.288261 601 | vt 0.150245 0.289632 602 | vt 0.279351 0.163566 603 | vt 0.25416 0.285937 604 | vt 0.331308 0.163566 605 | vt 0.306118 0.289632 606 | vt 0.383266 0.163566 607 | vt 0.358075 0.288261 608 | vt 0.435223 0.163566 609 | vt 0.410033 0.285937 610 | vt 0.487181 0.163566 611 | vt 0.46199 0.289632 612 | vt 0.172788 0.435765 613 | vt 0.12083 0.437733 614 | vt 0.224745 0.434466 615 | vt 0.276703 0.437733 616 | vt 0.32866 0.435765 617 | vt 0.380618 0.434466 618 | vt 0.432576 0.437733 619 | vt 0.144204 0.574706 620 | vt 0.0922468 0.576682 621 | vt 0.196162 0.579905 622 | vt 0.24812 0.576682 623 | vt 0.300077 0.574706 624 | vt 0.352035 0.579905 625 | vt 0.403993 0.576682 626 | vt 0.11652 0.717314 627 | vt 0.0645629 0.714772 628 | vt 0.168478 0.716962 629 | vt 0.220436 0.714772 630 | vt 0.272393 0.717314 631 | vt 0.324351 0.716962 632 | vt 0.376309 0.714772 633 | vt 0.0874922 0.86143 634 | vt 0.0355346 0.86116 635 | vt 0.13945 0.865035 636 | vt 0.191408 0.86116 637 | vt 0.243365 0.86143 638 | vt 0.295323 0.865035 639 | vt 0.34728 0.86116 640 | vt 0.0619576 0.988661 641 | vt 0.01 0.99 642 | vt 0.113915 0.98979 643 | vt 0.165873 0.99 644 | vt 0.217831 0.988661 645 | vt 0.269788 0.98979 646 | vt 0.321746 0.99 647 | vt 0.227375 0.163655 648 | vt 0.201632 0.292434 649 | vt 0.149675 0.290455 650 | vt 0.175418 0.163655 651 | vt 0.279333 0.163655 652 | vt 0.25359 0.288954 653 | vt 0.33129 0.163655 654 | vt 0.305548 0.290455 655 | vt 0.383248 0.163655 656 | vt 0.357505 0.292434 657 | vt 0.435206 0.163655 658 | vt 0.409463 0.288954 659 | vt 0.487163 0.163655 660 | vt 0.461421 0.290455 661 | vt 0.173259 0.433 662 | vt 0.121302 0.437702 663 | vt 0.225217 0.432648 664 | vt 0.277175 0.437702 665 | vt 0.329132 0.433 666 | vt 0.38109 0.432648 667 | vt 0.433048 0.437702 668 | vt 0.144368 0.572834 669 | vt 0.0924105 0.57602 670 | vt 0.196326 0.579962 671 | vt 0.248283 0.57602 672 | vt 0.300241 0.572834 673 | vt 0.352199 0.579962 674 | vt 0.404156 0.57602 675 | vt 0.0656247 0.709654 676 | vt 0.117582 0.713252 677 | vt 0.16954 0.711774 678 | vt 0.221498 0.709654 679 | vt 0.273455 0.713252 680 | vt 0.325413 0.711774 681 | vt 0.37737 0.709654 682 | vt 0.52166 0.295987 683 | vt 0.529215 0.333762 684 | vt 0.472124 0.333762 685 | vt 0.464568 0.295987 686 | vt 0.578752 0.295987 687 | vt 0.586307 0.333762 688 | vt 0.635843 0.295987 689 | vt 0.643398 0.333762 690 | vt 0.692935 0.295987 691 | vt 0.70049 0.333762 692 | vt 0.560793 0.489959 693 | vt 0.569502 0.534311 694 | vt 0.512411 0.531188 695 | vt 0.503702 0.48994 696 | vt 0.617885 0.48994 697 | vt 0.626594 0.531188 698 | vt 0.674977 0.489959 699 | vt 0.683685 0.534311 700 | vt 0.732068 0.48994 701 | vt 0.740777 0.531188 702 | vt 0.578416 0.577857 703 | vt 0.521325 0.576322 704 | vt 0.635508 0.576322 705 | vt 0.692599 0.577857 706 | vt 0.749691 0.576322 707 | vt 0.452228 0.586489 708 | vt 0.458819 0.619443 709 | vt 0.412457 0.619443 710 | vt 0.405866 0.586489 711 | vt 0.498591 0.586489 712 | vt 0.505182 0.619443 713 | vt 0.544953 0.586489 714 | vt 0.551544 0.619443 715 | vt 0.591316 0.586489 716 | vt 0.597907 0.619443 717 | vt 0.425806 0.68619 718 | vt 0.472169 0.68619 719 | vt 0.48226 0.736613 720 | vt 0.435897 0.733184 721 | vt 0.518531 0.68619 722 | vt 0.528622 0.733184 723 | vt 0.564894 0.68619 724 | vt 0.574985 0.736613 725 | vt 0.611256 0.68619 726 | vt 0.621347 0.733184 727 | vt 0.490959 0.777583 728 | vt 0.444596 0.779163 729 | vt 0.537321 0.779163 730 | vt 0.583684 0.777583 731 | vt 0.630046 0.779163 732 | vt 0.500113 0.824583 733 | vt 0.453751 0.823776 734 | vt 0.546476 0.823776 735 | vt 0.592838 0.824583 736 | vt 0.639201 0.823776 737 | vt 0.510271 0.875009 738 | vt 0.463908 0.879329 739 | vt 0.556633 0.879329 740 | vt 0.602996 0.875009 741 | vt 0.649358 0.879329 742 | vt 0.520698 0.924894 743 | vt 0.474336 0.930396 744 | vt 0.567061 0.930396 745 | vt 0.613423 0.924894 746 | vt 0.659786 0.930396 747 | vt 0.425483 0.684572 748 | vt 0.471845 0.684572 749 | vt 0.482139 0.735481 750 | vt 0.435777 0.733512 751 | vt 0.518207 0.684572 752 | vt 0.528502 0.733512 753 | vt 0.56457 0.684572 754 | vt 0.574864 0.735481 755 | vt 0.610932 0.684572 756 | vt 0.621227 0.733512 757 | vt 0.491103 0.778269 758 | vt 0.444741 0.779574 759 | vt 0.537466 0.779574 760 | vt 0.583828 0.778269 761 | vt 0.630191 0.779574 762 | vt 0.500215 0.824696 763 | vt 0.453852 0.824765 764 | vt 0.546577 0.824765 765 | vt 0.59294 0.824696 766 | vt 0.639302 0.824765 767 | vt 0.510036 0.874687 768 | vt 0.463673 0.876745 769 | vt 0.556398 0.876745 770 | vt 0.602761 0.874687 771 | vt 0.649123 0.876745 772 | vt 0.474026 0.929901 773 | vt 0.520388 0.922535 774 | vt 0.566751 0.929901 775 | vt 0.613113 0.922535 776 | vt 0.659476 0.929901 777 | vt 0.521713 0.0235467 778 | vt 0.573561 0.0235467 779 | vt 0.565551 0.0635995 780 | vt 0.513703 0.0635995 781 | vt 0.62541 0.0235467 782 | vt 0.617399 0.0635995 783 | vt 0.677258 0.0235467 784 | vt 0.669248 0.0635995 785 | vt 0.729106 0.0235467 786 | vt 0.721096 0.0635995 787 | vt 0.557452 0.103931 788 | vt 0.505604 0.101224 789 | vt 0.609301 0.101224 790 | vt 0.661149 0.103931 791 | vt 0.712997 0.101224 792 | vt 0.549303 0.138767 793 | vt 0.497455 0.144623 794 | vt 0.601152 0.144623 795 | vt 0.653 0.138767 796 | vt 0.704849 0.144623 797 | vt 0.540382 0.187948 798 | vt 0.488534 0.189567 799 | vt 0.59223 0.189567 800 | vt 0.644079 0.187948 801 | vt 0.695927 0.189567 802 | vt 0.53109 0.23891 803 | vt 0.479241 0.230896 804 | vt 0.582938 0.230896 805 | vt 0.634786 0.23891 806 | vt 0.686635 0.230896 807 | vt 0.520932 0.28951 808 | vt 0.469084 0.283809 809 | vt 0.572781 0.283809 810 | vt 0.624629 0.28951 811 | vt 0.676477 0.283809 812 | vt 0.0884226 0.846225 813 | vt 0.01 0.846225 814 | vt 0.0492114 0.99 815 | vt 0.166845 0.846225 816 | vt 0.127634 0.99 817 | vt 0.245268 0.846225 818 | vt 0.206057 0.99 819 | vt 0.323691 0.846225 820 | vt 0.28448 0.99 821 | vt 0.402114 0.846225 822 | vt 0.362902 0.99 823 | vt 0.0492114 0.70245 824 | vt 0.127634 0.70245 825 | vt 0.0884226 0.558675 826 | vt 0.206057 0.70245 827 | vt 0.166845 0.558675 828 | vt 0.28448 0.70245 829 | vt 0.245268 0.558675 830 | vt 0.362902 0.70245 831 | vt 0.323691 0.558675 832 | vt 0.441325 0.70245 833 | vt 0.402114 0.558675 834 | vt 0.109188 0.373689 835 | vt 0.0595939 0.555533 836 | vt 0.01 0.373689 837 | vt 0.208375 0.373689 838 | vt 0.158782 0.555533 839 | vt 0.307564 0.373689 840 | vt 0.257969 0.555533 841 | vt 0.406751 0.373689 842 | vt 0.357157 0.555533 843 | vt 0.505939 0.373689 844 | vt 0.456345 0.555533 845 | vt 0.0595939 0.191844 846 | vt 0.109188 0.01 847 | vt 0.158782 0.191844 848 | vt 0.208375 0.01 849 | vt 0.257969 0.191844 850 | vt 0.307564 0.01 851 | vt 0.357157 0.191844 852 | vt 0.406751 0.01 853 | vt 0.456345 0.191844 854 | vt 0.505939 0.01 855 | vt 0.555533 0.191844 856 | vt 0.464198 0.872173 857 | vt 0.400837 0.872173 858 | vt 0.432518 0.988334 859 | vt 0.527559 0.872173 860 | vt 0.495878 0.988334 861 | vt 0.59092 0.872173 862 | vt 0.559239 0.988334 863 | vt 0.654281 0.872173 864 | vt 0.622601 0.988334 865 | vt 0.717642 0.872173 866 | vt 0.685962 0.988334 867 | vt 0.432518 0.756011 868 | vt 0.495878 0.756011 869 | vt 0.464198 0.639849 870 | vt 0.559239 0.756011 871 | vt 0.527559 0.639849 872 | vt 0.622601 0.756011 873 | vt 0.59092 0.639849 874 | vt 0.685962 0.756011 875 | vt 0.654281 0.639849 876 | vt 0.749323 0.756011 877 | vt 0.717642 0.639849 878 | vt 0.74809 0.583761 879 | vt 0.7105 0.583761 880 | vt 0.729295 0.652675 881 | vt 0.785679 0.583761 882 | vt 0.766884 0.652675 883 | vt 0.823268 0.583761 884 | vt 0.804473 0.652675 885 | vt 0.860858 0.583761 886 | vt 0.842063 0.652675 887 | vt 0.898447 0.583761 888 | vt 0.879652 0.652675 889 | vt 0.729295 0.514847 890 | vt 0.766884 0.514847 891 | vt 0.74809 0.445934 892 | vt 0.804473 0.514847 893 | vt 0.785679 0.445934 894 | vt 0.842063 0.514847 895 | vt 0.823268 0.445934 896 | vt 0.879652 0.514847 897 | vt 0.860858 0.445934 898 | vt 0.917241 0.514847 899 | vt 0.898447 0.445934 900 | vt 0.588077 0.268129 901 | vt 0.564357 0.355103 902 | vt 0.540636 0.268129 903 | vt 0.635517 0.268129 904 | vt 0.611797 0.355103 905 | vt 0.682958 0.268129 906 | vt 0.659238 0.355103 907 | vt 0.730399 0.268129 908 | vt 0.706678 0.355103 909 | vt 0.777839 0.268129 910 | vt 0.754119 0.355103 911 | vt 0.564357 0.181155 912 | vt 0.588077 0.0941803 913 | vt 0.611797 0.181155 914 | vt 0.635517 0.0941803 915 | vt 0.659238 0.181155 916 | vt 0.682958 0.0941803 917 | vt 0.706678 0.181155 918 | vt 0.730399 0.0941803 919 | vt 0.754119 0.181155 920 | vt 0.777839 0.0941803 921 | vt 0.801559 0.181155 922 | vt 0.515525 0.543765 923 | vt 0.465475 0.543765 924 | vt 0.4905 0.635522 925 | vt 0.565574 0.543765 926 | vt 0.54055 0.635522 927 | vt 0.615624 0.543765 928 | vt 0.590599 0.635522 929 | vt 0.665673 0.543765 930 | vt 0.640649 0.635522 931 | vt 0.715723 0.543765 932 | vt 0.690698 0.635522 933 | vt 0.4905 0.452007 934 | vt 0.54055 0.452007 935 | vt 0.515525 0.36025 936 | vt 0.590599 0.452007 937 | vt 0.565574 0.36025 938 | vt 0.640649 0.452007 939 | vt 0.615624 0.36025 940 | vt 0.690698 0.452007 941 | vt 0.665673 0.36025 942 | vt 0.740748 0.452007 943 | vt 0.715723 0.36025 944 | vt 0.206149 0.01 945 | vt 0.258644 0.01 946 | vt 0.241328 0.102556 947 | vt 0.187637 0.102556 948 | vt 0.310384 0.01 949 | vt 0.289964 0.102556 950 | vt 0.361159 0.01 951 | vt 0.342201 0.102556 952 | vt 0.41297 0.01 953 | vt 0.396386 0.102556 954 | vt 0.465546 0.01 955 | vt 0.445489 0.102556 956 | vt 0.517894 0.01 957 | vt 0.499383 0.102556 958 | vt 0.234079 0.130135 959 | vt 0.287171 0.124463 960 | vt 0.3907 0.126395 961 | vt 0.442621 0.126578 962 | vt 0.465536 0.643919 963 | vt 0.417192 0.642528 964 | vt 0.511448 0.642381 965 | vt 0.554412 0.643808 966 | vt 0.602642 0.642528 967 | vt 0.467727 0.663983 968 | vt 0.531276 0.982187 969 | vt 0.484913 0.986216 970 | vt 0.577638 0.98111 971 | vt 0.624001 0.985614 972 | vt 0.670363 0.986216 973 | vt 0.560168 0.662561 974 | vt 0.530881 0.979097 975 | vt 0.484518 0.983842 976 | vt 0.577243 0.982917 977 | vt 0.623606 0.984496 978 | vt 0.669968 0.983842 979 | vt 0.170651 0.0814389 980 | vt 0.151488 0.0622766 981 | vt 0.170651 0.0622766 982 | vt 0.189813 0.0622766 983 | vt 0.170651 0.0431143 984 | vt 0.16654 0.0174068 985 | vt 0.188605 0.01 986 | vt 0.181276 0.0247357 987 | vt 0.173947 0.0394715 988 | vt 0.196012 0.0320647 989 | vt 0.601738 0.408093 990 | vt 0.65883 0.412179 991 | vt 0.544646 0.412179 992 | vt 0.715921 0.408093 993 | vt 0.487555 0.408093 994 | mtllib tree.mtl 995 | usemtl Bark 996 | g Default 997 | f 7/1/1 8/2/1 14/3/1 13/4/1 998 | f 9/5/2 15/6/2 14/3/2 8/2/2 999 | f 10/7/3 16/8/3 15/6/3 9/5/3 1000 | f 11/9/4 17/10/4 16/8/4 10/7/4 1001 | f 11/9/5 12/11/5 18/12/5 17/10/5 1002 | f 12/11/6 7/13/6 13/14/6 18/12/6 1003 | f 13/4/7 14/3/7 20/15/7 19/16/7 1004 | f 21/17/8 20/15/8 14/3/8 15/6/8 1005 | f 16/8/9 22/18/9 21/17/9 15/6/9 1006 | f 16/8/10 17/10/10 23/19/10 22/18/10 1007 | f 17/10/11 18/12/11 24/20/11 23/19/11 1008 | f 18/12/12 13/14/12 19/21/12 24/20/12 1009 | f 20/15/13 26/22/13 25/23/13 19/16/13 1010 | f 21/17/14 27/24/14 26/22/14 20/15/14 1011 | f 21/17/15 22/18/15 28/25/15 27/24/15 1012 | f 22/18/16 23/19/16 29/26/16 28/25/16 1013 | f 24/20/17 30/27/17 29/26/17 23/19/17 1014 | f 24/20/18 19/21/18 25/28/18 30/27/18 1015 | f 26/22/19 32/29/19 31/30/19 25/23/19 1016 | f 26/22/20 27/24/20 33/31/20 32/29/20 1017 | f 28/25/21 34/32/21 33/31/21 27/24/21 1018 | f 29/26/22 35/33/22 34/32/22 28/25/22 1019 | f 29/26/23 30/27/23 36/34/23 35/33/23 1020 | f 30/27/24 25/28/24 31/35/24 36/34/24 1021 | f 31/30/25 32/29/25 38/36/25 37/37/25 1022 | f 33/31/26 39/38/26 38/36/26 32/29/26 1023 | f 34/32/27 40/39/27 39/38/27 33/31/27 1024 | f 35/33/28 41/40/28 40/39/28 34/32/28 1025 | f 36/34/29 42/41/29 41/40/29 35/33/29 1026 | f 36/34/30 31/35/30 37/42/30 42/41/30 1027 | f 37/37/31 38/36/31 44/43/31 43/44/31 1028 | f 38/36/32 39/38/32 45/45/32 44/43/32 1029 | f 39/38/33 40/39/33 46/46/33 45/45/33 1030 | f 40/39/34 41/40/34 47/47/34 46/46/34 1031 | f 42/41/35 48/48/35 47/47/35 41/40/35 1032 | f 37/42/36 43/49/36 48/48/36 42/41/36 1033 | f 50/50/37 56/51/37 55/52/37 49/53/37 1034 | f 50/50/38 51/54/38 57/55/38 56/51/38 1035 | f 51/54/39 52/56/39 58/57/39 57/55/39 1036 | f 52/56/40 53/58/40 59/59/40 58/57/40 1037 | f 54/60/41 60/61/41 59/59/41 53/58/41 1038 | f 49/62/42 55/63/42 60/61/42 54/60/42 1039 | f 62/64/43 61/65/43 55/52/43 56/51/43 1040 | f 57/55/44 63/66/44 62/64/44 56/51/44 1041 | f 63/66/45 57/55/45 58/57/45 64/67/45 1042 | f 64/67/46 58/57/46 59/59/46 65/68/46 1043 | f 60/61/47 66/69/47 65/68/47 59/59/47 1044 | f 55/63/48 61/70/48 66/69/48 60/61/48 1045 | f 62/64/49 68/71/49 67/72/49 61/65/49 1046 | f 63/66/50 69/73/50 68/71/50 62/64/50 1047 | f 63/66/51 64/67/51 70/74/51 69/73/51 1048 | f 64/67/52 65/68/52 71/75/52 70/74/52 1049 | f 66/69/53 72/76/53 71/75/53 65/68/53 1050 | f 66/69/54 61/70/54 67/77/54 72/76/54 1051 | f 73/78/55 67/72/55 68/71/55 74/79/55 1052 | f 68/71/56 69/73/56 75/80/56 74/79/56 1053 | f 70/74/57 76/81/57 75/80/57 69/73/57 1054 | f 77/82/58 76/81/58 70/74/58 71/75/58 1055 | f 71/75/59 72/76/59 78/83/59 77/82/59 1056 | f 72/76/60 67/77/60 73/84/60 78/83/60 1057 | f 82/85/61 81/86/61 79/87/61 80/88/61 1058 | f 82/85/62 84/89/62 83/90/62 81/86/62 1059 | f 84/89/63 86/91/63 85/92/63 83/90/63 1060 | f 80/93/64 79/94/64 85/92/64 86/91/64 1061 | f 92/95/65 96/96/65 95/97/65 91/98/65 1062 | f 92/95/66 93/99/66 97/100/66 96/96/66 1063 | f 94/101/67 98/102/67 97/100/67 93/99/67 1064 | f 91/103/68 95/104/68 98/102/68 94/101/68 1065 | f 96/96/69 100/105/69 99/106/69 95/97/69 1066 | f 96/96/70 97/100/70 101/107/70 100/105/70 1067 | f 97/100/71 98/102/71 102/108/71 101/107/71 1068 | f 95/104/72 99/109/72 102/108/72 98/102/72 1069 | f 106/110/73 105/111/73 103/112/73 104/113/73 1070 | f 108/114/74 107/115/74 105/111/74 106/110/74 1071 | f 108/114/75 110/116/75 109/117/75 107/115/75 1072 | f 110/116/76 104/118/76 103/119/76 109/117/76 1073 | f 111/120/77 112/121/77 116/122/77 115/123/77 1074 | f 112/121/78 113/124/78 117/125/78 116/122/78 1075 | f 114/126/79 118/127/79 117/125/79 113/124/79 1076 | f 114/126/80 111/128/80 115/129/80 118/127/80 1077 | f 115/123/81 116/122/81 120/130/81 119/131/81 1078 | f 117/125/82 121/132/82 120/130/82 116/122/82 1079 | f 117/125/83 118/127/83 122/133/83 121/132/83 1080 | f 118/127/84 115/129/84 119/134/84 122/133/84 1081 | f 124/135/85 123/136/85 119/131/85 120/130/85 1082 | f 125/137/86 124/135/86 120/130/86 121/132/86 1083 | f 125/137/87 121/132/87 122/133/87 126/138/87 1084 | f 126/138/88 122/133/88 119/134/88 123/139/88 1085 | f 123/136/89 124/135/89 128/140/89 127/141/89 1086 | f 125/137/90 129/142/90 128/140/90 124/135/90 1087 | f 129/142/91 125/137/91 126/138/91 130/143/91 1088 | f 127/144/92 130/143/92 126/138/92 123/139/92 1089 | f 127/141/93 128/140/93 132/145/93 131/146/93 1090 | f 129/142/94 133/147/94 132/145/94 128/140/94 1091 | f 130/143/95 134/148/95 133/147/95 129/142/95 1092 | f 127/144/96 131/149/96 134/148/96 130/143/96 1093 | f 135/150/97 136/151/97 140/152/97 139/153/97 1094 | f 136/151/98 137/154/98 141/155/98 140/152/98 1095 | f 138/156/99 142/157/99 141/155/99 137/154/99 1096 | f 138/156/100 135/158/100 139/159/100 142/157/100 1097 | f 139/153/101 140/152/101 144/160/101 143/161/101 1098 | f 141/155/102 145/162/102 144/160/102 140/152/102 1099 | f 141/155/103 142/157/103 146/163/103 145/162/103 1100 | f 142/157/104 139/159/104 143/164/104 146/163/104 1101 | f 144/160/105 148/165/105 147/166/105 143/161/105 1102 | f 145/162/106 149/167/106 148/165/106 144/160/106 1103 | f 145/162/107 146/163/107 150/168/107 149/167/107 1104 | f 146/163/108 143/164/108 147/169/108 150/168/108 1105 | f 152/170/109 151/171/109 147/166/109 148/165/109 1106 | f 153/172/110 152/170/110 148/165/110 149/167/110 1107 | f 153/172/111 149/167/111 150/168/111 154/173/111 1108 | f 147/169/112 151/174/112 154/173/112 150/168/112 1109 | f 155/175/113 151/171/113 152/170/113 156/176/113 1110 | f 153/172/114 157/177/114 156/176/114 152/170/114 1111 | f 153/172/115 154/173/115 158/178/115 157/177/115 1112 | f 151/174/116 155/179/116 158/178/116 154/173/116 1113 | f 160/180/117 162/181/117 161/182/117 159/183/117 1114 | f 164/184/118 163/185/118 161/182/118 162/181/118 1115 | f 166/186/119 165/187/119 163/185/119 164/184/119 1116 | f 166/186/120 160/188/120 159/189/120 165/187/120 1117 | f 159/183/121 161/182/121 168/190/121 167/191/121 1118 | f 161/182/122 163/185/122 169/192/122 168/190/122 1119 | f 165/187/123 170/193/123 169/192/123 163/185/123 1120 | f 165/187/124 159/189/124 167/194/124 170/193/124 1121 | f 167/191/125 168/190/125 172/195/125 171/196/125 1122 | f 169/192/126 173/197/126 172/195/126 168/190/126 1123 | f 169/192/127 170/193/127 174/198/127 173/197/127 1124 | f 167/194/128 171/199/128 174/198/128 170/193/128 1125 | f 172/195/129 176/200/129 175/201/129 171/196/129 1126 | f 173/197/130 177/202/130 176/200/130 172/195/130 1127 | f 173/197/131 174/198/131 178/203/131 177/202/131 1128 | f 178/203/132 174/198/132 171/199/132 175/204/132 1129 | f 176/200/133 180/205/133 179/206/133 175/201/133 1130 | f 180/205/134 176/200/134 177/202/134 181/207/134 1131 | f 178/203/135 182/208/135 181/207/135 177/202/135 1132 | f 178/203/136 175/204/136 179/209/136 182/208/136 1133 | f 180/205/137 184/210/137 183/211/137 179/206/137 1134 | f 185/212/138 184/210/138 180/205/138 181/207/138 1135 | f 181/207/139 182/208/139 186/213/139 185/212/139 1136 | f 182/208/140 179/209/140 183/214/140 186/213/140 1137 | f 1/347/261 2/348/261 262/349/261 261/350/261 1138 | f 2/348/262 3/351/262 263/352/262 262/349/262 1139 | f 4/353/263 265/354/263 263/352/263 3/351/263 1140 | f 4/353/264 5/355/264 266/356/264 265/354/264 1141 | f 6/357/265 267/358/265 266/356/265 5/355/265 1142 | f 1/359/266 261/360/266 267/358/266 6/357/266 1143 | f 261/350/267 268/361/267 8/2/267 7/1/267 1144 | f 269/362/268 9/5/268 8/2/268 268/361/268 1145 | f 265/354/269 10/7/269 9/5/269 269/362/269 1146 | f 265/354/270 266/356/270 11/9/270 10/7/270 1147 | f 266/356/271 267/358/271 12/11/271 11/9/271 1148 | f 261/360/272 7/13/272 12/11/272 267/358/272 1149 | f 261/350/273 262/349/273 50/50/273 49/53/273 1150 | f 263/352/274 51/54/274 50/50/274 262/349/274 1151 | f 52/56/275 51/54/275 263/352/275 265/354/275 1152 | f 265/354/276 269/363/276 53/58/276 52/56/276 1153 | f 268/364/277 54/60/277 53/58/277 269/363/277 1154 | f 261/360/278 49/62/278 54/60/278 268/364/278 1155 | f 271/365/279 270/366/279 103/112/279 105/111/279 1156 | f 272/367/280 271/365/280 105/111/280 107/115/280 1157 | f 264/368/281 272/367/281 107/115/281 109/117/281 1158 | f 264/368/282 109/117/282 103/119/282 270/369/282 1159 | f 111/120/283 270/366/283 273/370/283 112/121/283 1160 | f 272/367/284 113/124/284 112/121/284 273/370/284 1161 | f 272/367/285 264/368/285 114/126/285 113/124/285 1162 | f 270/369/286 111/128/286 114/126/286 264/368/286 1163 | f 131/146/287 132/145/287 277/371/287 280/372/287 1164 | f 132/145/288 133/147/288 278/373/288 277/371/288 1165 | f 134/148/289 281/374/289 278/373/289 133/147/289 1166 | f 134/148/290 131/149/290 280/375/290 281/374/290 1167 | f 270/366/291 271/365/291 136/151/291 135/150/291 1168 | f 272/367/292 137/154/292 136/151/292 271/365/292 1169 | f 272/367/293 273/376/293 138/156/293 137/154/293 1170 | f 270/369/294 135/158/294 138/156/294 273/376/294 1171 | f 156/176/295 275/377/295 274/378/295 155/175/295 1172 | f 275/377/296 156/176/296 157/177/296 276/379/296 1173 | f 158/178/297 279/380/297 276/379/297 157/177/297 1174 | f 279/380/298 158/178/298 155/179/298 274/381/298 1175 | f 277/382/299 278/383/299 187/384/299 280/385/299 1176 | f 278/383/300 281/386/300 280/385/300 1177 | f 278/383/301 280/385/301 187/384/301 1178 | f 275/387/302 276/388/302 188/389/302 274/390/302 1179 | f 276/388/303 279/391/303 274/390/303 1180 | f 276/388/304 274/390/304 188/389/304 1181 | f 93/99/305 89/392/305 90/393/305 94/101/305 1182 | f 88/394/306 89/392/306 93/99/306 92/95/306 1183 | f 91/103/307 94/101/307 90/393/307 87/395/307 1184 | f 88/394/308 92/95/308 91/98/308 87/396/308 1185 | f 83/90/309 85/92/309 90/393/309 89/392/309 1186 | f 83/90/310 89/392/310 88/394/310 81/86/310 1187 | f 79/94/311 87/395/311 90/393/311 85/92/311 1188 | f 79/87/312 81/86/312 88/394/312 87/396/312 1189 | usemtl Tree 1190 | f 189/215/141 190/216/141 191/217/141 1191 | f 192/218/142 189/215/142 191/219/142 1192 | f 193/220/143 192/218/143 191/221/143 1193 | f 194/222/144 193/220/144 191/223/144 1194 | f 190/224/145 194/222/145 191/225/145 1195 | f 195/226/146 196/227/146 197/228/146 1196 | f 196/227/147 198/229/147 197/230/147 1197 | f 198/229/148 199/231/148 197/232/148 1198 | f 199/231/149 200/233/149 197/234/149 1199 | f 200/233/150 195/235/150 197/236/150 1200 | f 189/215/151 195/226/151 190/216/151 1201 | f 192/218/152 196/227/152 189/215/152 1202 | f 193/220/153 198/229/153 192/218/153 1203 | f 194/222/154 199/231/154 193/220/154 1204 | f 190/224/155 200/233/155 194/222/155 1205 | f 195/226/156 189/215/156 196/227/156 1206 | f 196/227/157 192/218/157 198/229/157 1207 | f 198/229/158 193/220/158 199/231/158 1208 | f 199/231/159 194/222/159 200/233/159 1209 | f 200/233/160 190/224/160 195/235/160 1210 | f 201/237/161 202/238/161 203/239/161 1211 | f 204/240/162 202/241/162 201/237/162 1212 | f 205/242/163 202/243/163 204/240/163 1213 | f 206/244/164 202/245/164 205/242/164 1214 | f 203/246/165 202/247/165 206/244/165 1215 | f 207/248/166 208/249/166 209/250/166 1216 | f 209/250/167 208/251/167 210/252/167 1217 | f 210/252/168 208/253/168 211/254/168 1218 | f 211/254/169 208/255/169 212/256/169 1219 | f 212/256/170 208/257/170 207/258/170 1220 | f 201/237/171 203/239/171 207/248/171 1221 | f 204/240/172 201/237/172 209/250/172 1222 | f 205/242/173 204/240/173 210/252/173 1223 | f 206/244/174 205/242/174 211/254/174 1224 | f 203/246/175 206/244/175 212/256/175 1225 | f 207/248/176 209/250/176 201/237/176 1226 | f 209/250/177 210/252/177 204/240/177 1227 | f 210/252/178 211/254/178 205/242/178 1228 | f 211/254/179 212/256/179 206/244/179 1229 | f 212/256/180 207/258/180 203/246/180 1230 | f 213/259/181 214/260/181 215/261/181 1231 | f 216/262/182 213/259/182 215/263/182 1232 | f 217/264/183 216/262/183 215/265/183 1233 | f 218/266/184 217/264/184 215/267/184 1234 | f 214/268/185 218/266/185 215/269/185 1235 | f 219/270/186 220/271/186 221/272/186 1236 | f 220/271/187 222/273/187 221/274/187 1237 | f 222/273/188 223/275/188 221/276/188 1238 | f 223/275/189 224/277/189 221/278/189 1239 | f 224/277/190 219/279/190 221/280/190 1240 | f 213/259/191 219/270/191 214/260/191 1241 | f 216/262/192 220/271/192 213/259/192 1242 | f 217/264/193 222/273/193 216/262/193 1243 | f 218/266/194 223/275/194 217/264/194 1244 | f 214/268/195 224/277/195 218/266/195 1245 | f 219/270/196 213/259/196 220/271/196 1246 | f 220/271/197 216/262/197 222/273/197 1247 | f 222/273/198 217/264/198 223/275/198 1248 | f 223/275/199 218/266/199 224/277/199 1249 | f 224/277/200 214/268/200 219/279/200 1250 | f 225/281/201 226/282/201 227/283/201 1251 | f 228/284/202 225/281/202 227/285/202 1252 | f 229/286/203 228/284/203 227/287/203 1253 | f 230/288/204 229/286/204 227/289/204 1254 | f 226/290/205 230/288/205 227/291/205 1255 | f 231/292/206 232/293/206 233/294/206 1256 | f 232/293/207 234/295/207 233/296/207 1257 | f 234/295/208 235/297/208 233/298/208 1258 | f 235/297/209 236/299/209 233/300/209 1259 | f 236/299/210 231/301/210 233/302/210 1260 | f 225/281/211 231/292/211 226/282/211 1261 | f 228/284/212 232/293/212 225/281/212 1262 | f 229/286/213 234/295/213 228/284/213 1263 | f 230/288/214 235/297/214 229/286/214 1264 | f 226/290/215 236/299/215 230/288/215 1265 | f 231/292/216 225/281/216 232/293/216 1266 | f 232/293/217 228/284/217 234/295/217 1267 | f 234/295/218 229/286/218 235/297/218 1268 | f 235/297/219 230/288/219 236/299/219 1269 | f 236/299/220 226/290/220 231/301/220 1270 | f 237/303/221 238/304/221 239/305/221 1271 | f 240/306/222 238/307/222 237/303/222 1272 | f 241/308/223 238/309/223 240/306/223 1273 | f 242/310/224 238/311/224 241/308/224 1274 | f 239/312/225 238/313/225 242/310/225 1275 | f 243/314/226 244/315/226 245/316/226 1276 | f 245/316/227 244/317/227 246/318/227 1277 | f 246/318/228 244/319/228 247/320/228 1278 | f 247/320/229 244/321/229 248/322/229 1279 | f 248/322/230 244/323/230 243/324/230 1280 | f 237/303/231 239/305/231 243/314/231 1281 | f 240/306/232 237/303/232 245/316/232 1282 | f 241/308/233 240/306/233 246/318/233 1283 | f 242/310/234 241/308/234 247/320/234 1284 | f 239/312/235 242/310/235 248/322/235 1285 | f 243/314/236 245/316/236 237/303/236 1286 | f 245/316/237 246/318/237 240/306/237 1287 | f 246/318/238 247/320/238 241/308/238 1288 | f 247/320/239 248/322/239 242/310/239 1289 | f 248/322/240 243/324/240 239/312/240 1290 | f 249/325/241 250/326/241 251/327/241 1291 | f 252/328/242 249/325/242 251/329/242 1292 | f 253/330/243 252/328/243 251/331/243 1293 | f 254/332/244 253/330/244 251/333/244 1294 | f 250/334/245 254/332/245 251/335/245 1295 | f 255/336/246 256/337/246 257/338/246 1296 | f 256/337/247 258/339/247 257/340/247 1297 | f 258/339/248 259/341/248 257/342/248 1298 | f 259/341/249 260/343/249 257/344/249 1299 | f 260/343/250 255/345/250 257/346/250 1300 | f 249/325/251 255/336/251 250/326/251 1301 | f 252/328/252 256/337/252 249/325/252 1302 | f 253/330/253 258/339/253 252/328/253 1303 | f 254/332/254 259/341/254 253/330/254 1304 | f 250/334/255 260/343/255 254/332/255 1305 | f 255/336/256 249/325/256 256/337/256 1306 | f 256/337/257 252/328/257 258/339/257 1307 | f 258/339/258 253/330/258 259/341/258 1308 | f 259/341/259 254/332/259 260/343/259 1309 | f 260/343/260 250/334/260 255/345/260 1310 | -------------------------------------------------------------------------------- /utils/algorithms.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * algorithms.cpp 3 | */ 4 | 5 | #include "algorithms.h" 6 | 7 | // helper functions 8 | 9 | static bool is_in_triangle(const Vec3 &pt, const Vec3 &v1, const Vec3 &v2, const Vec3 &v3, const Vec3 &normal) 10 | { 11 | const float s1 = Vec3::dot(Vec3::cross(v2 - v1, pt - v1), normal); 12 | const float s2 = Vec3::dot(Vec3::cross(v3 - v2, pt - v2), normal); 13 | const float s3 = Vec3::dot(Vec3::cross(v1 - v3, pt - v3), normal); 14 | 15 | const bool same_sign = (s1 >= 0 && s2 >= 0 && s3 >= 0) || (s1 <= 0 && s2 <= 0 && s3 <= 0); 16 | 17 | return same_sign; 18 | } 19 | 20 | static bool is_ear(const size_t i, const std::vector &points, const std::vector &indices, const Vec3 &normal) 21 | { 22 | const size_t prev = indices[(i + indices.size() - 1) % indices.size()]; 23 | const size_t curr = indices[i]; 24 | const size_t next = indices[(i + 1) % indices.size()]; 25 | 26 | const Vec3 &v1 = points[prev]; 27 | const Vec3 &v2 = points[curr]; 28 | const Vec3 &v3 = points[next]; 29 | 30 | // check if angle is convex 31 | const Vec3 d1 = v2 - v1; 32 | const Vec3 d2 = v3 - v2; 33 | 34 | if (Vec3::dot(Vec3::cross(d1, d2), normal) <= 0.0f) 35 | { 36 | return false; // not convex 37 | } 38 | 39 | // check for no other points inside triangle 40 | for (size_t j = 0; j < indices.size(); j++) 41 | { 42 | if (j == (i - 1 + indices.size()) % indices.size() || j == i || j == (i + 1) % indices.size()) 43 | { 44 | continue; 45 | } 46 | 47 | if (is_in_triangle(points[indices[j]], v1, v2, v3, normal)) 48 | { 49 | return false; // point inside triangle 50 | } 51 | } 52 | 53 | return true; // ear found 54 | } 55 | 56 | // main functions 57 | 58 | float lerp(const float a, const float b, const float t) 59 | { 60 | return a + (b - a) * t; 61 | } 62 | 63 | std::optional> triangularize(const std::vector &points) 64 | { 65 | const size_t n = points.size(); 66 | if (n < 3) 67 | { 68 | return std::nullopt; // insufficient points 69 | } 70 | 71 | const Vec3 normal = Vec3::normal(points); 72 | 73 | if (normal.magnitude() < 1e-12f) 74 | { 75 | return std::nullopt; // degenerate polygon 76 | } 77 | 78 | // list of vertex indexes 79 | std::vector indices(n); 80 | std::iota(indices.begin(), indices.end(), 0); 81 | 82 | std::vector result; 83 | 84 | // ears search 85 | while (indices.size() > 3) 86 | { 87 | bool ear_found = false; 88 | 89 | for (std::size_t i = 0; i < indices.size(); i++) 90 | { 91 | if (is_ear(i, points, indices, normal)) 92 | { 93 | // adding triangle 94 | size_t prev = indices[(i + indices.size() - 1) % indices.size()]; 95 | size_t curr = indices[i]; 96 | size_t next = indices[(i + 1) % indices.size()]; 97 | 98 | result.push_back(prev); 99 | result.push_back(curr); 100 | result.push_back(next); 101 | 102 | // removing current ear 103 | indices.erase(std::next(indices.begin(), static_cast(i))); 104 | ear_found = true; 105 | break; 106 | } 107 | } 108 | 109 | if (!ear_found) 110 | { 111 | return std::nullopt; // no valid ear 112 | } 113 | } 114 | 115 | // adding last triangle 116 | result.push_back(indices[0]); 117 | result.push_back(indices[1]); 118 | result.push_back(indices[2]); 119 | 120 | return result; 121 | } 122 | 123 | float deg2rad(float degree) 124 | { 125 | return degree * PI / 180.f; 126 | } 127 | 128 | float rad2deg(float radian) 129 | { 130 | return radian * 180.f / PI; 131 | } 132 | 133 | float clamp0(float value, float eps) 134 | { 135 | return (std::fabs(value) < eps) ? 0.0f : value; 136 | } 137 | 138 | float deg_norm(float degree) 139 | { 140 | degree = std::fmod(degree, 360.0f); 141 | return degree < 0.0f ? degree + 360.0f : degree; 142 | } 143 | 144 | float rad_norm(float radian) 145 | { 146 | radian = std::fmod(radian, 2 * PI); 147 | return (radian <= -PI) ? radian + 2 * PI : (radian > PI) ? radian - 2 * PI : radian; 148 | } 149 | -------------------------------------------------------------------------------- /utils/algorithms.h: -------------------------------------------------------------------------------- 1 | /* 2 | * algorithms.h 3 | */ 4 | 5 | #pragma once 6 | 7 | #include 8 | #include 9 | #include 10 | 11 | #include "mathematics.h" 12 | 13 | // linear interpolation 14 | float lerp(float a, float b, float t); 15 | 16 | // limiting value to range between minimum and maximum value 17 | template 18 | T clamp(const T &value, const T &low, const T &high) 19 | { 20 | return (value < low) ? low : (value > high ? high : value); 21 | } 22 | 23 | // polygon triangulation 24 | std::optional> triangularize(const std::vector &points); 25 | 26 | // transformations 27 | float deg2rad(float degree); 28 | float rad2deg(float radian); 29 | 30 | float clamp0(float value, float eps = 0.05f); 31 | 32 | float deg_norm(float degree); 33 | float rad_norm(float radian); -------------------------------------------------------------------------------- /utils/mathematics.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * mathematics.cpp 3 | */ 4 | 5 | #include "mathematics.h" 6 | 7 | Vec3::Vec3(const float x, const float y, const float z) : x(x), y(y), z(z) {} 8 | 9 | Vec3 Vec3::operator+(const Vec3 &other) const 10 | { 11 | return { x + other.x, y + other.y, z + other.z }; 12 | } 13 | 14 | Vec3 Vec3::operator-(const Vec3 &other) const 15 | { 16 | return { x - other.x, y - other.y, z - other.z }; 17 | } 18 | 19 | Vec3 Vec3::operator*(const float scalar) const 20 | { 21 | return { x * scalar, y * scalar, z * scalar }; 22 | } 23 | 24 | Vec3 &Vec3::operator+=(const Vec3 &other) 25 | { 26 | x += other.x; 27 | y += other.y; 28 | z += other.z; 29 | return *this; 30 | } 31 | 32 | Vec3 &Vec3::operator-=(const Vec3 &other) 33 | { 34 | x -= other.x; 35 | y -= other.y; 36 | z -= other.z; 37 | return *this; 38 | } 39 | 40 | Vec3 &Vec3::operator*=(const float scalar) 41 | { 42 | x *= scalar; 43 | y *= scalar; 44 | z *= scalar; 45 | return *this; 46 | } 47 | 48 | Vec3 Vec3::operator-() const 49 | { 50 | return { -x, -y, -z }; 51 | } 52 | 53 | float Vec3::magnitude() const 54 | { 55 | return std::sqrt(x * x + y * y + z * z); 56 | } 57 | 58 | Vec3 Vec3::normalize() const 59 | { 60 | const float mag = magnitude(); 61 | return (mag > 0) ? (*this * (1.0f / mag)) : Vec3(0.0f, 0.0f, 0.0f); 62 | } 63 | 64 | float Vec3::dot(const Vec3 &a, const Vec3 &b) 65 | { 66 | return a.x * b.x + a.y * b.y + a.z * b.z; 67 | } 68 | 69 | Vec3 Vec3::cross(const Vec3 &a, const Vec3 &b) 70 | { 71 | return { 72 | a.y * b.z - a.z * b.y, 73 | a.z * b.x - a.x * b.z, 74 | a.x * b.y - a.y * b.x 75 | }; 76 | } 77 | 78 | float Vec3::cosine_similarity(const Vec3 &a, const Vec3 &b) 79 | { 80 | const float a_mag = a.magnitude(); 81 | const float b_mag = b.magnitude(); 82 | return (a_mag > 0 && b_mag > 0) ? Vec3::dot(a, b) / (a_mag * b_mag) : 0.0f; 83 | } 84 | 85 | Vec3 Vec3::rotate_y(const Vec3 &v, const float radians) 86 | { 87 | const float cos_theta = std::cos(radians); 88 | const float sin_theta = std::sin(radians); 89 | return { 90 | v.x * cos_theta - v.z * sin_theta, 91 | v.y, 92 | v.x * sin_theta + v.z * cos_theta 93 | }; 94 | } 95 | 96 | Vec3 Vec3::rotate_x(const Vec3 &v, const float radians) 97 | { 98 | const float cos_theta = std::cos(radians); 99 | const float sin_theta = std::sin(radians); 100 | return { 101 | v.x, 102 | v.y * cos_theta - v.z * sin_theta, 103 | v.y * sin_theta + v.z * cos_theta 104 | }; 105 | } 106 | 107 | Vec3 Vec3::normal(const std::vector &polygon) 108 | { 109 | Vec3 n(0.0f, 0.0f, 0.0f); 110 | 111 | for (size_t i = 0; i < polygon.size(); i++) 112 | { 113 | const Vec3& a = polygon[i]; 114 | const Vec3& b = polygon[(i + 1) % polygon.size()]; 115 | 116 | n.x += (a.y - b.y) * (a.z + b.z); 117 | n.y += (a.z - b.z) * (a.x + b.x); 118 | n.z += (a.x - b.x) * (a.y + b.y); 119 | } 120 | 121 | return n; 122 | } 123 | 124 | Vec3 Vec3::to_screen(const Vec3 &v, float zoom, float logical_x, float logical_y) 125 | { 126 | return { 127 | 0.5f * logical_x + 0.5f * v.x * zoom, 128 | 0.5f * logical_y - 0.5f * v.y * zoom, 129 | (v.z * zoom + 1.0f) * 0.5f 130 | }; 131 | } 132 | 133 | -------------------------------------------------------------------------------- /utils/mathematics.h: -------------------------------------------------------------------------------- 1 | /* 2 | * matematics.h 3 | */ 4 | 5 | #pragma once 6 | 7 | #include 8 | #include 9 | 10 | #define PI 3.14159265358979323846f 11 | 12 | // 3d vector structure 13 | class Vec3 { 14 | public: 15 | float x = 0.0f; 16 | float y = 0.0f; 17 | float z = 0.0f; 18 | 19 | Vec3() = default; 20 | Vec3(float x, float y, float z); 21 | 22 | // arithmetic operations 23 | Vec3 operator+(const Vec3 &other) const; 24 | Vec3 operator-(const Vec3 &other) const; 25 | Vec3 operator*(float scalar) const; 26 | 27 | Vec3 &operator+=(const Vec3 &other); 28 | Vec3 &operator-=(const Vec3 &other); 29 | Vec3 &operator*=(float scalar); 30 | 31 | [[nodiscard]] Vec3 operator-() const; // negation 32 | 33 | // magnitude of vector - length (modulus) of vector 34 | [[nodiscard]] float magnitude() const; 35 | 36 | // normalize vector - unit vector with same direction 37 | [[nodiscard]] Vec3 normalize() const; 38 | 39 | [[nodiscard]] static float dot(const Vec3 &a, const Vec3 &b); // dot product - scalar product of two vectors 40 | [[nodiscard]] static Vec3 cross(const Vec3 &a, const Vec3 &b); // cross product - vector product of two vectors 41 | [[nodiscard]] static float cosine_similarity(const Vec3 &a, const Vec3 &b); // cosine similarity - cosine of angle between two vectors 42 | 43 | [[nodiscard]] static Vec3 rotate_y(const Vec3 &v, float radians); // rotate around y axis 44 | [[nodiscard]] static Vec3 rotate_x(const Vec3 &v, float radians); // rotate around x axis 45 | 46 | [[nodiscard]] static Vec3 normal(const std::vector &polygon); // normal to polygon 47 | 48 | [[nodiscard]] static Vec3 to_screen(const Vec3 &v, float zoom, float logical_x, float logical_y); // transform to viewport 49 | 50 | }; 51 | -------------------------------------------------------------------------------- /utils/tools.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * tools.cpp 3 | */ 4 | 5 | #include "tools.h" 6 | 7 | std::optional safe_stoi(const std::string &token) 8 | { 9 | try { 10 | size_t pos = 0; 11 | int v = std::stoi(token, &pos, 10); 12 | if (pos != token.size()) 13 | return std::nullopt; 14 | return v; 15 | } 16 | catch (const std::exception &) { 17 | return std::nullopt; 18 | } 19 | } 20 | 21 | std::optional safe_stof(const std::string &token) 22 | { 23 | try { 24 | size_t pos = 0; 25 | float v = std::stof(token, &pos); 26 | if (pos != token.size()) 27 | return std::nullopt; 28 | return v; 29 | } 30 | catch (const std::exception &) { 31 | return std::nullopt; 32 | } 33 | } -------------------------------------------------------------------------------- /utils/tools.h: -------------------------------------------------------------------------------- 1 | /* 2 | * tools.h 3 | */ 4 | 5 | #pragma once 6 | 7 | #include 8 | #include 9 | 10 | // safe operators of conversion 11 | std::optional safe_stoi(const std::string &token); // from string to int 12 | std::optional safe_stof(const std::string &token); // from string to float -------------------------------------------------------------------------------- /version.h: -------------------------------------------------------------------------------- 1 | /* 2 | * version.h 3 | */ 4 | 5 | #pragma once 6 | 7 | inline constexpr auto APP_NAME = "objcurses"; 8 | inline constexpr auto APP_VERSION = "2.2.1"; 9 | --------------------------------------------------------------------------------