├── .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 |
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 |
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 |
--------------------------------------------------------------------------------