├── .gitignore ├── .gitmodules ├── CMakeLists.txt ├── CMakeSettings.json ├── Dependencies └── openGL │ ├── include │ ├── KHR │ │ └── khrplatform.h │ └── glad │ │ └── glad.h │ └── src │ └── glad.c ├── LICENSE ├── README.md ├── Render ├── glass bunny light - Copie.PNG ├── glass bunny light.PNG └── rabbit sphere.png ├── config.ini ├── dependencies ├── openGL │ └── CMakeLists.txt └── thirdParty │ ├── stb_image.h │ └── tiny_obj_loader.h ├── main.cpp ├── model ├── bunny-heavy.obj ├── cathedral.obj ├── cube.mtl ├── cube.obj ├── rab3.obj ├── rabbit.obj └── teapot.obj ├── resources ├── cape_hill.jpg ├── checker-map.png ├── evening_road_01.jpg ├── greenwich_park_02.jpg └── moonless_golf.jpg ├── shader ├── bvh.glsl ├── commun.glsl ├── data.glsl ├── hit.glsl ├── raytraced.frag.glsl └── static.vert.glsl └── src ├── bvh.cpp ├── bvh.h ├── camera.cpp ├── camera.h ├── commun.cpp ├── commun.h ├── config.cpp ├── config.h ├── data.cpp ├── data.h ├── primitive.cpp ├── primitive.h ├── shader.cpp ├── shader.h ├── ui.cpp ├── ui.h ├── window.cpp └── window.h /.gitignore: -------------------------------------------------------------------------------- 1 | log.txt 2 | .vs 3 | /old 4 | /out -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "dependencies/logrash"] 2 | path = dependencies/logrash 3 | url = https://github.com/Cewein/Logarsh.git 4 | [submodule "dependencies/glm"] 5 | path = dependencies/glm 6 | url = https://github.com/g-truc/glm.git 7 | [submodule "dependencies/imgui"] 8 | path = dependencies/imgui 9 | url = https://github.com/ocornut/imgui.git 10 | [submodule "dependencies/glfw"] 11 | path = dependencies/glfw 12 | url = https://github.com/glfw/glfw.git 13 | -------------------------------------------------------------------------------- /CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required (VERSION 3.11) 2 | 3 | SET(CMAKE_EXPORT_COMPILE_COMMANDS 1) 4 | SET(CMAKE_C_COMPILER_WORKS 1) 5 | SET(CMAKE_CXX_COMPILER_WORKS 1) 6 | SET(CMAKE_CXX_STANDARD 17) 7 | SET(CMAKE_CXX_STANDARD_REQUIRED ON) 8 | 9 | project(nerv_pathtracer) 10 | 11 | set(GLM_DIR dependencies/glm) 12 | include_directories(${GLM_DIR} ..) 13 | 14 | set(IMGUI_DIR dependencies/imgui) 15 | include_directories(${IMGUI_DIR} ${IMGUI_DIR}/backends ..) 16 | 17 | include_directories("dependencies/thirdParty" ..) 18 | include_directories("dependencies/logrash" ..) 19 | 20 | add_executable( 21 | nerv_pathtracer 22 | main.cpp "src/config.h" "src/config.cpp" "src/window.h" "src/window.cpp" "src/shader.cpp" "src/shader.h" "src/commun.h" "src/commun.cpp" "src/data.h" "src/primitive.h" "src/primitive.cpp" "src/camera.h" "src/camera.cpp" "src/data.h" "src/data.cpp" "src/ui.h" "src/ui.cpp" ${IMGUI_DIR}/backends/imgui_impl_glfw.cpp ${IMGUI_DIR}/backends/imgui_impl_opengl3.cpp ${IMGUI_DIR}/imgui.cpp ${IMGUI_DIR}/imgui_draw.cpp ${IMGUI_DIR}/imgui_demo.cpp ${IMGUI_DIR}/imgui_tables.cpp ${IMGUI_DIR}/imgui_widgets.cpp "src/bvh.h" "src/bvh.cpp") 23 | 24 | add_subdirectory(dependencies/openGL) 25 | target_link_libraries(${PROJECT_NAME} PUBLIC glad) 26 | 27 | add_subdirectory(dependencies/glfw) 28 | target_link_libraries(${PROJECT_NAME} PUBLIC glfw) 29 | 30 | target_link_libraries(${PROJECT_NAME} PUBLIC opengl32) 31 | 32 | target_link_libraries(${PROJECT_NAME} PRIVATE ${CMAKE_DL_LIBS}) 33 | 34 | add_custom_command( 35 | TARGET nerv_pathtracer POST_BUILD 36 | COMMAND ${CMAKE_COMMAND} -E copy_directory 37 | ${CMAKE_SOURCE_DIR}/shader $/shader 38 | COMMENT "Copying shaders" VERBATIM 39 | ) 40 | 41 | add_custom_command( 42 | TARGET nerv_pathtracer POST_BUILD 43 | COMMAND ${CMAKE_COMMAND} -E copy_directory 44 | ${CMAKE_SOURCE_DIR}/resources $/resources 45 | COMMENT "Copying resources" VERBATIM 46 | ) -------------------------------------------------------------------------------- /CMakeSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "configurations": [ 3 | { 4 | "buildCommandArgs": "", 5 | "buildRoot": "${projectDir}\\out\\build\\${name}", 6 | "cmakeCommandArgs": "/std:c++17", 7 | "configurationType": "RelWithDebInfo", 8 | "ctestCommandArgs": "", 9 | "generator": "Ninja", 10 | "inheritEnvironments": [ "msvc_x64_x64" ], 11 | "installRoot": "${projectDir}\\out\\install\\${name}", 12 | "name": "x64_debug", 13 | "variables": [ 14 | { 15 | "name": "GLFW_BUILD_DOCS", 16 | "value": "True", 17 | "type": "BOOL" 18 | } 19 | ] 20 | }, 21 | { 22 | "name": "x64-Release", 23 | "generator": "Ninja", 24 | "configurationType": "Release", 25 | "buildRoot": "${projectDir}\\out\\build\\${name}", 26 | "installRoot": "${projectDir}\\out\\install\\${name}", 27 | "cmakeCommandArgs": "/std:c++17", 28 | "buildCommandArgs": "", 29 | "ctestCommandArgs": "", 30 | "inheritEnvironments": [ "msvc_x64_x64" ] 31 | } 32 | ] 33 | } -------------------------------------------------------------------------------- /Dependencies/openGL/include/KHR/khrplatform.h: -------------------------------------------------------------------------------- 1 | #ifndef __khrplatform_h_ 2 | #define __khrplatform_h_ 3 | 4 | /* 5 | ** Copyright (c) 2008-2018 The Khronos Group Inc. 6 | ** 7 | ** Permission is hereby granted, free of charge, to any person obtaining a 8 | ** copy of this software and/or associated documentation files (the 9 | ** "Materials"), to deal in the Materials without restriction, including 10 | ** without limitation the rights to use, copy, modify, merge, publish, 11 | ** distribute, sublicense, and/or sell copies of the Materials, and to 12 | ** permit persons to whom the Materials are furnished to do so, subject to 13 | ** the following conditions: 14 | ** 15 | ** The above copyright notice and this permission notice shall be included 16 | ** in all copies or substantial portions of the Materials. 17 | ** 18 | ** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 19 | ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20 | ** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 21 | ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 22 | ** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23 | ** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24 | ** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. 25 | */ 26 | 27 | /* Khronos platform-specific types and definitions. 28 | * 29 | * The master copy of khrplatform.h is maintained in the Khronos EGL 30 | * Registry repository at https://github.com/KhronosGroup/EGL-Registry 31 | * The last semantic modification to khrplatform.h was at commit ID: 32 | * 67a3e0864c2d75ea5287b9f3d2eb74a745936692 33 | * 34 | * Adopters may modify this file to suit their platform. Adopters are 35 | * encouraged to submit platform specific modifications to the Khronos 36 | * group so that they can be included in future versions of this file. 37 | * Please submit changes by filing pull requests or issues on 38 | * the EGL Registry repository linked above. 39 | * 40 | * 41 | * See the Implementer's Guidelines for information about where this file 42 | * should be located on your system and for more details of its use: 43 | * http://www.khronos.org/registry/implementers_guide.pdf 44 | * 45 | * This file should be included as 46 | * #include 47 | * by Khronos client API header files that use its types and defines. 48 | * 49 | * The types in khrplatform.h should only be used to define API-specific types. 50 | * 51 | * Types defined in khrplatform.h: 52 | * khronos_int8_t signed 8 bit 53 | * khronos_uint8_t unsigned 8 bit 54 | * khronos_int16_t signed 16 bit 55 | * khronos_uint16_t unsigned 16 bit 56 | * khronos_int32_t signed 32 bit 57 | * khronos_uint32_t unsigned 32 bit 58 | * khronos_int64_t signed 64 bit 59 | * khronos_uint64_t unsigned 64 bit 60 | * khronos_intptr_t signed same number of bits as a pointer 61 | * khronos_uintptr_t unsigned same number of bits as a pointer 62 | * khronos_ssize_t signed size 63 | * khronos_usize_t unsigned size 64 | * khronos_float_t signed 32 bit floating point 65 | * khronos_time_ns_t unsigned 64 bit time in nanoseconds 66 | * khronos_utime_nanoseconds_t unsigned time interval or absolute time in 67 | * nanoseconds 68 | * khronos_stime_nanoseconds_t signed time interval in nanoseconds 69 | * khronos_boolean_enum_t enumerated boolean type. This should 70 | * only be used as a base type when a client API's boolean type is 71 | * an enum. Client APIs which use an integer or other type for 72 | * booleans cannot use this as the base type for their boolean. 73 | * 74 | * Tokens defined in khrplatform.h: 75 | * 76 | * KHRONOS_FALSE, KHRONOS_TRUE Enumerated boolean false/true values. 77 | * 78 | * KHRONOS_SUPPORT_INT64 is 1 if 64 bit integers are supported; otherwise 0. 79 | * KHRONOS_SUPPORT_FLOAT is 1 if floats are supported; otherwise 0. 80 | * 81 | * Calling convention macros defined in this file: 82 | * KHRONOS_APICALL 83 | * KHRONOS_APIENTRY 84 | * KHRONOS_APIATTRIBUTES 85 | * 86 | * These may be used in function prototypes as: 87 | * 88 | * KHRONOS_APICALL void KHRONOS_APIENTRY funcname( 89 | * int arg1, 90 | * int arg2) KHRONOS_APIATTRIBUTES; 91 | */ 92 | 93 | #if defined(__SCITECH_SNAP__) && !defined(KHRONOS_STATIC) 94 | # define KHRONOS_STATIC 1 95 | #endif 96 | 97 | /*------------------------------------------------------------------------- 98 | * Definition of KHRONOS_APICALL 99 | *------------------------------------------------------------------------- 100 | * This precedes the return type of the function in the function prototype. 101 | */ 102 | #if defined(KHRONOS_STATIC) 103 | /* If the preprocessor constant KHRONOS_STATIC is defined, make the 104 | * header compatible with static linking. */ 105 | # define KHRONOS_APICALL 106 | #elif defined(_WIN32) 107 | # define KHRONOS_APICALL __declspec(dllimport) 108 | #elif defined (__SYMBIAN32__) 109 | # define KHRONOS_APICALL IMPORT_C 110 | #elif defined(__ANDROID__) 111 | # define KHRONOS_APICALL __attribute__((visibility("default"))) 112 | #else 113 | # define KHRONOS_APICALL 114 | #endif 115 | 116 | /*------------------------------------------------------------------------- 117 | * Definition of KHRONOS_APIENTRY 118 | *------------------------------------------------------------------------- 119 | * This follows the return type of the function and precedes the function 120 | * name in the function prototype. 121 | */ 122 | #if defined(_WIN32) && !defined(_WIN32_WCE) && !defined(KHRONOS_STATIC) 123 | /* Win32 but not WinCE */ 124 | # define KHRONOS_APIENTRY __stdcall 125 | #else 126 | # define KHRONOS_APIENTRY 127 | #endif 128 | 129 | /*------------------------------------------------------------------------- 130 | * Definition of KHRONOS_APIATTRIBUTES 131 | *------------------------------------------------------------------------- 132 | * This follows the closing parenthesis of the function prototype arguments. 133 | */ 134 | #if defined (__ARMCC_2__) 135 | #define KHRONOS_APIATTRIBUTES __softfp 136 | #else 137 | #define KHRONOS_APIATTRIBUTES 138 | #endif 139 | 140 | /*------------------------------------------------------------------------- 141 | * basic type definitions 142 | *-----------------------------------------------------------------------*/ 143 | #if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || defined(__GNUC__) || defined(__SCO__) || defined(__USLC__) 144 | 145 | 146 | /* 147 | * Using 148 | */ 149 | #include 150 | typedef int32_t khronos_int32_t; 151 | typedef uint32_t khronos_uint32_t; 152 | typedef int64_t khronos_int64_t; 153 | typedef uint64_t khronos_uint64_t; 154 | #define KHRONOS_SUPPORT_INT64 1 155 | #define KHRONOS_SUPPORT_FLOAT 1 156 | 157 | #elif defined(__VMS ) || defined(__sgi) 158 | 159 | /* 160 | * Using 161 | */ 162 | #include 163 | typedef int32_t khronos_int32_t; 164 | typedef uint32_t khronos_uint32_t; 165 | typedef int64_t khronos_int64_t; 166 | typedef uint64_t khronos_uint64_t; 167 | #define KHRONOS_SUPPORT_INT64 1 168 | #define KHRONOS_SUPPORT_FLOAT 1 169 | 170 | #elif defined(_WIN32) && !defined(__SCITECH_SNAP__) 171 | 172 | /* 173 | * Win32 174 | */ 175 | typedef __int32 khronos_int32_t; 176 | typedef unsigned __int32 khronos_uint32_t; 177 | typedef __int64 khronos_int64_t; 178 | typedef unsigned __int64 khronos_uint64_t; 179 | #define KHRONOS_SUPPORT_INT64 1 180 | #define KHRONOS_SUPPORT_FLOAT 1 181 | 182 | #elif defined(__sun__) || defined(__digital__) 183 | 184 | /* 185 | * Sun or Digital 186 | */ 187 | typedef int khronos_int32_t; 188 | typedef unsigned int khronos_uint32_t; 189 | #if defined(__arch64__) || defined(_LP64) 190 | typedef long int khronos_int64_t; 191 | typedef unsigned long int khronos_uint64_t; 192 | #else 193 | typedef long long int khronos_int64_t; 194 | typedef unsigned long long int khronos_uint64_t; 195 | #endif /* __arch64__ */ 196 | #define KHRONOS_SUPPORT_INT64 1 197 | #define KHRONOS_SUPPORT_FLOAT 1 198 | 199 | #elif 0 200 | 201 | /* 202 | * Hypothetical platform with no float or int64 support 203 | */ 204 | typedef int khronos_int32_t; 205 | typedef unsigned int khronos_uint32_t; 206 | #define KHRONOS_SUPPORT_INT64 0 207 | #define KHRONOS_SUPPORT_FLOAT 0 208 | 209 | #else 210 | 211 | /* 212 | * Generic fallback 213 | */ 214 | #include 215 | typedef int32_t khronos_int32_t; 216 | typedef uint32_t khronos_uint32_t; 217 | typedef int64_t khronos_int64_t; 218 | typedef uint64_t khronos_uint64_t; 219 | #define KHRONOS_SUPPORT_INT64 1 220 | #define KHRONOS_SUPPORT_FLOAT 1 221 | 222 | #endif 223 | 224 | 225 | /* 226 | * Types that are (so far) the same on all platforms 227 | */ 228 | typedef signed char khronos_int8_t; 229 | typedef unsigned char khronos_uint8_t; 230 | typedef signed short int khronos_int16_t; 231 | typedef unsigned short int khronos_uint16_t; 232 | 233 | /* 234 | * Types that differ between LLP64 and LP64 architectures - in LLP64, 235 | * pointers are 64 bits, but 'long' is still 32 bits. Win64 appears 236 | * to be the only LLP64 architecture in current use. 237 | */ 238 | #ifdef _WIN64 239 | typedef signed long long int khronos_intptr_t; 240 | typedef unsigned long long int khronos_uintptr_t; 241 | typedef signed long long int khronos_ssize_t; 242 | typedef unsigned long long int khronos_usize_t; 243 | #else 244 | typedef signed long int khronos_intptr_t; 245 | typedef unsigned long int khronos_uintptr_t; 246 | typedef signed long int khronos_ssize_t; 247 | typedef unsigned long int khronos_usize_t; 248 | #endif 249 | 250 | #if KHRONOS_SUPPORT_FLOAT 251 | /* 252 | * Float type 253 | */ 254 | typedef float khronos_float_t; 255 | #endif 256 | 257 | #if KHRONOS_SUPPORT_INT64 258 | /* Time types 259 | * 260 | * These types can be used to represent a time interval in nanoseconds or 261 | * an absolute Unadjusted System Time. Unadjusted System Time is the number 262 | * of nanoseconds since some arbitrary system event (e.g. since the last 263 | * time the system booted). The Unadjusted System Time is an unsigned 264 | * 64 bit value that wraps back to 0 every 584 years. Time intervals 265 | * may be either signed or unsigned. 266 | */ 267 | typedef khronos_uint64_t khronos_utime_nanoseconds_t; 268 | typedef khronos_int64_t khronos_stime_nanoseconds_t; 269 | #endif 270 | 271 | /* 272 | * Dummy value used to pad enum types to 32 bits. 273 | */ 274 | #ifndef KHRONOS_MAX_ENUM 275 | #define KHRONOS_MAX_ENUM 0x7FFFFFFF 276 | #endif 277 | 278 | /* 279 | * Enumerated boolean type 280 | * 281 | * Values other than zero should be considered to be true. Therefore 282 | * comparisons should not be made against KHRONOS_TRUE. 283 | */ 284 | typedef enum { 285 | KHRONOS_FALSE = 0, 286 | KHRONOS_TRUE = 1, 287 | KHRONOS_BOOLEAN_ENUM_FORCE_SIZE = KHRONOS_MAX_ENUM 288 | } khronos_boolean_enum_t; 289 | 290 | #endif /* __khrplatform_h_ */ 291 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Maximilien Nowak 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 | # Nerv engine - physically based rendering 2 | 3 | ![Github](https://github.com/Cewein/nerv_pathtracer/blob/master/Render/glass%20bunny%20light.PNG) 4 | 5 | This is a 3D engine for light simulation in mind.
6 | The goal of this engine is to implement a real-time raytraced physically based renderer with the pixar material model.
7 |
8 | The engine use OpenGL, GLFW and GLM, but in the future we plan to remove the need of GLM.
9 | Nerv's core is generalist and can render object in a rastered way but heavly use shaders and a single quad to make "realtime ray based application". 10 | ## showcase 11 | #### Depths of fields 12 | ![Github](https://github.com/Cewein/nerv_pathtracer/blob/master/Render/rabbit%20sphere.png) 13 | ![Imgur](https://i.imgur.com/ZvpZmb0.png) 14 | 15 | ## Nerv engine status 16 | ### core 17 | - [x] config file 18 | - [x] I/O for mouse and keyboard 19 | - [x] file reader 20 | - [x] windows manager 21 | 22 | ### engine 23 | 24 | - [x] shader support 25 | - [x] transform controle 26 | - [x] FPS camera 27 | - [x] basic objects 28 | - [x] textures (kinda) 29 | - [ ] USD loader 30 | - [x] GUI 31 | - [x] BVH 32 | - [ ] material model 33 | - [ ] scene descriptor 34 | 35 | ### rendering 36 | 37 | - [x] raytracing 38 | - [x] reflection mat 39 | - [X] refraction mat 40 | - [x] lambert mat 41 | - [x] camera lens (Depths of fields) 42 | - [x] shadow 43 | - [x] light 44 | - [ ] Pixar BSDF model 45 | - [x] progressive sampleling 46 | -------------------------------------------------------------------------------- /Render/glass bunny light - Copie.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cewein/nerv_pathtracer/ead65f70d292fb1e8b396ad6fa007580fdb0b939/Render/glass bunny light - Copie.PNG -------------------------------------------------------------------------------- /Render/glass bunny light.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cewein/nerv_pathtracer/ead65f70d292fb1e8b396ad6fa007580fdb0b939/Render/glass bunny light.PNG -------------------------------------------------------------------------------- /Render/rabbit sphere.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cewein/nerv_pathtracer/ead65f70d292fb1e8b396ad6fa007580fdb0b939/Render/rabbit sphere.png -------------------------------------------------------------------------------- /config.ini: -------------------------------------------------------------------------------- 1 | [window] 2 | width=1280 3 | height=720 4 | fullscreen=0 5 | openglMajor=4 6 | openglMinor=5 7 | [key] 8 | forward=90 9 | backward=83 10 | left=68 11 | right=81 12 | up=32 13 | down=340 14 | freeMouse=258 15 | closeWindow=256 16 | [camera] 17 | speed=15 18 | sensivity=5 19 | fov=90 20 | aperture=0 21 | focusDistance=10 -------------------------------------------------------------------------------- /dependencies/openGL/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # Generated for C/C++, OpenGL, Version 4.0, Compatibility Profile 2 | 3 | cmake_minimum_required(VERSION 3.0) 4 | project(Glad) 5 | 6 | add_library(glad include/glad/glad.h src/glad.c) 7 | target_include_directories(glad PUBLIC include/) -------------------------------------------------------------------------------- /main.cpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include 4 | 5 | #include "src/camera.h" 6 | #include "src/window.h" 7 | #include "src/shader.h" 8 | #include "src/data.h" 9 | #include "src/ui.h" 10 | #include "src/bvh.h" 11 | 12 | 13 | int main() 14 | { 15 | std::cout << "loading config\n"; 16 | nerv::config conf = nerv::loadConfig("E:\\nerv_engine\\nerv_pathtracer\\config.ini"); 17 | 18 | GLFWwindow* win = nerv::createWindow(&conf); 19 | nerv::camera cam(&conf); 20 | nerv::createUI(win); 21 | 22 | 23 | nerv::renderData render = { 24 | 0, 25 | 5, 26 | false, 27 | 0.0 28 | }; 29 | 30 | nerv::shader mainShader("shader/raytraced.frag.glsl", "shader/static.vert.glsl"); 31 | 32 | int width; 33 | int height; 34 | 35 | glfwGetFramebufferSize(win, &width, &height); 36 | 37 | nerv::material* arrMat = nerv::genRandomMaterial(51); 38 | 39 | std::vector triangles = nerv::loadObj("E:\\nerv_engine\\nerv_pathtracer\\model\\bunny-heavy.obj"); 40 | 41 | nerv::bvhNode* bvh = nerv::createNode(triangles, 0, triangles.size()); 42 | int size = nerv::countNode(bvh); 43 | nerv::linearBvhNode * flatten = new nerv::linearBvhNode[size]; 44 | 45 | int offset = 0; 46 | 47 | nerv::flattenBVH(flatten, bvh, &offset, 0); 48 | 49 | size_t triangleBuffer = nerv::createBuffer(sizeof(nerv::triangle) * triangles.size(), triangles.data(), 0, GL_SHADER_STORAGE_BUFFER); 50 | size_t colorBuffer = nerv::createBuffer(sizeof(float) * 4 * width * height, nullptr, 1, GL_SHADER_STORAGE_BUFFER); 51 | size_t bvhBuffer = nerv::createBuffer(sizeof(nerv::linearBvhNode) * size, flatten, 2, GL_SHADER_STORAGE_BUFFER); 52 | 53 | size_t materialBuffer = nerv::createBuffer(sizeof(nerv::material) * 51, arrMat, 3, GL_SHADER_STORAGE_BUFFER); 54 | 55 | nerv::texture background = nerv::loadImage("resources/evening_road_01.jpg"); 56 | nerv::texture checkboard = nerv::loadImage("resources/checker-map.png"); 57 | 58 | while (!glfwWindowShouldClose(win)) 59 | { 60 | //pool event the render 61 | glfwPollEvents(); 62 | glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 63 | glClearColor(0.2f, 0.3f, 0.3f, 1.0f); 64 | 65 | //update camera if not in menu 66 | if(!nerv::gUsingMenu) 67 | render.isMoving = cam.updateCamera(&cam, win); 68 | 69 | //send info to shader 70 | nerv::sendInfo(&cam, &render, win); 71 | 72 | mainShader.activateImage(&background, "background", 0); 73 | mainShader.activateImage(&checkboard, "checkboard", 1); 74 | 75 | //render 76 | mainShader.use(); 77 | nerv::displayUI(win, &render, &cam); 78 | 79 | //reload shader if needed 80 | if (render.reload) 81 | mainShader.reload(); 82 | 83 | //update camera time 84 | cam.updateTime(&cam); 85 | 86 | glfwSwapBuffers(win); 87 | 88 | } 89 | 90 | //nerv::closeUI(); 91 | 92 | glfwDestroyWindow(win); 93 | glfwTerminate(); 94 | 95 | delete arrMat; 96 | //delete arrSphere; 97 | delete flatten; 98 | 99 | return EXIT_SUCCESS; 100 | } -------------------------------------------------------------------------------- /model/cube.mtl: -------------------------------------------------------------------------------- 1 | # Blender MTL File: 'None' 2 | # Material Count: 1 3 | 4 | newmtl None 5 | Ns 500 6 | Ka 0.8 0.8 0.8 7 | Kd 0.8 0.8 0.8 8 | Ks 0.8 0.8 0.8 9 | d 1 10 | illum 2 11 | -------------------------------------------------------------------------------- /model/cube.obj: -------------------------------------------------------------------------------- 1 | # Blender v2.80 (sub 75) OBJ File: '' 2 | # www.blender.org 3 | mtllib cube.mtl 4 | o Suzanne 5 | v 0.437500 1.096637 0.539935 6 | v -0.437500 1.096637 0.539935 7 | v 0.500000 0.994523 0.515036 8 | v -0.500000 0.994523 0.515036 9 | v 0.546875 0.900607 0.446710 10 | v -0.546875 0.900607 0.446710 11 | v 0.351562 0.858093 0.523012 12 | v -0.351562 0.858093 0.523012 13 | v 0.351562 0.960512 0.576078 14 | v -0.351562 0.960512 0.576078 15 | v 0.351562 1.079632 0.570456 16 | v -0.351562 1.079632 0.570456 17 | v 0.273438 1.114252 0.565748 18 | v -0.273438 1.114252 0.565748 19 | v 0.203125 1.025348 0.560208 20 | v -0.203125 1.025348 0.560208 21 | v 0.156250 0.940239 0.504788 22 | v -0.156250 0.940239 0.504788 23 | v 0.078125 1.099519 0.405555 24 | v -0.078125 1.099519 0.405555 25 | v 0.140625 1.147958 0.476540 26 | v -0.140625 1.147958 0.476540 27 | v 0.242188 1.178784 0.521712 28 | v -0.242188 1.178784 0.521712 29 | v 0.273438 1.249768 0.473272 30 | v -0.273438 1.249768 0.473272 31 | v 0.203125 1.270569 0.392871 32 | v -0.203125 1.270569 0.392871 33 | v 0.156250 1.256444 0.289012 34 | v -0.156250 1.256444 0.289012 35 | v 0.351562 1.303362 0.219163 36 | v -0.351562 1.303362 0.219163 37 | v 0.351562 1.308983 0.338283 38 | v -0.351562 1.308983 0.338283 39 | v 0.351562 1.266774 0.442752 40 | v -0.351562 1.266774 0.442752 41 | v 0.437500 1.232154 0.447460 42 | v -0.437500 1.232154 0.447460 43 | v 0.500000 1.239743 0.347699 44 | v -0.500000 1.239743 0.347699 45 | v 0.546875 1.216812 0.230933 46 | v -0.546875 1.216812 0.230933 47 | v 0.625000 1.046676 0.328117 48 | v -0.625000 1.046676 0.328117 49 | v 0.562500 1.108326 0.418461 50 | v -0.562500 1.108326 0.418461 51 | v 0.468750 1.156766 0.489446 52 | v -0.468750 1.156766 0.489446 53 | v 0.476562 1.165573 0.502353 54 | v -0.476562 1.165573 0.502353 55 | v 0.445312 1.247414 0.455963 56 | v -0.445312 1.247414 0.455963 57 | v 0.351562 1.292891 0.453304 58 | v -0.351562 1.292891 0.453304 59 | v 0.265625 1.269432 0.488228 60 | v -0.265625 1.269432 0.488228 61 | v 0.226562 1.191994 0.541072 62 | v -0.226562 1.191994 0.541072 63 | v 0.265625 1.121009 0.589511 64 | v -0.265625 1.121009 0.589511 65 | v 0.351562 1.196398 0.547525 66 | v -0.351562 1.196398 0.547525 67 | v 0.351562 1.079936 0.598623 68 | v -0.351562 1.079936 0.598623 69 | v 0.445312 1.098991 0.557245 70 | v -0.445312 1.098991 0.557245 71 | v 0.000000 1.302835 0.370853 72 | v 0.000000 1.282339 0.479421 73 | v 0.000000 0.382080 0.989712 74 | v 0.000000 0.705348 0.825865 75 | v 0.000000 0.823859 0.763910 76 | v 0.000000 0.295835 1.029649 77 | v 0.000000 1.204210 0.267907 78 | v 0.000000 1.322112 0.149619 79 | v 0.000000 0.963431 -0.958136 80 | v 0.000000 0.514204 -1.020455 81 | v 0.000000 0.120865 -0.723669 82 | v 0.000000 0.015200 -0.074616 83 | v 0.203125 0.691751 0.570315 84 | v -0.203125 0.691751 0.570315 85 | v 0.312500 0.489653 0.717683 86 | v -0.312500 0.489653 0.717683 87 | v 0.351562 0.276698 0.863002 88 | v -0.351562 0.276698 0.863002 89 | v 0.367188 0.093351 0.940826 90 | v -0.367188 0.093351 0.940826 91 | v 0.328125 0.043775 0.965198 92 | v -0.328125 0.043775 0.965198 93 | v 0.179688 0.042030 1.004222 94 | v -0.179688 0.042030 1.004222 95 | v 0.000000 0.042334 1.032389 96 | v 0.437500 0.712856 0.518081 97 | v -0.437500 0.712856 0.518081 98 | v 0.632812 0.801150 0.467287 99 | v -0.632812 0.801150 0.467287 100 | v 0.828125 0.903183 0.284162 101 | v -0.828125 0.903183 0.284162 102 | v 0.859375 1.219166 0.248243 103 | v -0.859375 1.219166 0.248243 104 | v 0.710938 1.281953 0.243231 105 | v -0.710938 1.281953 0.243231 106 | v 0.492188 1.413979 0.228802 107 | v -0.492188 1.413979 0.228802 108 | v 0.320312 1.569464 0.179449 109 | v -0.320312 1.569464 0.179449 110 | v 0.156250 1.550409 0.220827 111 | v -0.156250 1.550409 0.220827 112 | v 0.062500 1.358863 0.342078 113 | v -0.062500 1.358863 0.342078 114 | v 0.164062 1.307543 0.405473 115 | v -0.164062 1.307543 0.405473 116 | v 0.125000 1.212795 0.460671 117 | v -0.125000 1.212795 0.460671 118 | v 0.203125 1.025348 0.560208 119 | v -0.203125 1.025348 0.560208 120 | v 0.375000 0.938798 0.571978 121 | v -0.375000 0.938798 0.571978 122 | v 0.492188 0.959903 0.519744 123 | v -0.492188 0.959903 0.519744 124 | v 0.625000 1.049943 0.429927 125 | v -0.625000 1.049943 0.429927 126 | v 0.640625 1.140287 0.368277 127 | v -0.640625 1.140287 0.368277 128 | v 0.601562 1.213626 0.337147 129 | v -0.601562 1.213626 0.337147 130 | v 0.429688 1.296077 0.347090 131 | v -0.429688 1.296077 0.347090 132 | v 0.250000 1.343908 0.361742 133 | v -0.250000 1.343908 0.361742 134 | v 0.000000 0.311095 1.038151 135 | v 0.109375 0.349814 1.011730 136 | v -0.109375 0.349814 1.011730 137 | v 0.117188 0.239806 1.058424 138 | v -0.117188 0.239806 1.058424 139 | v 0.062500 0.192280 1.071939 140 | v -0.062500 0.192280 1.071939 141 | v 0.000000 0.181423 1.069890 142 | v 0.000000 0.790984 0.729595 143 | v 0.000000 0.831753 0.692316 144 | v 0.101562 0.825300 0.696720 145 | v -0.101562 0.825300 0.696720 146 | v 0.125000 0.765172 0.747209 147 | v -0.125000 0.765172 0.747209 148 | v 0.085938 0.709143 0.775985 149 | v -0.085938 0.709143 0.775985 150 | v 0.398438 0.869559 0.581395 151 | v -0.398438 0.869559 0.581395 152 | v 0.617188 0.927028 0.485429 153 | v -0.617188 0.927028 0.485429 154 | v 0.726562 1.036428 0.382401 155 | v -0.726562 1.036428 0.382401 156 | v 0.742188 1.209223 0.330694 157 | v -0.742188 1.209223 0.330694 158 | v 0.687500 1.281121 0.366754 159 | v -0.687500 1.281121 0.366754 160 | v 0.437500 1.430457 0.349972 161 | v -0.437500 1.430457 0.349972 162 | v 0.312500 1.529913 0.329394 163 | v -0.312500 1.529913 0.329394 164 | v 0.203125 1.519361 0.355511 165 | v -0.203125 1.519361 0.355511 166 | v 0.101562 1.360081 0.454745 167 | v -0.101562 1.360081 0.454745 168 | v 0.125000 0.903651 0.728377 169 | v -0.125000 0.903651 0.728377 170 | v 0.210938 0.562465 0.838244 171 | v -0.210938 0.562465 0.838244 172 | v 0.250000 0.336299 0.964203 173 | v -0.250000 0.336299 0.964203 174 | v 0.265625 0.226291 1.010898 175 | v -0.265625 0.226291 1.010898 176 | v 0.234375 0.131238 1.037928 177 | v -0.234375 0.131238 1.037928 178 | v 0.164062 0.118332 1.046736 179 | v -0.164062 0.118332 1.046736 180 | v 0.000000 0.109829 1.061996 181 | v 0.000000 0.977822 0.573724 182 | v 0.000000 1.135356 0.513514 183 | v 0.328125 1.341554 0.344432 184 | v -0.328125 1.341554 0.344432 185 | v 0.164062 1.068471 0.540240 186 | v -0.164062 1.068471 0.540240 187 | v 0.132812 1.130953 0.507061 188 | v -0.132812 1.130953 0.507061 189 | v 0.117188 0.375627 0.994115 190 | v -0.117188 0.375627 0.994115 191 | v 0.078125 0.584483 0.870510 192 | v -0.078125 0.584483 0.870510 193 | v 0.000000 0.584483 0.870510 194 | v 0.000000 0.676877 0.798003 195 | v 0.093750 0.744067 0.799443 196 | v -0.093750 0.744067 0.799443 197 | v 0.132812 0.791593 0.785928 198 | v -0.132812 0.791593 0.785928 199 | v 0.109375 0.860224 0.720179 200 | v -0.109375 0.860224 0.720179 201 | v 0.039062 0.866677 0.715775 202 | v -0.039062 0.866677 0.715775 203 | v 0.000000 0.828567 0.798530 204 | v 0.046875 0.864932 0.754798 205 | v -0.046875 0.864932 0.754798 206 | v 0.093750 0.858479 0.759202 207 | v -0.093750 0.858479 0.759202 208 | v 0.109375 0.809208 0.811741 209 | v -0.109375 0.809208 0.811741 210 | v 0.078125 0.776637 0.805592 211 | v -0.078125 0.776637 0.805592 212 | v 0.000000 0.744371 0.827610 213 | v 0.257812 0.584097 0.634319 214 | v -0.257812 0.584097 0.634319 215 | v 0.164062 0.730247 0.723750 216 | v -0.164062 0.730247 0.723750 217 | v 0.179688 0.672169 0.763383 218 | v -0.179688 0.672169 0.763383 219 | v 0.234375 0.635722 0.599091 220 | v -0.234375 0.635722 0.599091 221 | v 0.000000 0.194329 1.061083 222 | v 0.046875 0.200782 1.056679 223 | v -0.046875 0.200782 1.056679 224 | v 0.093750 0.252712 1.049617 225 | v -0.093750 0.252712 1.049617 226 | v 0.093750 0.326051 1.018487 227 | v -0.093750 0.326051 1.018487 228 | v 0.000000 0.254153 0.982427 229 | v 0.093750 0.284369 0.971266 230 | v -0.093750 0.284369 0.971266 231 | v 0.093750 0.219533 0.987135 232 | v -0.093750 0.219533 0.987135 233 | v 0.046875 0.182864 1.002700 234 | v -0.046875 0.182864 1.002700 235 | v 0.000000 0.176410 1.007103 236 | v 0.171875 1.150617 0.522017 237 | v -0.171875 1.150617 0.522017 238 | v 0.187500 1.094588 0.550792 239 | v -0.187500 1.094588 0.550792 240 | v 0.335938 1.311642 0.383760 241 | v -0.335938 1.311642 0.383760 242 | v 0.273438 1.313996 0.401070 243 | v -0.273438 1.313996 0.401070 244 | v 0.421875 1.294636 0.414281 245 | v -0.421875 1.294636 0.414281 246 | v 0.562500 1.211881 0.376170 247 | v -0.562500 1.211881 0.376170 248 | v 0.585938 1.155852 0.404946 249 | v -0.585938 1.155852 0.404946 250 | v 0.578125 1.074010 0.451336 251 | v -0.578125 1.074010 0.451336 252 | v 0.476562 1.018590 0.536445 253 | v -0.476562 1.018590 0.536445 254 | v 0.375000 0.999535 0.577823 255 | v -0.375000 0.999535 0.577823 256 | v 0.226562 1.060272 0.583667 257 | v -0.226562 1.060272 0.583667 258 | v 0.179688 1.215149 0.477981 259 | v -0.179688 1.215149 0.477981 260 | v 0.210938 1.279680 0.433945 261 | v -0.210938 1.279680 0.433945 262 | v 0.234375 1.253563 0.423392 263 | v -0.234375 1.253563 0.423392 264 | v 0.195312 1.201938 0.458621 265 | v -0.195312 1.201938 0.458621 266 | v 0.242188 1.059968 0.555500 267 | v -0.242188 1.059968 0.555500 268 | v 0.375000 1.010088 0.551706 269 | v -0.375000 1.010088 0.551706 270 | v 0.460938 1.022690 0.514732 271 | v -0.460938 1.022690 0.514732 272 | v 0.546875 1.082513 0.436076 273 | v -0.546875 1.082513 0.436076 274 | v 0.554688 1.140592 0.396443 275 | v -0.554688 1.140592 0.396443 276 | v 0.531250 1.190168 0.372071 277 | v -0.531250 1.190168 0.372071 278 | v 0.414062 1.274972 0.399325 279 | v -0.414062 1.274972 0.399325 280 | v 0.281250 1.290233 0.407827 281 | v -0.281250 1.290233 0.407827 282 | v 0.335938 1.287879 0.390517 283 | v -0.335938 1.287879 0.390517 284 | v 0.203125 1.094283 0.522625 285 | v -0.203125 1.094283 0.522625 286 | v 0.195312 1.139456 0.491800 287 | v -0.195312 1.139456 0.491800 288 | v 0.109375 1.253786 0.243535 289 | v -0.109375 1.253786 0.243535 290 | v 0.195312 1.425972 0.135495 291 | v -0.195312 1.425972 0.135495 292 | v 0.335938 1.432121 0.102924 293 | v -0.335938 1.432121 0.102924 294 | v 0.484375 1.300399 0.145520 295 | v -0.484375 1.300399 0.145520 296 | v 0.679688 1.181279 0.151141 297 | v -0.679688 1.181279 0.151141 298 | v 0.796875 1.124945 0.151750 299 | v -0.796875 1.124945 0.151750 300 | v 0.773438 0.876457 0.217277 301 | v -0.773438 0.876457 0.217277 302 | v 0.601562 0.762959 0.342018 303 | v -0.601562 0.762959 0.342018 304 | v 0.437500 0.716346 0.440034 305 | v -0.437500 0.716346 0.440034 306 | v 0.000000 1.434616 -0.267647 307 | v 0.000000 1.298632 -0.619386 308 | v 0.000000 -0.010471 -0.444883 309 | v 0.000000 0.254517 0.414689 310 | v 0.000000 -0.017266 0.931187 311 | v 0.000000 0.058649 0.737511 312 | v 0.000000 0.239034 0.586043 313 | v 0.000000 0.288001 0.505338 314 | v 0.851562 0.753988 -0.086936 315 | v -0.851562 0.753988 -0.086936 316 | v 0.859375 0.767726 -0.219267 317 | v -0.859375 0.767726 -0.219267 318 | v 0.773438 0.502374 -0.511100 319 | v -0.773438 0.502374 -0.511100 320 | v 0.460938 0.494621 -0.827387 321 | v -0.460938 0.494621 -0.827387 322 | v 0.734375 0.530481 0.084500 323 | v -0.734375 0.530481 0.084500 324 | v 0.593750 0.333841 -0.065059 325 | v -0.593750 0.333841 -0.065059 326 | v 0.640625 0.280917 -0.350521 327 | v -0.640625 0.280917 -0.350521 328 | v 0.335938 0.200434 -0.579345 329 | v -0.335938 0.200434 -0.579345 330 | v 0.234375 0.468162 0.533727 331 | v -0.234375 0.468162 0.533727 332 | v 0.179688 0.332868 0.446346 333 | v -0.179688 0.332868 0.446346 334 | v 0.289062 0.158106 0.716933 335 | v -0.289062 0.158106 0.716933 336 | v 0.250000 0.336745 0.604489 337 | v -0.250000 0.336745 0.604489 338 | v 0.328125 -0.000870 0.844333 339 | v -0.328125 -0.000870 0.844333 340 | v 0.140625 0.110579 0.730448 341 | v -0.140625 0.110579 0.730448 342 | v 0.125000 0.286865 0.600695 343 | v -0.125000 0.286865 0.600695 344 | v 0.164062 -0.004665 0.894213 345 | v -0.164062 -0.004665 0.894213 346 | v 0.218750 0.539452 0.513454 347 | v -0.218750 0.539452 0.513454 348 | v 0.210938 0.606642 0.514895 349 | v -0.210938 0.606642 0.514895 350 | v 0.203125 0.669429 0.509882 351 | v -0.203125 0.669429 0.509882 352 | v 0.210938 0.299385 0.355697 353 | v -0.210938 0.299385 0.355697 354 | v 0.296875 0.121718 -0.043264 355 | v -0.296875 0.121718 -0.043264 356 | v 0.343750 0.103109 -0.361601 357 | v -0.343750 0.103109 -0.361601 358 | v 0.453125 1.030094 -0.805005 359 | v -0.453125 1.030094 -0.805005 360 | v 0.453125 1.257863 -0.582107 361 | v -0.453125 1.257863 -0.582107 362 | v 0.453125 1.365072 -0.286397 363 | v -0.453125 1.365072 -0.286397 364 | v 0.460938 1.204129 0.059883 365 | v -0.460938 1.204129 0.059883 366 | v 0.726562 1.054488 0.048499 367 | v -0.726562 1.054488 0.048499 368 | v 0.632812 1.062382 -0.023095 369 | v -0.632812 1.062382 -0.023095 370 | v 0.640625 1.141179 -0.351152 371 | v -0.640625 1.141179 -0.351152 372 | v 0.796875 1.064654 -0.213809 373 | v -0.796875 1.064654 -0.213809 374 | v 0.796875 0.973315 -0.444682 375 | v -0.796875 0.973315 -0.444682 376 | v 0.640625 1.038983 -0.584075 377 | v -0.640625 1.038983 -0.584075 378 | v 0.640625 0.839989 -0.750944 379 | v -0.640625 0.839989 -0.750944 380 | v 0.796875 0.772271 -0.600695 381 | v -0.796875 0.772271 -0.600695 382 | v 0.617188 0.470331 -0.668939 383 | v -0.617188 0.470331 -0.668939 384 | v 0.484375 0.240675 -0.464933 385 | v -0.484375 0.240675 -0.464933 386 | v 0.820312 0.686108 -0.352734 387 | v -0.820312 0.686108 -0.352734 388 | v 0.406250 0.471266 0.219490 389 | v -0.406250 0.471266 0.219490 390 | v 0.429688 0.249341 -0.064146 391 | v -0.429688 0.249341 -0.064146 392 | v 0.890625 0.733025 -0.422583 393 | v -0.890625 0.733025 -0.422583 394 | v 0.773438 0.342953 -0.023986 395 | v -0.773438 0.342953 -0.023986 396 | v 1.039062 0.260725 -0.213786 397 | v -1.039062 0.260725 -0.213786 398 | v 1.281250 0.332542 -0.385750 399 | v -1.281250 0.332542 -0.385750 400 | v 1.351562 0.556354 -0.529019 401 | v -1.351562 0.556354 -0.529019 402 | v 1.234375 0.711230 -0.634705 403 | v -1.234375 0.711230 -0.634705 404 | v 1.023438 0.747067 -0.526747 405 | v -1.023438 0.747067 -0.526747 406 | v 1.015625 0.708653 -0.472158 407 | v -1.015625 0.708653 -0.472158 408 | v 1.187500 0.670766 -0.569260 409 | v -1.187500 0.670766 -0.569260 410 | v 1.265625 0.539348 -0.498498 411 | v -1.265625 0.539348 -0.498498 412 | v 1.210938 0.365112 -0.379601 413 | v -1.210938 0.365112 -0.379601 414 | v 1.031250 0.325562 -0.229656 415 | v -1.031250 0.325562 -0.229656 416 | v 0.828125 0.396628 -0.070072 417 | v -0.828125 0.396628 -0.070072 418 | v 0.921875 0.703113 -0.383255 419 | v -0.921875 0.703113 -0.383255 420 | v 0.945312 0.618308 -0.410508 421 | v -0.945312 0.618308 -0.410508 422 | v 0.882812 0.391311 -0.161025 423 | v -0.882812 0.391311 -0.161025 424 | v 1.039062 0.322599 -0.303299 425 | v -1.039062 0.322599 -0.303299 426 | v 1.187500 0.356001 -0.420674 427 | v -1.187500 0.356001 -0.420674 428 | v 1.234375 0.485064 -0.508746 429 | v -1.234375 0.485064 -0.508746 430 | v 1.171875 0.579812 -0.563943 431 | v -1.171875 0.579812 -0.563943 432 | v 1.023438 0.610942 -0.490604 433 | v -1.023438 0.610942 -0.490604 434 | v 0.843750 0.649438 -0.337169 435 | v -0.843750 0.649438 -0.337169 436 | v 0.835938 0.517412 -0.322740 437 | v -0.835938 0.517412 -0.322740 438 | v 0.757812 0.452880 -0.278704 439 | v -0.757812 0.452880 -0.278704 440 | v 0.820312 0.446427 -0.274301 441 | v -0.820312 0.446427 -0.274301 442 | v 0.843750 0.388348 -0.234668 443 | v -0.843750 0.388348 -0.234668 444 | v 0.812500 0.362535 -0.217054 445 | v -0.812500 0.362535 -0.217054 446 | v 0.726562 0.489935 -0.058079 447 | v -0.726562 0.489935 -0.058079 448 | v 0.718750 0.413329 -0.128759 449 | v -0.718750 0.413329 -0.128759 450 | v 0.718750 0.456147 -0.176894 451 | v -0.718750 0.456147 -0.176894 452 | v 0.796875 0.578453 -0.288729 453 | v -0.796875 0.578453 -0.288729 454 | v 0.890625 0.579894 -0.355920 455 | v -0.890625 0.579894 -0.355920 456 | v 0.890625 0.542615 -0.396688 457 | v -0.890625 0.542615 -0.396688 458 | v 0.812500 0.336114 -0.255773 459 | v -0.812500 0.336114 -0.255773 460 | v 0.851562 0.361927 -0.273387 461 | v -0.851562 0.361927 -0.273387 462 | v 0.828125 0.413552 -0.308616 463 | v -0.828125 0.413552 -0.308616 464 | v 0.765625 0.426458 -0.317423 465 | v -0.765625 0.426458 -0.317423 466 | v 0.843750 0.490990 -0.361459 467 | v -0.843750 0.490990 -0.361459 468 | v 1.039062 0.567210 -0.526969 469 | v -1.039062 0.567210 -0.526969 470 | v 1.187500 0.540484 -0.593855 471 | v -1.187500 0.540484 -0.593855 472 | v 1.257812 0.452189 -0.543062 473 | v -1.257812 0.452189 -0.543062 474 | v 1.210938 0.327529 -0.448536 475 | v -1.210938 0.327529 -0.448536 476 | v 1.046875 0.291773 -0.348471 477 | v -1.046875 0.291773 -0.348471 478 | v 0.882812 0.366939 -0.210601 479 | v -0.882812 0.366939 -0.210601 480 | v 0.953125 0.574577 -0.446873 481 | v -0.953125 0.574577 -0.446873 482 | v 0.890625 0.434961 -0.332684 483 | v -0.890625 0.434961 -0.332684 484 | v 0.937500 0.391838 -0.312715 485 | v -0.937500 0.391838 -0.312715 486 | v 1.000000 0.425849 -0.373757 487 | v -1.000000 0.425849 -0.373757 488 | v 0.960938 0.473376 -0.387272 489 | v -0.960938 0.473376 -0.387272 490 | v 1.015625 0.511790 -0.441860 491 | v -1.015625 0.511790 -0.441860 492 | v 1.054688 0.468668 -0.421892 493 | v -1.054688 0.468668 -0.421892 494 | v 1.109375 0.483623 -0.441556 495 | v -1.109375 0.483623 -0.441556 496 | v 1.085938 0.535249 -0.476785 497 | v -1.085938 0.535249 -0.476785 498 | v 1.023438 0.617922 -0.646698 499 | v -1.023438 0.617922 -0.646698 500 | v 1.250000 0.608506 -0.715938 501 | v -1.250000 0.608506 -0.715938 502 | v 1.367188 0.492958 -0.580340 503 | v -1.367188 0.492958 -0.580340 504 | v 1.312500 0.275295 -0.469641 505 | v -1.312500 0.275295 -0.469641 506 | v 1.039062 0.181156 -0.358110 507 | v -1.039062 0.181156 -0.358110 508 | v 0.789062 0.241366 -0.200576 509 | v -0.789062 0.241366 -0.200576 510 | v 0.859375 0.629997 -0.531982 511 | v -0.859375 0.629997 -0.531982 512 | vt 0.890955 0.590063 513 | vt 0.870622 0.589649 514 | vt 0.860081 0.560115 515 | vt 0.904571 0.559404 516 | vt 0.856226 0.850547 517 | vt 0.868067 0.821510 518 | vt 0.888398 0.821999 519 | vt 0.900640 0.853232 520 | vt 0.853018 0.521562 521 | vt 0.920166 0.524546 522 | vt 0.847458 0.888748 523 | vt 0.914672 0.888748 524 | vt 0.828900 0.590771 525 | vt 0.798481 0.569535 526 | vt 0.795104 0.838402 527 | vt 0.826436 0.818537 528 | vt 0.854402 0.604754 529 | vt 0.852534 0.805700 530 | vt 0.854107 0.625459 531 | vt 0.828171 0.633354 532 | vt 0.827598 0.775964 533 | vt 0.853157 0.785002 534 | vt 0.791018 0.645443 535 | vt 0.791018 0.762238 536 | vt 0.855181 0.668527 537 | vt 0.842358 0.702491 538 | vt 0.844839 0.707525 539 | vt 0.856142 0.742025 540 | vt 0.867508 0.642291 541 | vt 0.867293 0.768782 542 | vt 0.890474 0.641909 543 | vt 0.900375 0.666964 544 | vt 0.901223 0.745592 545 | vt 0.890219 0.770183 546 | vt 0.918898 0.699697 547 | vt 0.921180 0.713713 548 | vt 0.931889 0.636832 549 | vt 0.968392 0.645333 550 | vt 0.968213 0.770220 551 | vt 0.931368 0.777093 552 | vt 0.905882 0.627902 553 | vt 0.904990 0.784860 554 | vt 0.906232 0.605742 555 | vt 0.933717 0.593037 556 | vt 0.931250 0.820926 557 | vt 0.904357 0.807013 558 | vt 0.968392 0.573812 559 | vt 0.965038 0.841671 560 | vt 0.902359 0.607909 561 | vt 0.889591 0.593275 562 | vt 0.900583 0.804677 563 | vt 0.887178 0.818729 564 | vt 0.899781 0.626257 565 | vt 0.898822 0.786233 566 | vt 0.887842 0.636527 567 | vt 0.887351 0.775442 568 | vt 0.870908 0.635245 569 | vt 0.870376 0.775972 570 | vt 0.859881 0.623942 571 | vt 0.858859 0.786774 572 | vt 0.859664 0.608186 573 | vt 0.857942 0.802505 574 | vt 0.871664 0.593961 575 | vt 0.869299 0.817249 576 | vt 0.879400 0.616512 577 | vt 0.878029 0.795063 578 | vt 0.540260 0.053805 579 | vt 0.536419 0.062072 580 | vt 0.518925 0.059681 581 | vt 0.518916 0.050294 582 | vt 0.501452 0.062043 583 | vt 0.497626 0.053770 584 | vt 0.551930 0.058338 585 | vt 0.542788 0.064089 586 | vt 0.495083 0.064047 587 | vt 0.485955 0.058273 588 | vt 0.555073 0.061900 589 | vt 0.546290 0.072669 590 | vt 0.491565 0.072625 591 | vt 0.482805 0.061829 592 | vt 0.563812 0.076586 593 | vt 0.548333 0.084893 594 | vt 0.489507 0.084858 595 | vt 0.474014 0.076511 596 | vt 0.583135 0.108495 597 | vt 0.555621 0.121749 598 | vt 0.482177 0.121781 599 | vt 0.454527 0.108481 600 | vt 0.605512 0.165134 601 | vt 0.647395 0.200502 602 | vt 0.621513 0.227818 603 | vt 0.553118 0.209599 604 | vt 0.416514 0.229490 605 | vt 0.389677 0.201890 606 | vt 0.432024 0.165644 607 | vt 0.485339 0.210053 608 | vt 0.676379 0.233241 609 | vt 0.664761 0.253225 610 | vt 0.372747 0.256357 611 | vt 0.360308 0.235899 612 | vt 0.715342 0.265392 613 | vt 0.683908 0.279995 614 | vt 0.353696 0.284606 615 | vt 0.320452 0.270303 616 | vt 0.707254 0.310054 617 | vt 0.687515 0.311539 618 | vt 0.351187 0.317440 619 | vt 0.330721 0.316853 620 | vt 0.697446 0.332673 621 | vt 0.676824 0.323937 622 | vt 0.362723 0.329722 623 | vt 0.341964 0.339667 624 | vt 0.662817 0.372521 625 | vt 0.639050 0.357330 626 | vt 0.402772 0.362131 627 | vt 0.379297 0.378686 628 | vt 0.626842 0.395792 629 | vt 0.618316 0.375151 630 | vt 0.424583 0.379267 631 | vt 0.416915 0.400552 632 | vt 0.604826 0.397804 633 | vt 0.600808 0.377857 634 | vt 0.442396 0.381222 635 | vt 0.439252 0.401540 636 | vt 0.553095 0.390512 637 | vt 0.559674 0.357011 638 | vt 0.482938 0.358497 639 | vt 0.490934 0.391862 640 | vt 0.521923 0.386009 641 | vt 0.521086 0.343868 642 | vt 0.577279 0.340156 643 | vt 0.599845 0.344815 644 | vt 0.441977 0.347815 645 | vt 0.464579 0.342230 646 | vt 0.615546 0.342005 647 | vt 0.425972 0.345582 648 | vt 0.634472 0.332311 649 | vt 0.406362 0.336480 650 | vt 0.662406 0.312804 651 | vt 0.377061 0.317685 652 | vt 0.668440 0.297958 653 | vt 0.370304 0.302644 654 | vt 0.664101 0.277872 655 | vt 0.374100 0.281778 656 | vt 0.639236 0.253047 657 | vt 0.398938 0.255633 658 | vt 0.613992 0.242662 659 | vt 0.424464 0.244473 660 | vt 0.572941 0.258564 661 | vt 0.466409 0.259709 662 | vt 0.563905 0.272007 663 | vt 0.519760 0.248864 664 | vt 0.475886 0.273078 665 | vt 0.558527 0.316594 666 | vt 0.482619 0.317843 667 | vt 0.520277 0.294764 668 | vt 0.556923 0.291214 669 | vt 0.483433 0.292249 670 | vt 0.525483 0.068967 671 | vt 0.518928 0.067899 672 | vt 0.512375 0.068956 673 | vt 0.531231 0.073829 674 | vt 0.506626 0.073811 675 | vt 0.531019 0.087431 676 | vt 0.506827 0.087416 677 | vt 0.532042 0.127713 678 | vt 0.532669 0.090920 679 | vt 0.505177 0.090908 680 | vt 0.505828 0.127728 681 | vt 0.538112 0.158382 682 | vt 0.518981 0.151749 683 | vt 0.518941 0.128358 684 | vt 0.499851 0.158434 685 | vt 0.518925 0.093952 686 | vt 0.518927 0.085180 687 | vt 0.548362 0.173560 688 | vt 0.537959 0.175966 689 | vt 0.535214 0.166808 690 | vt 0.502799 0.166857 691 | vt 0.500100 0.176033 692 | vt 0.489683 0.173693 693 | vt 0.544281 0.193366 694 | vt 0.537248 0.187577 695 | vt 0.500890 0.187571 696 | vt 0.493996 0.193428 697 | vt 0.519841 0.200843 698 | vt 0.528757 0.191785 699 | vt 0.509219 0.191626 700 | vt 0.517577 0.190607 701 | vt 0.519132 0.185382 702 | vt 0.518998 0.159028 703 | vt 0.531131 0.171631 704 | vt 0.519016 0.165599 705 | vt 0.506910 0.171667 706 | vt 0.519099 0.179457 707 | vt 0.528222 0.186316 708 | vt 0.509787 0.186260 709 | vt 0.533528 0.184215 710 | vt 0.504547 0.184206 711 | vt 0.533449 0.176739 712 | vt 0.504604 0.176791 713 | vt 0.561572 0.167779 714 | vt 0.476363 0.167996 715 | vt 0.559475 0.149319 716 | vt 0.478371 0.149447 717 | vt 0.596138 0.133426 718 | vt 0.441395 0.133592 719 | vt 0.601169 0.147885 720 | vt 0.436337 0.148194 721 | vt 0.518925 0.083865 722 | vt 0.528933 0.084957 723 | vt 0.508915 0.084945 724 | vt 0.529036 0.075429 725 | vt 0.508820 0.075415 726 | vt 0.523751 0.070508 727 | vt 0.514106 0.070501 728 | vt 0.518929 0.069468 729 | vt 0.521560 0.074970 730 | vt 0.518928 0.074259 731 | vt 0.516297 0.074966 732 | vt 0.524236 0.076691 733 | vt 0.513619 0.076684 734 | vt 0.524601 0.079886 735 | vt 0.513252 0.079879 736 | vt 0.518926 0.079331 737 | vt 0.571787 0.277295 738 | vt 0.568351 0.292904 739 | vt 0.468070 0.278617 740 | vt 0.471978 0.294282 741 | vt 0.573085 0.311386 742 | vt 0.467790 0.313081 743 | vt 0.584855 0.327708 744 | vt 0.456477 0.329961 745 | vt 0.580734 0.266620 746 | vt 0.458737 0.268049 747 | vt 0.611720 0.255725 748 | vt 0.427062 0.257728 749 | vt 0.632494 0.262853 750 | vt 0.406068 0.265508 751 | vt 0.653658 0.279971 752 | vt 0.384904 0.283634 753 | vt 0.656064 0.297636 754 | vt 0.383015 0.301864 755 | vt 0.652752 0.310186 756 | vt 0.386858 0.314615 757 | vt 0.629040 0.323864 758 | vt 0.411556 0.327673 759 | vt 0.614408 0.331972 760 | vt 0.426727 0.335361 761 | vt 0.601033 0.333624 762 | vt 0.440344 0.336537 763 | vt 0.590644 0.321516 764 | vt 0.601799 0.328453 765 | vt 0.450408 0.323919 766 | vt 0.439372 0.331331 767 | vt 0.613335 0.327083 768 | vt 0.427623 0.330358 769 | vt 0.626851 0.320513 770 | vt 0.413648 0.324175 771 | vt 0.646248 0.306421 772 | vt 0.393381 0.310510 773 | vt 0.649541 0.296225 774 | vt 0.389662 0.300183 775 | vt 0.647785 0.283486 776 | vt 0.391040 0.287071 777 | vt 0.629829 0.267263 778 | vt 0.408893 0.269959 779 | vt 0.612641 0.261560 780 | vt 0.426254 0.263693 781 | vt 0.585166 0.270991 782 | vt 0.454369 0.272583 783 | vt 0.578124 0.281900 784 | vt 0.461798 0.283441 785 | vt 0.579548 0.309340 786 | vt 0.461204 0.311233 787 | vt 0.577524 0.293776 788 | vt 0.462754 0.295432 789 | vt 0.553209 0.433063 790 | vt 0.523031 0.433628 791 | vt 0.492809 0.434538 792 | vt 0.609819 0.431516 793 | vt 0.435860 0.435740 794 | vt 0.648174 0.419316 795 | vt 0.396518 0.425416 796 | vt 0.692106 0.388274 797 | vt 0.350292 0.396229 798 | vt 0.726332 0.341754 799 | vt 0.312756 0.350588 800 | vt 0.735879 0.312112 801 | vt 0.301067 0.320593 802 | vt 0.729900 0.256393 803 | vt 0.304876 0.261087 804 | vt 0.698172 0.216906 805 | vt 0.337414 0.219179 806 | vt 0.663103 0.190671 807 | vt 0.373474 0.191872 808 | vt 0.626908 0.015608 809 | vt 0.649444 0.022378 810 | vt 0.660451 0.076084 811 | vt 0.621440 0.048089 812 | vt 0.376796 0.075296 813 | vt 0.388827 0.021586 814 | vt 0.411318 0.015131 815 | vt 0.416419 0.047631 816 | vt 0.567460 0.000144 817 | vt 0.577206 0.032801 818 | vt 0.470636 0.000144 819 | vt 0.460782 0.032656 820 | vt 0.518922 0.024886 821 | vt 0.547413 0.041724 822 | vt 0.490511 0.041669 823 | vt 0.558059 0.053871 824 | vt 0.479842 0.053785 825 | vt 0.576951 0.057998 826 | vt 0.460920 0.057845 827 | vt 0.611687 0.078268 828 | vt 0.425932 0.077985 829 | vt 0.626663 0.111357 830 | vt 0.410618 0.111244 831 | vt 0.629482 0.130456 832 | vt 0.623495 0.146796 833 | vt 0.413741 0.147158 834 | vt 0.407648 0.130594 835 | vt 0.619303 0.159841 836 | vt 0.418035 0.160361 837 | vt 0.945900 0.079569 838 | vt 0.886245 0.121777 839 | vt 0.849114 0.099732 840 | vt 0.891780 0.036916 841 | vt 0.183115 0.092127 842 | vt 0.141314 0.112482 843 | vt 0.078961 0.060719 844 | vt 0.142277 0.021467 845 | vt 0.788458 0.080826 846 | vt 0.805584 0.010786 847 | vt 0.246353 0.076510 848 | vt 0.232648 0.003484 849 | vt 0.687018 0.077204 850 | vt 0.672384 0.022201 851 | vt 0.349875 0.075955 852 | vt 0.365979 0.020991 853 | vt 0.760215 0.193244 854 | vt 0.789046 0.233323 855 | vt 0.271553 0.193871 856 | vt 0.241255 0.236977 857 | vt 0.994525 0.167705 858 | vt 0.909112 0.183261 859 | vt 0.107928 0.179083 860 | vt 0.011829 0.155367 861 | vt 0.911671 0.402429 862 | vt 0.862868 0.338556 863 | vt 0.894128 0.301884 864 | vt 0.962901 0.344752 865 | vt 0.123776 0.315519 866 | vt 0.160557 0.356821 867 | vt 0.106400 0.432652 868 | vt 0.043968 0.367038 869 | vt 0.915360 0.259804 870 | vt 0.999856 0.254640 871 | vt 0.098965 0.266968 872 | vt 0.000144 0.259113 873 | vt 0.749542 0.334683 874 | vt 0.766337 0.300809 875 | vt 0.789162 0.313727 876 | vt 0.267408 0.310142 877 | vt 0.288183 0.346496 878 | vt 0.242992 0.325552 879 | vt 0.815314 0.276388 880 | vt 0.846174 0.293397 881 | vt 0.213065 0.285164 882 | vt 0.178537 0.304983 883 | vt 0.845007 0.256352 884 | vt 0.873517 0.265922 885 | vt 0.179662 0.263312 886 | vt 0.147089 0.274284 887 | vt 0.859075 0.228168 888 | vt 0.886999 0.233769 889 | vt 0.162803 0.231720 890 | vt 0.131514 0.237587 891 | vt 0.842355 0.195160 892 | vt 0.875030 0.184705 893 | vt 0.145224 0.182749 894 | vt 0.176788 0.196179 895 | vt 0.794286 0.364062 896 | vt 0.239776 0.382592 897 | vt 0.770185 0.379538 898 | vt 0.268122 0.398737 899 | vt 0.845499 0.449967 900 | vt 0.185281 0.484099 901 | vt 0.815858 0.445381 902 | vt 0.770572 0.444261 903 | vt 0.755700 0.418603 904 | vt 0.287033 0.442912 905 | vt 0.271364 0.473316 906 | vt 0.219260 0.477186 907 | vt 0.819845 0.468071 908 | vt 0.215894 0.503605 909 | vt 0.809631 0.233887 910 | vt 0.219168 0.237388 911 | vt 0.829287 0.219562 912 | vt 0.199067 0.222464 913 | vt 0.786480 0.117591 914 | vt 0.715482 0.139727 915 | vt 0.246666 0.114850 916 | vt 0.319538 0.139409 917 | vt 0.785486 0.152330 918 | vt 0.245969 0.151002 919 | vt 0.837382 0.156361 920 | vt 0.858171 0.137775 921 | vt 0.171653 0.132294 922 | vt 0.196622 0.155241 923 | vt 0.506166 0.904851 924 | vt 0.432388 0.894943 925 | vt 0.438797 0.870229 926 | vt 0.491058 0.881714 927 | vt 0.315867 0.868209 928 | vt 0.321637 0.893225 929 | vt 0.247207 0.901159 930 | vt 0.263032 0.878321 931 | vt 0.572792 0.860484 932 | vt 0.604825 0.879946 933 | vt 0.181486 0.854693 934 | vt 0.148729 0.873349 935 | vt 0.586396 0.793977 936 | vt 0.619962 0.791615 937 | vt 0.169745 0.787474 938 | vt 0.136063 0.784093 939 | vt 0.549027 0.746412 940 | vt 0.563786 0.739211 941 | vt 0.208656 0.740879 942 | vt 0.194086 0.733241 943 | vt 0.500314 0.711729 944 | vt 0.508270 0.697693 945 | vt 0.258399 0.707497 946 | vt 0.250811 0.693249 947 | vt 0.438641 0.680683 948 | vt 0.434803 0.658882 949 | vt 0.320962 0.677959 950 | vt 0.325318 0.656224 951 | vt 0.505666 0.730944 952 | vt 0.452955 0.700023 953 | vt 0.306136 0.696976 954 | vt 0.252524 0.726592 955 | vt 0.542850 0.755753 956 | vt 0.214575 0.750414 957 | vt 0.568148 0.787367 958 | vt 0.188269 0.781375 959 | vt 0.555495 0.826352 960 | vt 0.199850 0.820889 961 | vt 0.501231 0.844356 962 | vt 0.253846 0.840502 963 | vt 0.457832 0.840040 964 | vt 0.297562 0.837358 965 | vt 0.796021 0.176969 966 | vt 0.783193 0.187449 967 | vt 0.233625 0.175620 968 | vt 0.246955 0.187075 969 | vt 0.391039 0.611891 970 | vt 0.394766 0.686125 971 | vt 0.369913 0.610196 972 | vt 0.364838 0.684445 973 | vt 0.391747 0.862097 974 | vt 0.401605 0.841460 975 | vt 0.354026 0.840297 976 | vt 0.363377 0.861308 977 | vt 0.435018 0.718280 978 | vt 0.323658 0.715731 979 | vt 0.433669 0.729661 980 | vt 0.384658 0.710299 981 | vt 0.374400 0.708969 982 | vt 0.324726 0.727177 983 | vt 0.410995 0.747662 984 | vt 0.427812 0.742828 985 | vt 0.347028 0.745816 986 | vt 0.330270 0.740536 987 | vt 0.418086 0.784946 988 | vt 0.384657 0.795423 989 | vt 0.372270 0.794472 990 | vt 0.338952 0.783073 991 | vt 0.431333 0.817535 992 | vt 0.324790 0.815460 993 | vt 0.816266 0.203086 994 | vt 0.825107 0.209762 995 | vt 0.199767 0.214827 996 | vt 0.209828 0.206161 997 | vt 0.802192 0.184609 998 | vt 0.226485 0.183086 999 | vt 0.448505 0.804621 1000 | vt 0.473386 0.824700 1001 | vt 0.307886 0.802031 1002 | vt 0.282357 0.821525 1003 | vt 0.435868 0.779569 1004 | vt 0.321237 0.777208 1005 | vt 0.423718 0.754191 1006 | vt 0.334089 0.752045 1007 | vt 0.437950 0.749777 1008 | vt 0.319919 0.747250 1009 | vt 0.445392 0.731997 1010 | vt 0.312907 0.729222 1011 | vt 0.440995 0.724383 1012 | vt 0.317510 0.721697 1013 | vt 0.455277 0.713731 1014 | vt 0.303460 0.710657 1015 | vt 0.512485 0.828811 1016 | vt 0.242975 0.824574 1017 | vt 0.550942 0.811814 1018 | vt 0.204839 0.806417 1019 | vt 0.552139 0.787682 1020 | vt 0.204331 0.782156 1021 | vt 0.539407 0.764539 1022 | vt 0.217774 0.759319 1023 | vt 0.508439 0.743135 1024 | vt 0.249419 0.738732 1025 | vt 0.470841 0.748408 1026 | vt 0.454776 0.761665 1027 | vt 0.286960 0.745020 1028 | vt 0.302729 0.758742 1029 | vt 0.488870 0.770464 1030 | vt 0.475403 0.783904 1031 | vt 0.268291 0.766661 1032 | vt 0.281439 0.780511 1033 | vt 0.503673 0.787562 1034 | vt 0.494476 0.802470 1035 | vt 0.252972 0.783410 1036 | vt 0.261790 0.798626 1037 | vt 0.518562 0.791602 1038 | vt 0.516802 0.807339 1039 | vt 0.237920 0.787045 1040 | vt 0.239243 0.802891 1041 | vt 0.484068 0.628776 1042 | vt 0.543385 0.683538 1043 | vt 0.276936 0.625067 1044 | vt 0.216123 0.678120 1045 | vt 0.581052 0.726933 1046 | vt 0.177176 0.720426 1047 | vt 0.616701 0.759965 1048 | vt 0.140379 0.752377 1049 | vt 0.707492 0.759884 1050 | vt 0.660647 0.741167 1051 | vt 0.049526 0.748824 1052 | vt 0.097038 0.732052 1053 | vt 0.745511 0.652100 1054 | vt 0.677256 0.670436 1055 | vt 0.019409 0.639749 1056 | vt 0.083564 0.662038 1057 | vt 0.740843 0.572428 1058 | vt 0.671403 0.592656 1059 | vt 0.033664 0.564403 1060 | vt 0.092820 0.589862 1061 | vt 0.834578 0.206879 1062 | vt 0.834705 0.206959 1063 | vt 0.051216 0.522659 1064 | vt 0.145041 0.562595 1065 | vt 0.620420 0.565675 1066 | vt 0.498072 0.552315 1067 | vt 0.264218 0.550140 1068 | vn 0.6650 0.2397 0.7074 1069 | vn -0.6650 0.2397 0.7074 1070 | vn 0.8294 0.0136 0.5585 1071 | vn -0.8294 0.0136 0.5585 1072 | vn 0.4155 -0.4045 0.8147 1073 | vn -0.4155 -0.4045 0.8147 1074 | vn 0.3599 0.0204 0.9327 1075 | vn -0.3599 0.0204 0.9327 1076 | vn -0.0787 0.0270 0.9965 1077 | vn 0.0787 0.0270 0.9965 1078 | vn -0.2696 -0.4308 0.8612 1079 | vn 0.2696 -0.4308 0.8612 1080 | vn -0.7707 0.0286 0.6366 1081 | vn 0.7707 0.0286 0.6366 1082 | vn -0.4689 0.3254 0.8211 1083 | vn 0.4689 0.3254 0.8211 1084 | vn -0.4767 0.6412 0.6013 1085 | vn 0.4767 0.6412 0.6013 1086 | vn -0.7672 0.5808 0.2721 1087 | vn 0.7672 0.5808 0.2721 1088 | vn -0.2519 0.9672 -0.0327 1089 | vn 0.2519 0.9672 -0.0327 1090 | vn -0.0949 0.9307 0.3533 1091 | vn 0.0949 0.9307 0.3533 1092 | vn 0.3667 0.8718 0.3248 1093 | vn -0.3667 0.8718 0.3248 1094 | vn 0.4141 0.9098 -0.0278 1095 | vn -0.4141 0.9098 -0.0278 1096 | vn 0.8277 0.5128 0.2277 1097 | vn -0.8277 0.5128 0.2277 1098 | vn 0.6713 0.5655 0.4791 1099 | vn -0.6713 0.5655 0.4791 1100 | vn 0.8111 -0.0063 -0.5849 1101 | vn -0.8111 -0.0063 -0.5849 1102 | vn 0.2052 0.3772 -0.9031 1103 | vn -0.2052 0.3772 -0.9031 1104 | vn -0.4223 0.3851 -0.8206 1105 | vn 0.4223 0.3851 -0.8206 1106 | vn -0.8241 0.0038 -0.5665 1107 | vn 0.8241 0.0038 -0.5665 1108 | vn -0.8137 -0.5502 -0.1875 1109 | vn 0.8137 -0.5502 -0.1875 1110 | vn -0.4223 -0.9045 0.0595 1111 | vn 0.4223 -0.9045 0.0595 1112 | vn 0.2052 -0.9785 0.0220 1113 | vn -0.2052 -0.9785 0.0220 1114 | vn 0.7995 -0.5647 -0.2048 1115 | vn -0.7995 -0.5647 -0.2048 1116 | vn 0.4000 0.4639 0.7904 1117 | vn -0.4000 0.4639 0.7904 1118 | vn 0.3069 0.3824 0.8715 1119 | vn -0.3069 0.3824 0.8715 1120 | vn 0.0945 0.4000 0.9116 1121 | vn -0.0945 0.4000 0.9116 1122 | vn -0.0624 0.5389 0.8400 1123 | vn 0.0624 0.5389 0.8400 1124 | vn -0.0624 0.5838 0.8095 1125 | vn 0.0624 0.5838 0.8095 1126 | vn 0.0996 0.6952 0.7119 1127 | vn -0.0996 0.6952 0.7119 1128 | vn 0.3036 0.6657 0.6817 1129 | vn -0.3036 0.6657 0.6817 1130 | vn 0.4002 0.5628 0.7233 1131 | vn -0.4002 0.5628 0.7233 1132 | vn 0.1231 -0.4342 0.8924 1133 | vn -0.1231 -0.4342 0.8924 1134 | vn 0.2190 -0.4595 0.8608 1135 | vn -0.2190 -0.4595 0.8608 1136 | vn 0.5902 -0.0000 0.8073 1137 | vn -0.5902 -0.0000 0.8073 1138 | vn 0.7689 0.3175 0.5550 1139 | vn -0.7689 0.3175 0.5550 1140 | vn 0.7796 0.4236 0.4612 1141 | vn -0.7796 0.4236 0.4612 1142 | vn 0.3241 -0.4092 0.8529 1143 | vn -0.3241 -0.4092 0.8529 1144 | vn 0.3857 -0.1858 0.9037 1145 | vn -0.3857 -0.1858 0.9037 1146 | vn 0.6895 -0.0134 0.7242 1147 | vn -0.6895 -0.0134 0.7242 1148 | vn 0.6588 0.0711 0.7490 1149 | vn -0.6588 0.0711 0.7490 1150 | vn 0.5465 0.7295 0.4113 1151 | vn -0.5465 0.7295 0.4113 1152 | vn 0.5064 0.8556 0.1070 1153 | vn -0.5064 0.8556 0.1070 1154 | vn 0.6092 0.7659 0.2056 1155 | vn -0.6092 0.7659 0.2056 1156 | vn -0.0441 0.9682 0.2462 1157 | vn 0.0441 0.9682 0.2462 1158 | vn -0.7246 0.6077 0.3250 1159 | vn 0.7246 0.6077 0.3250 1160 | vn -0.5880 0.7902 0.1727 1161 | vn 0.5880 0.7902 0.1727 1162 | vn 0.5361 0.0989 0.8384 1163 | vn -0.5361 0.0989 0.8384 1164 | vn 0.2207 0.0947 0.9707 1165 | vn -0.2207 0.0947 0.9707 1166 | vn -0.0794 0.0356 0.9962 1167 | vn 0.0794 0.0356 0.9962 1168 | vn -0.0825 -0.1209 0.9892 1169 | vn 0.0825 -0.1209 0.9892 1170 | vn 0.0457 -0.0044 0.9989 1171 | vn -0.0457 -0.0044 0.9989 1172 | vn 0.2784 0.3519 0.8937 1173 | vn -0.2784 0.3519 0.8937 1174 | vn 0.3813 0.3602 0.8514 1175 | vn -0.3813 0.3602 0.8514 1176 | vn 0.3357 0.2678 0.9031 1177 | vn -0.3357 0.2678 0.9031 1178 | vn 0.3762 0.5709 0.7297 1179 | vn -0.3762 0.5709 0.7297 1180 | vn -0.1352 0.7590 0.6369 1181 | vn 0.1352 0.7590 0.6369 1182 | vn 0.3961 0.0998 0.9128 1183 | vn -0.3961 0.0998 0.9128 1184 | vn 0.1856 0.3317 0.9250 1185 | vn -0.1856 0.3317 0.9250 1186 | vn 0.0099 0.3919 0.9200 1187 | vn -0.0099 0.3919 0.9200 1188 | vn 0.0721 -0.1731 0.9823 1189 | vn -0.0721 -0.1731 0.9823 1190 | vn 0.1863 -0.0226 0.9822 1191 | vn -0.1863 -0.0226 0.9822 1192 | vn 0.3157 0.2889 0.9038 1193 | vn -0.3157 0.2889 0.9038 1194 | vn 0.3063 0.5145 0.8009 1195 | vn -0.3063 0.5145 0.8009 1196 | vn 0.3266 0.4198 0.8469 1197 | vn -0.3266 0.4198 0.8469 1198 | vn -0.0137 0.6101 0.7922 1199 | vn 0.0137 0.6101 0.7922 1200 | vn -0.0026 0.5082 0.8612 1201 | vn 0.0026 0.5082 0.8612 1202 | vn 0.0000 0.5637 0.8260 1203 | vn 0.8174 -0.4993 0.2873 1204 | vn -0.8174 -0.4993 0.2873 1205 | vn 0.9494 0.0689 -0.3065 1206 | vn -0.9494 0.0689 -0.3065 1207 | vn 0.0825 0.5170 -0.8520 1208 | vn -0.0825 0.5170 -0.8520 1209 | vn -0.8836 0.4654 0.0513 1210 | vn 0.8836 0.4654 0.0513 1211 | vn 0.4207 -0.6016 0.6791 1212 | vn -0.4207 -0.6016 0.6791 1213 | vn 0.2873 -0.0428 0.9569 1214 | vn -0.2873 -0.0428 0.9569 1215 | vn -0.6542 0.7553 0.0390 1216 | vn 0.6542 0.7553 0.0390 1217 | vn 0.1052 0.9929 0.0549 1218 | vn -0.1052 0.9929 0.0549 1219 | vn 0.7582 0.5696 0.3174 1220 | vn -0.7582 0.5696 0.3174 1221 | vn 0.3889 -0.2601 0.8838 1222 | vn -0.3889 -0.2601 0.8838 1223 | vn 0.0463 0.7389 0.6723 1224 | vn -0.0463 0.7389 0.6723 1225 | vn 0.0335 0.1840 0.9824 1226 | vn -0.0335 0.1840 0.9824 1227 | vn -0.4452 0.3635 0.8183 1228 | vn 0.4452 0.3635 0.8183 1229 | vn -0.2182 0.1315 0.9670 1230 | vn 0.2182 0.1315 0.9670 1231 | vn 0.4341 0.3960 0.8092 1232 | vn -0.4341 0.3960 0.8092 1233 | vn 0.3008 0.5782 0.7584 1234 | vn -0.3008 0.5782 0.7584 1235 | vn 0.8123 0.5302 0.2430 1236 | vn -0.8123 0.5302 0.2430 1237 | vn 0.8753 0.4434 0.1930 1238 | vn -0.8753 0.4434 0.1930 1239 | vn 0.9385 0.3047 0.1625 1240 | vn -0.9385 0.3047 0.1625 1241 | vn 0.2237 -0.1328 0.9656 1242 | vn -0.2237 -0.1328 0.9656 1243 | vn -0.1536 0.3805 0.9119 1244 | vn 0.1536 0.3805 0.9119 1245 | vn -0.2733 0.4545 0.8478 1246 | vn 0.2733 0.4545 0.8478 1247 | vn -0.0976 0.7113 0.6961 1248 | vn 0.0976 0.7113 0.6961 1249 | vn -0.1582 0.9371 -0.3111 1250 | vn 0.1582 0.9371 -0.3111 1251 | vn -0.6934 0.6598 -0.2895 1252 | vn 0.6934 0.6598 -0.2895 1253 | vn -1.0000 0.0000 0.0000 1254 | vn 1.0000 0.0000 0.0000 1255 | vn 0.3051 -0.7140 0.6302 1256 | vn -0.3051 -0.7140 0.6302 1257 | vn 0.0298 0.2915 0.9561 1258 | vn -0.0298 0.2915 0.9561 1259 | vn 0.1353 0.2356 0.9624 1260 | vn -0.1353 0.2356 0.9624 1261 | vn -0.5085 0.2323 0.8291 1262 | vn 0.5085 0.2323 0.8291 1263 | vn -0.3843 0.4852 0.7854 1264 | vn 0.3843 0.4852 0.7854 1265 | vn -0.2083 0.5818 0.7862 1266 | vn 0.2083 0.5818 0.7862 1267 | vn -0.5721 -0.0176 0.8200 1268 | vn 0.5721 -0.0176 0.8200 1269 | vn -0.1369 -0.2593 0.9560 1270 | vn 0.1369 -0.2593 0.9560 1271 | vn 0.4088 -0.1174 0.9050 1272 | vn -0.4088 -0.1174 0.9050 1273 | vn 0.5740 0.0574 0.8168 1274 | vn -0.5740 0.0574 0.8168 1275 | vn 0.5665 0.3813 0.7305 1276 | vn -0.5665 0.3813 0.7305 1277 | vn 0.5703 0.5557 0.6049 1278 | vn -0.5703 0.5557 0.6049 1279 | vn 0.4823 0.8430 0.2381 1280 | vn -0.4823 0.8430 0.2381 1281 | vn 0.2604 0.9262 0.2726 1282 | vn -0.2604 0.9262 0.2726 1283 | vn 0.1640 0.8155 0.5551 1284 | vn -0.1640 0.8155 0.5551 1285 | vn -0.0178 0.7518 0.6591 1286 | vn 0.0178 0.7518 0.6591 1287 | vn 0.3273 0.1339 0.9354 1288 | vn -0.3273 0.1339 0.9354 1289 | vn 0.2811 0.3050 0.9099 1290 | vn -0.2811 0.3050 0.9099 1291 | vn -0.2542 -0.1351 0.9577 1292 | vn 0.2542 -0.1351 0.9577 1293 | vn -0.0260 -0.3978 0.9171 1294 | vn 0.0260 -0.3978 0.9171 1295 | vn -0.3518 0.2915 0.8895 1296 | vn 0.3518 0.2915 0.8895 1297 | vn -0.3523 0.5184 0.7792 1298 | vn 0.3523 0.5184 0.7792 1299 | vn -0.1317 0.8753 0.4653 1300 | vn 0.1317 0.8753 0.4653 1301 | vn -0.0342 0.9524 0.3029 1302 | vn 0.0342 0.9524 0.3029 1303 | vn 0.3603 0.8923 0.2721 1304 | vn -0.3603 0.8923 0.2721 1305 | vn 0.4988 0.8243 0.2678 1306 | vn -0.4988 0.8243 0.2678 1307 | vn 0.6667 0.1004 0.7386 1308 | vn -0.6667 0.1004 0.7386 1309 | vn 0.8165 0.2624 0.5143 1310 | vn -0.8165 0.2624 0.5143 1311 | vn 0.7840 0.4397 0.4382 1312 | vn -0.7840 0.4397 0.4382 1313 | vn -0.5306 0.5312 -0.6605 1314 | vn 0.5306 0.5312 -0.6605 1315 | vn -0.8511 0.0950 -0.5163 1316 | vn 0.8511 0.0950 -0.5163 1317 | vn -0.2446 0.4724 -0.8467 1318 | vn 0.2446 0.4724 -0.8467 1319 | vn 0.5924 0.4458 -0.6711 1320 | vn -0.5924 0.4458 -0.6711 1321 | vn 0.3685 0.5477 -0.7512 1322 | vn -0.3685 0.5477 -0.7512 1323 | vn 0.2821 0.5936 -0.7537 1324 | vn -0.2821 0.5936 -0.7537 1325 | vn 0.8561 -0.1706 -0.4878 1326 | vn -0.8561 -0.1706 -0.4878 1327 | vn 0.5342 -0.8441 0.0462 1328 | vn -0.5342 -0.8441 0.0462 1329 | vn 0.3849 -0.9178 0.0975 1330 | vn -0.3849 -0.9178 0.0975 1331 | vn 0.2335 -0.9192 -0.3171 1332 | vn -0.2335 -0.9192 -0.3171 1333 | vn 0.2449 -0.5937 -0.7665 1334 | vn -0.2449 -0.5937 -0.7665 1335 | vn 0.1163 -0.8726 -0.4743 1336 | vn -0.1163 -0.8726 -0.4743 1337 | vn 0.1152 -0.8907 0.4397 1338 | vn -0.1152 -0.8907 0.4397 1339 | vn 0.1184 -0.9261 0.3584 1340 | vn -0.1184 -0.9261 0.3584 1341 | vn 0.9597 -0.1653 -0.2271 1342 | vn -0.9597 -0.1653 -0.2271 1343 | vn 0.9319 -0.0482 -0.3596 1344 | vn -0.9319 -0.0482 -0.3596 1345 | vn 0.1626 -0.5389 -0.8265 1346 | vn -0.1626 -0.5389 -0.8265 1347 | vn -0.0188 -0.7299 -0.6833 1348 | vn 0.0188 -0.7299 -0.6833 1349 | vn 0.7538 -0.5733 -0.3211 1350 | vn -0.7538 -0.5733 -0.3211 1351 | vn 0.9196 -0.0934 -0.3816 1352 | vn -0.9196 -0.0934 -0.3816 1353 | vn 0.9297 0.1487 -0.3368 1354 | vn -0.9297 0.1487 -0.3368 1355 | vn 0.9120 0.1476 -0.3827 1356 | vn -0.9120 0.1476 -0.3827 1357 | vn 0.9407 0.2415 -0.2383 1358 | vn -0.9407 0.2415 -0.2383 1359 | vn 0.1761 -0.9754 0.1326 1360 | vn -0.1761 -0.9754 0.1326 1361 | vn 0.3708 -0.8413 -0.3933 1362 | vn -0.3708 -0.8413 -0.3933 1363 | vn 0.3107 -0.9470 0.0820 1364 | vn -0.3107 -0.9470 0.0820 1365 | vn 0.2793 -0.8585 0.4300 1366 | vn -0.2793 -0.8585 0.4300 1367 | vn 0.3139 -0.8718 0.3761 1368 | vn -0.3139 -0.8718 0.3761 1369 | vn 0.9762 -0.2064 0.0672 1370 | vn -0.9762 -0.2064 0.0672 1371 | vn 0.8267 -0.2805 0.4877 1372 | vn -0.8267 -0.2805 0.4877 1373 | vn 0.3449 -0.6207 -0.7041 1374 | vn -0.3449 -0.6207 -0.7041 1375 | vn 0.1203 0.9293 -0.3491 1376 | vn -0.1203 0.9293 -0.3491 1377 | vn 0.1275 0.7005 -0.7022 1378 | vn -0.1275 0.7005 -0.7022 1379 | vn 0.3492 0.0831 -0.9334 1380 | vn -0.3492 0.0831 -0.9334 1381 | vn 0.4153 0.6602 -0.6259 1382 | vn -0.4153 0.6602 -0.6259 1383 | vn 0.1845 0.9680 0.1703 1384 | vn -0.1845 0.9680 0.1703 1385 | vn 0.6056 0.7344 -0.3065 1386 | vn -0.6056 0.7344 -0.3065 1387 | vn 0.7033 0.4465 -0.5532 1388 | vn -0.7033 0.4465 -0.5532 1389 | vn 0.6679 -0.2381 -0.7051 1390 | vn -0.6679 -0.2381 -0.7051 1391 | vn 0.4948 -0.0656 -0.8665 1392 | vn -0.4948 -0.0656 -0.8665 1393 | vn 0.6423 0.5169 -0.5659 1394 | vn -0.6423 0.5169 -0.5659 1395 | vn 0.7182 0.6469 -0.2563 1396 | vn -0.7182 0.6469 -0.2563 1397 | vn 0.7388 0.6350 0.2257 1398 | vn -0.7388 0.6350 0.2257 1399 | vn 0.3428 0.6759 -0.6524 1400 | vn -0.3428 0.6759 -0.6524 1401 | vn 0.2270 0.9176 0.3263 1402 | vn -0.2270 0.9176 0.3263 1403 | vn -0.1722 -0.4657 -0.8680 1404 | vn 0.1722 -0.4657 -0.8680 1405 | vn 0.0425 0.9820 -0.1842 1406 | vn -0.0425 0.9820 -0.1842 1407 | vn -0.1616 0.6990 0.6967 1408 | vn 0.1616 0.6990 0.6967 1409 | vn 0.9791 0.1902 -0.0713 1410 | vn -0.9791 0.1902 -0.0713 1411 | vn 0.9470 0.2494 0.2026 1412 | vn -0.9470 0.2494 0.2026 1413 | vn 0.9794 0.1201 -0.1620 1414 | vn -0.9794 0.1201 -0.1620 1415 | vn 0.9938 -0.0345 -0.1059 1416 | vn -0.9938 -0.0345 -0.1059 1417 | vn 0.7116 -0.5507 0.4364 1418 | vn -0.7116 -0.5507 0.4364 1419 | vn 0.3722 -0.7158 0.5909 1420 | vn -0.3722 -0.7158 0.5909 1421 | vn 0.4465 -0.5838 0.6781 1422 | vn -0.4465 -0.5838 0.6781 1423 | vn 0.6066 -0.4904 0.6258 1424 | vn -0.6066 -0.4904 0.6258 1425 | vn 0.7325 -0.3904 0.5577 1426 | vn -0.7325 -0.3904 0.5577 1427 | vn 0.2637 0.1093 0.9584 1428 | vn -0.2637 0.1093 0.9584 1429 | vn 0.5568 -0.6952 -0.4545 1430 | vn -0.5568 -0.6952 -0.4545 1431 | vn 0.5004 -0.6935 -0.5183 1432 | vn -0.5004 -0.6935 -0.5183 1433 | vn 0.3190 -0.9386 0.1314 1434 | vn -0.3190 -0.9386 0.1314 1435 | vn 0.7198 -0.6824 0.1275 1436 | vn -0.7198 -0.6824 0.1275 1437 | vn 0.4972 -0.7853 -0.3689 1438 | vn -0.4972 -0.7853 -0.3689 1439 | vn 0.3506 0.7968 0.4922 1440 | vn -0.3506 0.7968 0.4922 1441 | vn 0.4566 0.6337 0.6245 1442 | vn -0.4566 0.6337 0.6245 1443 | vn 0.2583 0.6284 0.7338 1444 | vn -0.2583 0.6284 0.7338 1445 | vn 0.2455 0.4783 0.8432 1446 | vn -0.2455 0.4783 0.8432 1447 | vn 0.4643 0.4486 0.7637 1448 | vn -0.4643 0.4486 0.7637 1449 | vn 0.6225 0.1549 0.7672 1450 | vn -0.6225 0.1549 0.7672 1451 | vn 0.4500 0.8840 0.1264 1452 | vn -0.4500 0.8840 0.1264 1453 | vn -0.2667 0.9616 -0.0649 1454 | vn 0.2667 0.9616 -0.0649 1455 | vn -0.8284 0.4774 0.2931 1456 | vn 0.8284 0.4774 0.2931 1457 | vn -0.5251 0.1410 0.8393 1458 | vn 0.5251 0.1410 0.8393 1459 | vn 0.4546 -0.0806 0.8870 1460 | vn -0.4546 -0.0806 0.8870 1461 | vn 0.6996 -0.0585 0.7121 1462 | vn -0.6996 -0.0585 0.7121 1463 | vn 0.7220 -0.6274 0.2917 1464 | vn -0.7220 -0.6274 0.2917 1465 | vn -0.1919 0.7654 0.6143 1466 | vn 0.1919 0.7654 0.6143 1467 | vn 0.9048 -0.4238 0.0413 1468 | vn -0.9048 -0.4238 0.0413 1469 | vn 0.1034 0.6819 0.7241 1470 | vn -0.1034 0.6819 0.7241 1471 | vn 0.0841 0.9687 -0.2336 1472 | vn -0.0841 0.9687 -0.2336 1473 | vn 0.6446 0.3551 0.6770 1474 | vn -0.6446 0.3551 0.6770 1475 | vn 0.4309 0.8244 0.3671 1476 | vn -0.4309 0.8244 0.3671 1477 | vn 0.8032 -0.2052 0.5592 1478 | vn -0.8032 -0.2052 0.5592 1479 | vn 0.5811 0.0544 0.8120 1480 | vn -0.5811 0.0544 0.8120 1481 | vn 0.5910 0.0290 0.8062 1482 | vn -0.5910 0.0290 0.8062 1483 | vn 0.9818 -0.1823 0.0528 1484 | vn -0.9818 -0.1823 0.0528 1485 | vn 0.9105 -0.3937 0.1265 1486 | vn -0.9105 -0.3937 0.1265 1487 | vn 0.9972 -0.0559 -0.0497 1488 | vn -0.9972 -0.0559 -0.0497 1489 | vn 0.7313 -0.4320 0.5278 1490 | vn -0.7313 -0.4320 0.5278 1491 | vn 0.7867 -0.4417 0.4313 1492 | vn -0.7867 -0.4417 0.4313 1493 | vn 0.7022 -0.5141 0.4925 1494 | vn -0.7022 -0.5141 0.4925 1495 | vn 0.1840 0.7820 -0.5955 1496 | vn -0.1840 0.7820 -0.5955 1497 | vn 0.9352 0.3450 -0.0800 1498 | vn -0.9352 0.3450 -0.0800 1499 | vn 0.6633 -0.5853 0.4663 1500 | vn -0.6633 -0.5853 0.4663 1501 | vn -0.0085 0.8668 -0.4986 1502 | vn 0.0085 0.8668 -0.4986 1503 | vn 0.6237 -0.3942 0.6750 1504 | vn -0.6237 -0.3942 0.6750 1505 | vn 0.2733 -0.5350 0.7994 1506 | vn -0.2733 -0.5350 0.7994 1507 | vn -0.8328 -0.5436 0.1047 1508 | vn 0.8328 -0.5436 0.1047 1509 | vn -0.8339 -0.0844 -0.5454 1510 | vn 0.8339 -0.0844 -0.5454 1511 | vn -0.5655 0.5051 -0.6520 1512 | vn 0.5655 0.5051 -0.6520 1513 | vn -0.0560 0.8607 -0.5060 1514 | vn 0.0560 0.8607 -0.5060 1515 | vn 0.1445 0.5760 0.8046 1516 | vn -0.1445 0.5760 0.8046 1517 | vn 0.3275 0.5846 0.7423 1518 | vn -0.3275 0.5846 0.7423 1519 | vn 0.3127 0.5544 0.7713 1520 | vn -0.3127 0.5544 0.7713 1521 | vn 0.1710 0.5777 0.7981 1522 | vn -0.1710 0.5777 0.7981 1523 | vn 0.3487 0.7386 0.5770 1524 | vn -0.3487 0.7386 0.5770 1525 | vn 0.4006 0.4877 0.7757 1526 | vn -0.4006 0.4877 0.7757 1527 | vn 0.2572 0.4938 0.8306 1528 | vn -0.2572 0.4938 0.8306 1529 | vn 0.0637 0.5537 0.8303 1530 | vn -0.0637 0.5537 0.8303 1531 | vn -0.3637 0.9253 0.1071 1532 | vn 0.3637 0.9253 0.1071 1533 | vn 0.6299 0.4666 0.6209 1534 | vn -0.6299 0.4666 0.6209 1535 | vn 0.4472 0.3260 0.8329 1536 | vn -0.4472 0.3260 0.8329 1537 | vn 0.5072 0.2938 0.8102 1538 | vn -0.5072 0.2938 0.8102 1539 | vn 0.5258 0.6725 0.5208 1540 | vn -0.5258 0.6725 0.5208 1541 | vn 0.2980 0.9065 0.2990 1542 | vn -0.2980 0.9065 0.2990 1543 | vn 0.0930 -0.8651 0.4929 1544 | vn -0.0930 -0.8651 0.4929 1545 | vn 0.5006 -0.7105 0.4945 1546 | vn -0.5006 -0.7105 0.4945 1547 | vn 0.9285 -0.0514 0.3677 1548 | vn -0.9285 -0.0514 0.3677 1549 | vn 0.8393 0.4267 -0.3369 1550 | vn -0.8393 0.4267 -0.3369 1551 | vn -0.2355 0.6278 -0.7419 1552 | vn 0.2355 0.6278 -0.7419 1553 | vn -0.4499 0.6575 -0.6043 1554 | vn 0.4499 0.6575 -0.6043 1555 | vn -0.5384 -0.4830 -0.6905 1556 | vn 0.5384 -0.4830 -0.6905 1557 | vn -0.1910 -0.5730 -0.7970 1558 | vn 0.1910 -0.5730 -0.7970 1559 | vn 0.4046 -0.4933 -0.7700 1560 | vn -0.4046 -0.4933 -0.7700 1561 | vn -0.7819 0.5258 -0.3350 1562 | vn 0.7819 0.5258 -0.3350 1563 | vn 0.5428 -0.6293 -0.5562 1564 | vn -0.5428 -0.6293 -0.5562 1565 | vn -0.2474 -0.9285 0.2770 1566 | vn 0.2474 -0.9285 0.2770 1567 | usemtl None 1568 | s off 1569 | f 47/1/1 1/2/1 3/3/1 45/4/1 1570 | f 4/5/2 2/6/2 48/7/2 46/8/2 1571 | f 45/4/3 3/3/3 5/9/3 43/10/3 1572 | f 6/11/4 4/5/4 46/8/4 44/12/4 1573 | f 3/3/5 9/13/5 7/14/5 5/9/5 1574 | f 8/15/6 10/16/6 4/5/6 6/11/6 1575 | f 1/2/7 11/17/7 9/13/7 3/3/7 1576 | f 10/16/8 12/18/8 2/6/8 4/5/8 1577 | f 11/17/9 13/19/9 15/20/9 9/13/9 1578 | f 16/21/10 14/22/10 12/18/10 10/16/10 1579 | f 9/13/11 15/20/11 17/23/11 7/14/11 1580 | f 18/24/12 16/21/12 10/16/12 8/15/12 1581 | f 15/20/13 21/25/13 19/26/13 17/23/13 1582 | f 20/27/14 22/28/14 16/21/14 18/24/14 1583 | f 13/19/15 23/29/15 21/25/15 15/20/15 1584 | f 22/28/16 24/30/16 14/22/16 16/21/16 1585 | f 23/29/17 25/31/17 27/32/17 21/25/17 1586 | f 28/33/18 26/34/18 24/30/18 22/28/18 1587 | f 21/25/19 27/32/19 29/35/19 19/26/19 1588 | f 30/36/20 28/33/20 22/28/20 20/27/20 1589 | f 27/32/21 33/37/21 31/38/21 29/35/21 1590 | f 32/39/22 34/40/22 28/33/22 30/36/22 1591 | f 25/31/23 35/41/23 33/37/23 27/32/23 1592 | f 34/40/24 36/42/24 26/34/24 28/33/24 1593 | f 35/41/25 37/43/25 39/44/25 33/37/25 1594 | f 40/45/26 38/46/26 36/42/26 34/40/26 1595 | f 33/37/27 39/44/27 41/47/27 31/38/27 1596 | f 42/48/28 40/45/28 34/40/28 32/39/28 1597 | f 39/44/29 45/4/29 43/10/29 41/47/29 1598 | f 44/12/30 46/8/30 40/45/30 42/48/30 1599 | f 37/43/31 47/1/31 45/4/31 39/44/31 1600 | f 46/8/32 48/7/32 38/46/32 40/45/32 1601 | f 47/1/33 37/43/33 51/49/33 49/50/33 1602 | f 52/51/34 38/46/34 48/7/34 50/52/34 1603 | f 37/43/35 35/41/35 53/53/35 51/49/35 1604 | f 54/54/36 36/42/36 38/46/36 52/51/36 1605 | f 35/41/37 25/31/37 55/55/37 53/53/37 1606 | f 56/56/38 26/34/38 36/42/38 54/54/38 1607 | f 25/31/39 23/29/39 57/57/39 55/55/39 1608 | f 58/58/40 24/30/40 26/34/40 56/56/40 1609 | f 23/29/41 13/19/41 59/59/41 57/57/41 1610 | f 60/60/42 14/22/42 24/30/42 58/58/42 1611 | f 13/19/43 11/17/43 63/61/43 59/59/43 1612 | f 64/62/44 12/18/44 14/22/44 60/60/44 1613 | f 11/17/45 1/2/45 65/63/45 63/61/45 1614 | f 66/64/46 2/6/46 12/18/46 64/62/46 1615 | f 1/2/47 47/1/47 49/50/47 65/63/47 1616 | f 50/52/48 48/7/48 2/6/48 66/64/48 1617 | f 61/65/49 65/63/49 49/50/49 1618 | f 50/52/50 66/64/50 62/66/50 1619 | f 63/61/51 65/63/51 61/65/51 1620 | f 62/66/52 66/64/52 64/62/52 1621 | f 61/65/53 59/59/53 63/61/53 1622 | f 64/62/54 60/60/54 62/66/54 1623 | f 61/65/55 57/57/55 59/59/55 1624 | f 60/60/56 58/58/56 62/66/56 1625 | f 61/65/57 55/55/57 57/57/57 1626 | f 58/58/58 56/56/58 62/66/58 1627 | f 61/65/59 53/53/59 55/55/59 1628 | f 56/56/60 54/54/60 62/66/60 1629 | f 61/65/61 51/49/61 53/53/61 1630 | f 54/54/62 52/51/62 62/66/62 1631 | f 61/65/63 49/50/63 51/49/63 1632 | f 52/51/64 50/52/64 62/66/64 1633 | f 89/67/65 174/68/65 176/69/65 91/70/65 1634 | f 176/69/66 175/71/66 90/72/66 91/70/66 1635 | f 87/73/67 172/74/67 174/68/67 89/67/67 1636 | f 175/71/68 173/75/68 88/76/68 90/72/68 1637 | f 85/77/69 170/78/69 172/74/69 87/73/69 1638 | f 173/75/70 171/79/70 86/80/70 88/76/70 1639 | f 83/81/71 168/82/71 170/78/71 85/77/71 1640 | f 171/79/72 169/83/72 84/84/72 86/80/72 1641 | f 81/85/73 166/86/73 168/82/73 83/81/73 1642 | f 169/83/74 167/87/74 82/88/74 84/84/74 1643 | f 79/89/75 92/90/75 146/91/75 164/92/75 1644 | f 147/93/76 93/94/76 80/95/76 165/96/76 1645 | f 92/90/77 94/97/77 148/98/77 146/91/77 1646 | f 149/99/78 95/100/78 93/94/78 147/93/78 1647 | f 94/97/79 96/101/79 150/102/79 148/98/79 1648 | f 151/103/80 97/104/80 95/100/80 149/99/80 1649 | f 96/101/81 98/105/81 152/106/81 150/102/81 1650 | f 153/107/82 99/108/82 97/104/82 151/103/82 1651 | f 98/105/83 100/109/83 154/110/83 152/106/83 1652 | f 155/111/84 101/112/84 99/108/84 153/107/84 1653 | f 100/109/85 102/113/85 156/114/85 154/110/85 1654 | f 157/115/86 103/116/86 101/112/86 155/111/86 1655 | f 102/113/87 104/117/87 158/118/87 156/114/87 1656 | f 159/119/88 105/120/88 103/116/88 157/115/88 1657 | f 104/117/89 106/121/89 160/122/89 158/118/89 1658 | f 161/123/90 107/124/90 105/120/90 159/119/90 1659 | f 106/121/91 108/125/91 162/126/91 160/122/91 1660 | f 163/127/92 109/128/92 107/124/92 161/123/92 1661 | f 108/125/93 67/129/93 68/130/93 162/126/93 1662 | f 68/130/94 67/129/94 109/128/94 163/127/94 1663 | f 110/131/95 128/132/95 160/122/95 162/126/95 1664 | f 161/123/96 129/133/96 111/134/96 163/127/96 1665 | f 128/132/97 179/135/97 158/118/97 160/122/97 1666 | f 159/119/98 180/136/98 129/133/98 161/123/98 1667 | f 126/137/99 156/114/99 158/118/99 179/135/99 1668 | f 159/119/100 157/115/100 127/138/100 180/136/100 1669 | f 124/139/101 154/110/101 156/114/101 126/137/101 1670 | f 157/115/102 155/111/102 125/140/102 127/138/102 1671 | f 122/141/103 152/106/103 154/110/103 124/139/103 1672 | f 155/111/104 153/107/104 123/142/104 125/140/104 1673 | f 120/143/105 150/102/105 152/106/105 122/141/105 1674 | f 153/107/106 151/103/106 121/144/106 123/142/106 1675 | f 118/145/107 148/98/107 150/102/107 120/143/107 1676 | f 151/103/108 149/99/108 119/146/108 121/144/108 1677 | f 116/147/109 146/91/109 148/98/109 118/145/109 1678 | f 149/99/110 147/93/110 117/148/110 119/146/110 1679 | f 114/149/111 164/92/111 146/91/111 116/147/111 1680 | f 147/93/112 165/96/112 115/150/112 117/148/112 1681 | f 114/149/113 181/151/113 177/152/113 164/92/113 1682 | f 177/152/114 182/153/114 115/150/114 165/96/114 1683 | f 110/131/115 162/126/115 68/130/115 112/154/115 1684 | f 68/130/116 163/127/116 111/134/116 113/155/116 1685 | f 112/154/117 68/130/117 178/156/117 183/157/117 1686 | f 178/156/118 68/130/118 113/155/118 184/158/118 1687 | f 177/152/119 181/151/119 183/157/119 178/156/119 1688 | f 184/158/120 182/153/120 177/152/120 178/156/120 1689 | f 135/159/121 137/160/121 176/69/121 174/68/121 1690 | f 176/69/122 137/160/122 136/161/122 175/71/122 1691 | f 133/162/123 135/159/123 174/68/123 172/74/123 1692 | f 175/71/124 136/161/124 134/163/124 173/75/124 1693 | f 131/164/125 133/162/125 172/74/125 170/78/125 1694 | f 173/75/126 134/163/126 132/165/126 171/79/126 1695 | f 166/86/127 187/166/127 185/167/127 168/82/127 1696 | f 186/168/128 188/169/128 167/87/128 169/83/128 1697 | f 131/164/129 170/78/129 168/82/129 185/167/129 1698 | f 169/83/130 171/79/130 132/165/130 186/168/130 1699 | f 144/170/131 190/171/131 189/172/131 187/166/131 1700 | f 189/172/132 190/171/132 145/173/132 188/169/132 1701 | f 185/167/133 187/166/133 189/172/133 69/174/133 1702 | f 189/172/134 188/169/134 186/168/134 69/174/134 1703 | f 130/175/135 131/164/135 185/167/135 69/174/135 1704 | f 186/168/135 132/165/135 130/175/135 69/174/135 1705 | f 142/176/136 193/177/136 191/178/136 144/170/136 1706 | f 192/179/137 194/180/137 143/181/137 145/173/137 1707 | f 140/182/138 195/183/138 193/177/138 142/176/138 1708 | f 194/180/139 196/184/139 141/185/139 143/181/139 1709 | f 139/186/140 197/187/140 195/183/140 140/182/140 1710 | f 196/184/141 198/188/141 139/186/141 141/185/141 1711 | f 138/189/142 71/190/142 197/187/142 139/186/142 1712 | f 198/188/143 71/190/143 138/189/143 139/186/143 1713 | f 190/171/144 144/170/144 191/178/144 70/191/144 1714 | f 192/179/145 145/173/145 190/171/145 70/191/145 1715 | f 70/191/146 191/178/146 206/192/146 208/193/146 1716 | f 207/194/147 192/179/147 70/191/147 208/193/147 1717 | f 71/190/148 199/195/148 200/196/148 197/187/148 1718 | f 201/197/149 199/195/149 71/190/149 198/188/149 1719 | f 197/187/150 200/196/150 202/198/150 195/183/150 1720 | f 203/199/151 201/197/151 198/188/151 196/184/151 1721 | f 195/183/152 202/198/152 204/200/152 193/177/152 1722 | f 205/201/153 203/199/153 196/184/153 194/180/153 1723 | f 193/177/154 204/200/154 206/192/154 191/178/154 1724 | f 207/194/155 205/201/155 194/180/155 192/179/155 1725 | f 199/195/156 204/200/156 202/198/156 200/196/156 1726 | f 203/199/157 205/201/157 199/195/157 201/197/157 1727 | f 199/195/158 208/193/158 206/192/158 204/200/158 1728 | f 207/194/159 208/193/159 199/195/159 205/201/159 1729 | f 139/186/160 140/182/160 164/92/160 177/152/160 1730 | f 165/96/161 141/185/161 139/186/161 177/152/161 1731 | f 140/182/162 142/176/162 211/202/162 164/92/162 1732 | f 212/203/163 143/181/163 141/185/163 165/96/163 1733 | f 142/176/164 144/170/164 213/204/164 211/202/164 1734 | f 214/205/165 145/173/165 143/181/165 212/203/165 1735 | f 144/170/166 187/166/166 166/86/166 213/204/166 1736 | f 167/87/167 188/169/167 145/173/167 214/205/167 1737 | f 81/85/168 209/206/168 213/204/168 166/86/168 1738 | f 214/205/169 210/207/169 82/88/169 167/87/169 1739 | f 209/206/170 215/208/170 211/202/170 213/204/170 1740 | f 212/203/171 216/209/171 210/207/171 214/205/171 1741 | f 79/89/172 164/92/172 211/202/172 215/208/172 1742 | f 212/203/173 165/96/173 80/95/173 216/209/173 1743 | f 131/164/174 130/175/174 72/210/174 222/211/174 1744 | f 72/210/175 130/175/175 132/165/175 223/212/175 1745 | f 133/162/176 131/164/176 222/211/176 220/213/176 1746 | f 223/212/177 132/165/177 134/163/177 221/214/177 1747 | f 135/159/178 133/162/178 220/213/178 218/215/178 1748 | f 221/214/179 134/163/179 136/161/179 219/216/179 1749 | f 137/160/180 135/159/180 218/215/180 217/217/180 1750 | f 219/216/181 136/161/181 137/160/181 217/217/181 1751 | f 217/217/182 218/215/182 229/218/182 231/219/182 1752 | f 230/220/183 219/216/183 217/217/183 231/219/183 1753 | f 218/215/184 220/213/184 227/221/184 229/218/184 1754 | f 228/222/185 221/214/185 219/216/185 230/220/185 1755 | f 220/213/186 222/211/186 225/223/186 227/221/186 1756 | f 226/224/187 223/212/187 221/214/187 228/222/187 1757 | f 222/211/188 72/210/188 224/225/188 225/223/188 1758 | f 224/225/189 72/210/189 223/212/189 226/224/189 1759 | f 224/225/190 231/219/190 229/218/190 225/223/190 1760 | f 230/220/191 231/219/191 224/225/191 226/224/191 1761 | f 225/223/192 229/218/192 227/221/192 1762 | f 228/222/193 230/220/193 226/224/193 1763 | f 183/157/194 181/151/194 234/226/194 232/227/194 1764 | f 235/228/195 182/153/195 184/158/195 233/229/195 1765 | f 112/154/196 183/157/196 232/227/196 254/230/196 1766 | f 233/229/197 184/158/197 113/155/197 255/231/197 1767 | f 110/131/198 112/154/198 254/230/198 256/232/198 1768 | f 255/231/199 113/155/199 111/134/199 257/233/199 1769 | f 181/151/200 114/149/200 252/234/200 234/226/200 1770 | f 253/235/201 115/150/201 182/153/201 235/228/201 1771 | f 114/149/202 116/147/202 250/236/202 252/234/202 1772 | f 251/237/203 117/148/203 115/150/203 253/235/203 1773 | f 116/147/204 118/145/204 248/238/204 250/236/204 1774 | f 249/239/205 119/146/205 117/148/205 251/237/205 1775 | f 118/145/206 120/143/206 246/240/206 248/238/206 1776 | f 247/241/207 121/144/207 119/146/207 249/239/207 1777 | f 120/143/208 122/141/208 244/242/208 246/240/208 1778 | f 245/243/209 123/142/209 121/144/209 247/241/209 1779 | f 122/141/210 124/139/210 242/244/210 244/242/210 1780 | f 243/245/211 125/140/211 123/142/211 245/243/211 1781 | f 124/139/212 126/137/212 240/246/212 242/244/212 1782 | f 241/247/213 127/138/213 125/140/213 243/245/213 1783 | f 126/137/214 179/135/214 236/248/214 240/246/214 1784 | f 237/249/215 180/136/215 127/138/215 241/247/215 1785 | f 179/135/216 128/132/216 238/250/216 236/248/216 1786 | f 239/251/217 129/133/217 180/136/217 237/249/217 1787 | f 128/132/218 110/131/218 256/232/218 238/250/218 1788 | f 257/233/219 111/134/219 129/133/219 239/251/219 1789 | f 238/250/220 256/232/220 258/252/220 276/253/220 1790 | f 259/254/221 257/233/221 239/251/221 277/255/221 1791 | f 236/248/222 238/250/222 276/253/222 278/256/222 1792 | f 277/255/223 239/251/223 237/249/223 279/257/223 1793 | f 240/246/224 236/248/224 278/256/224 274/258/224 1794 | f 279/257/225 237/249/225 241/247/225 275/259/225 1795 | f 242/244/226 240/246/226 274/258/226 272/260/226 1796 | f 275/259/227 241/247/227 243/245/227 273/261/227 1797 | f 244/242/228 242/244/228 272/260/228 270/262/228 1798 | f 273/261/229 243/245/229 245/243/229 271/263/229 1799 | f 246/240/230 244/242/230 270/262/230 268/264/230 1800 | f 271/263/231 245/243/231 247/241/231 269/265/231 1801 | f 248/238/232 246/240/232 268/264/232 266/266/232 1802 | f 269/265/233 247/241/233 249/239/233 267/267/233 1803 | f 250/236/234 248/238/234 266/266/234 264/268/234 1804 | f 267/267/235 249/239/235 251/237/235 265/269/235 1805 | f 252/234/236 250/236/236 264/268/236 262/270/236 1806 | f 265/269/237 251/237/237 253/235/237 263/271/237 1807 | f 234/226/238 252/234/238 262/270/238 280/272/238 1808 | f 263/271/239 253/235/239 235/228/239 281/273/239 1809 | f 256/232/240 254/230/240 260/274/240 258/252/240 1810 | f 261/275/241 255/231/241 257/233/241 259/254/241 1811 | f 254/230/242 232/227/242 282/276/242 260/274/242 1812 | f 283/277/243 233/229/243 255/231/243 261/275/243 1813 | f 232/227/244 234/226/244 280/272/244 282/276/244 1814 | f 281/273/245 235/228/245 233/229/245 283/277/245 1815 | f 67/129/246 108/125/246 284/278/246 73/279/246 1816 | f 285/280/247 109/128/247 67/129/247 73/279/247 1817 | f 108/125/248 106/121/248 286/281/248 284/278/248 1818 | f 287/282/249 107/124/249 109/128/249 285/280/249 1819 | f 106/121/250 104/117/250 288/283/250 286/281/250 1820 | f 289/284/251 105/120/251 107/124/251 287/282/251 1821 | f 104/117/252 102/113/252 290/285/252 288/283/252 1822 | f 291/286/253 103/116/253 105/120/253 289/284/253 1823 | f 102/113/254 100/109/254 292/287/254 290/285/254 1824 | f 293/288/255 101/112/255 103/116/255 291/286/255 1825 | f 100/109/256 98/105/256 294/289/256 292/287/256 1826 | f 295/290/257 99/108/257 101/112/257 293/288/257 1827 | f 98/105/258 96/101/258 296/291/258 294/289/258 1828 | f 297/292/259 97/104/259 99/108/259 295/290/259 1829 | f 96/101/260 94/97/260 298/293/260 296/291/260 1830 | f 299/294/261 95/100/261 97/104/261 297/292/261 1831 | f 94/97/262 92/90/262 300/295/262 298/293/262 1832 | f 301/296/263 93/94/263 95/100/263 299/294/263 1833 | f 308/297/264 309/298/264 328/299/264 338/300/264 1834 | f 329/301/265 309/302/265 308/303/265 339/304/265 1835 | f 307/305/266 308/297/266 338/300/266 336/306/266 1836 | f 339/304/267 308/303/267 307/307/267 337/308/267 1837 | f 306/309/268 307/305/268 336/306/268 340/310/268 1838 | f 337/308/269 307/307/269 306/309/269 341/311/269 1839 | f 89/67/270 91/70/270 306/309/270 340/310/270 1840 | f 306/309/271 91/70/271 90/72/271 341/311/271 1841 | f 87/73/272 89/67/272 340/310/272 334/312/272 1842 | f 341/311/273 90/72/273 88/76/273 335/313/273 1843 | f 85/77/274 87/73/274 334/312/274 330/314/274 1844 | f 335/313/275 88/76/275 86/80/275 331/315/275 1845 | f 83/81/276 85/77/276 330/314/276 332/316/276 1846 | f 331/315/277 86/80/277 84/84/277 333/317/277 1847 | f 330/314/278 336/306/278 338/300/278 332/316/278 1848 | f 339/304/279 337/308/279 331/315/279 333/317/279 1849 | f 330/314/280 334/312/280 340/310/280 336/306/280 1850 | f 341/311/281 335/313/281 331/315/281 337/308/281 1851 | f 326/318/282 332/316/282 338/300/282 328/299/282 1852 | f 339/304/283 333/317/283 327/319/283 329/301/283 1853 | f 81/85/284 83/81/284 332/316/284 326/318/284 1854 | f 333/317/285 84/84/285 82/88/285 327/319/285 1855 | f 209/206/286 342/320/286 344/321/286 215/208/286 1856 | f 345/322/287 343/323/287 210/207/287 216/209/287 1857 | f 81/85/288 326/318/288 342/320/288 209/206/288 1858 | f 343/323/289 327/319/289 82/88/289 210/207/289 1859 | f 79/89/290 215/208/290 344/321/290 346/324/290 1860 | f 345/322/291 216/209/291 80/95/291 347/325/291 1861 | f 79/89/292 346/324/292 300/295/292 92/90/292 1862 | f 301/296/293 347/325/293 80/95/293 93/94/293 1863 | f 77/326/294 324/327/294 352/328/294 304/329/294 1864 | f 353/330/295 325/331/295 77/332/295 304/333/295 1865 | f 304/329/296 352/328/296 350/334/296 78/335/296 1866 | f 351/336/297 353/330/297 304/333/297 78/337/297 1867 | f 78/335/298 350/334/298 348/338/298 305/339/298 1868 | f 349/340/299 351/336/299 78/337/299 305/341/299 1869 | f 305/339/300 348/338/300 328/299/300 309/298/300 1870 | f 329/301/301 349/340/301 305/341/301 309/302/301 1871 | f 326/318/302 328/299/302 348/338/302 342/320/302 1872 | f 349/340/303 329/301/303 327/319/303 343/323/303 1873 | f 296/291/304 298/293/304 318/342/304 310/343/304 1874 | f 319/344/305 299/294/305 297/292/305 311/345/305 1875 | f 76/346/306 316/347/306 324/327/306 77/326/306 1876 | f 325/331/307 317/348/307 76/349/307 77/332/307 1877 | f 302/350/308 358/351/308 356/352/308 303/353/308 1878 | f 357/354/309 359/355/309 302/356/309 303/357/309 1879 | f 303/353/310 356/352/310 354/358/310 75/359/310 1880 | f 355/360/311 357/354/311 303/357/311 75/361/311 1881 | f 75/359/312 354/358/312 316/347/312 76/346/312 1882 | f 317/348/313 355/360/313 75/361/313 76/349/313 1883 | f 292/362/314 294/289/314 362/363/314 364/364/314 1884 | f 363/365/315 295/290/315 293/366/315 365/367/315 1885 | f 364/364/316 362/363/316 368/368/316 366/369/316 1886 | f 369/370/317 363/365/317 365/367/317 367/371/317 1887 | f 366/369/318 368/368/318 370/372/318 372/373/318 1888 | f 371/374/319 369/370/319 367/371/319 373/375/319 1889 | f 372/373/320 370/372/320 376/376/320 374/377/320 1890 | f 377/378/321 371/374/321 373/375/321 375/379/321 1891 | f 314/380/322 378/381/322 374/377/322 376/376/322 1892 | f 375/379/323 379/382/323 315/383/323 377/378/323 1893 | f 316/347/324 354/358/324 374/377/324 378/381/324 1894 | f 375/379/325 355/360/325 317/348/325 379/382/325 1895 | f 354/358/326 356/352/326 372/373/326 374/377/326 1896 | f 373/375/327 357/354/327 355/360/327 375/379/327 1897 | f 356/352/328 358/351/328 366/369/328 372/373/328 1898 | f 367/371/329 359/355/329 357/354/329 373/375/329 1899 | f 358/351/330 360/384/330 364/364/330 366/369/330 1900 | f 365/367/331 361/385/331 359/355/331 367/371/331 1901 | f 290/386/332 292/362/332 364/364/332 360/384/332 1902 | f 365/367/333 293/366/333 291/387/333 361/385/333 1903 | f 74/388/334 360/384/334 358/351/334 302/350/334 1904 | f 359/355/335 361/385/335 74/389/335 302/356/335 1905 | f 284/390/336 286/391/336 288/392/336 290/386/336 1906 | f 289/393/337 287/394/337 285/395/337 291/387/337 1907 | f 284/390/338 290/386/338 360/384/338 74/388/338 1908 | f 361/385/339 291/387/339 285/395/339 74/389/339 1909 | f 73/396/340 284/390/340 74/388/340 1910 | f 74/389/341 285/395/341 73/397/341 1911 | f 294/289/342 296/291/342 310/343/342 362/363/342 1912 | f 311/345/343 297/292/343 295/290/343 363/365/343 1913 | f 310/343/344 312/398/344 368/368/344 362/363/344 1914 | f 369/370/345 313/399/345 311/345/345 363/365/345 1915 | f 312/398/346 382/400/346 370/372/346 368/368/346 1916 | f 371/374/347 383/401/347 313/399/347 369/370/347 1917 | f 314/380/348 376/376/348 370/372/348 382/400/348 1918 | f 371/374/349 377/378/349 315/383/349 383/401/349 1919 | f 348/338/350 350/334/350 386/402/350 384/403/350 1920 | f 387/404/351 351/336/351 349/340/351 385/405/351 1921 | f 318/342/352 384/403/352 386/402/352 320/406/352 1922 | f 387/404/353 385/405/353 319/344/353 321/407/353 1923 | f 298/293/354 300/295/354 384/403/354 318/342/354 1924 | f 385/405/355 301/296/355 299/294/355 319/344/355 1925 | f 300/295/356 344/321/356 342/320/356 384/403/356 1926 | f 343/323/357 345/322/357 301/296/357 385/405/357 1927 | f 342/320/358 348/338/358 384/403/358 1928 | f 385/405/359 349/340/359 343/323/359 1929 | f 300/295/360 346/324/360 344/321/360 1930 | f 345/322/361 347/325/361 301/296/361 1931 | f 314/380/362 322/408/362 380/409/362 378/381/362 1932 | f 381/410/363 323/411/363 315/383/363 379/382/363 1933 | f 316/347/364 378/381/364 380/409/364 324/327/364 1934 | f 381/410/365 379/382/365 317/348/365 325/331/365 1935 | f 320/406/366 386/402/366 380/409/366 322/408/366 1936 | f 381/410/367 387/404/367 321/407/367 323/411/367 1937 | f 350/334/368 352/328/368 380/409/368 386/402/368 1938 | f 381/410/369 353/330/369 351/336/369 387/404/369 1939 | f 324/327/370 380/409/370 352/328/370 1940 | f 353/330/371 381/410/371 325/331/371 1941 | f 400/412/372 388/413/372 414/414/372 402/415/372 1942 | f 415/416/373 389/417/373 401/418/373 403/419/373 1943 | f 400/412/374 402/415/374 404/420/374 398/421/374 1944 | f 405/422/375 403/419/375 401/418/375 399/423/375 1945 | f 398/421/376 404/420/376 406/424/376 396/425/376 1946 | f 407/426/377 405/422/377 399/423/377 397/427/377 1947 | f 396/425/378 406/424/378 408/428/378 394/429/378 1948 | f 409/430/379 407/426/379 397/427/379 395/431/379 1949 | f 394/429/380 408/428/380 410/432/380 392/433/380 1950 | f 411/434/381 409/430/381 395/431/381 393/435/381 1951 | f 392/433/382 410/432/382 412/436/382 390/437/382 1952 | f 413/438/383 411/434/383 393/435/383 391/439/383 1953 | f 410/432/384 420/440/384 418/441/384 412/436/384 1954 | f 419/442/385 421/443/385 411/434/385 413/438/385 1955 | f 408/428/386 422/444/386 420/440/386 410/432/386 1956 | f 421/443/387 423/445/387 409/430/387 411/434/387 1957 | f 406/424/388 424/446/388 422/444/388 408/428/388 1958 | f 423/445/389 425/447/389 407/426/389 409/430/389 1959 | f 404/420/390 426/448/390 424/446/390 406/424/390 1960 | f 425/447/391 427/449/391 405/422/391 407/426/391 1961 | f 402/415/392 428/450/392 426/448/392 404/420/392 1962 | f 427/449/393 429/451/393 403/419/393 405/422/393 1963 | f 402/415/394 414/414/394 416/452/394 428/450/394 1964 | f 417/453/395 415/416/395 403/419/395 429/451/395 1965 | f 318/342/396 320/406/396 444/454/396 442/455/396 1966 | f 445/456/397 321/407/397 319/344/397 443/457/397 1967 | f 320/458/398 390/437/398 412/436/398 444/459/398 1968 | f 413/438/399 391/439/399 321/460/399 445/461/399 1969 | f 310/343/400 318/342/400 442/455/400 312/398/400 1970 | f 443/457/401 319/344/401 311/345/401 313/399/401 1971 | f 382/462/402 430/463/402 414/414/402 388/413/402 1972 | f 415/416/403 431/464/403 383/465/403 389/417/403 1973 | f 412/436/404 418/441/404 440/466/404 444/459/404 1974 | f 441/467/405 419/442/405 413/438/405 445/461/405 1975 | f 438/468/406 446/469/406 444/459/406 440/466/406 1976 | f 445/461/407 447/470/407 439/471/407 441/467/407 1977 | f 434/472/408 446/469/408 438/468/408 436/473/408 1978 | f 439/471/409 447/470/409 435/474/409 437/475/409 1979 | f 432/476/410 448/477/410 446/469/410 434/472/410 1980 | f 447/470/411 449/478/411 433/479/411 435/474/411 1981 | f 430/463/412 448/477/412 432/476/412 450/480/412 1982 | f 433/479/413 449/478/413 431/464/413 451/481/413 1983 | f 414/414/414 430/463/414 450/480/414 416/452/414 1984 | f 451/481/415 431/464/415 415/416/415 417/453/415 1985 | f 312/398/416 448/482/416 430/483/416 382/400/416 1986 | f 431/484/417 449/485/417 313/399/417 383/401/417 1987 | f 312/398/418 442/455/418 446/486/418 448/482/418 1988 | f 447/487/419 443/457/419 313/399/419 449/485/419 1989 | f 442/455/420 444/454/420 446/486/420 1990 | f 447/487/421 445/456/421 443/457/421 1991 | f 416/452/422 450/480/422 452/488/422 476/489/422 1992 | f 453/490/423 451/481/423 417/453/423 477/491/423 1993 | f 450/480/424 432/476/424 462/492/424 452/488/424 1994 | f 463/493/425 433/479/425 451/481/425 453/490/425 1995 | f 432/476/426 434/472/426 460/494/426 462/492/426 1996 | f 461/495/427 435/474/427 433/479/427 463/493/427 1997 | f 434/472/428 436/473/428 458/496/428 460/494/428 1998 | f 459/497/429 437/475/429 435/474/429 461/495/429 1999 | f 436/473/430 438/468/430 456/498/430 458/496/430 2000 | f 457/499/431 439/471/431 437/475/431 459/497/431 2001 | f 438/468/432 440/466/432 454/500/432 456/498/432 2002 | f 455/501/433 441/467/433 439/471/433 457/499/433 2003 | f 440/466/434 418/441/434 474/502/434 454/500/434 2004 | f 475/503/435 419/442/435 441/467/435 455/501/435 2005 | f 428/450/436 416/452/436 476/489/436 464/504/436 2006 | f 477/491/437 417/453/437 429/451/437 465/505/437 2007 | f 426/448/438 428/450/438 464/504/438 466/506/438 2008 | f 465/505/439 429/451/439 427/449/439 467/507/439 2009 | f 424/446/440 426/448/440 466/506/440 468/508/440 2010 | f 467/507/441 427/449/441 425/447/441 469/509/441 2011 | f 422/444/442 424/446/442 468/508/442 470/510/442 2012 | f 469/509/443 425/447/443 423/445/443 471/511/443 2013 | f 420/440/444 422/444/444 470/510/444 472/512/444 2014 | f 471/511/445 423/445/445 421/443/445 473/513/445 2015 | f 418/441/446 420/440/446 472/512/446 474/502/446 2016 | f 473/513/447 421/443/447 419/442/447 475/503/447 2017 | f 458/496/448 456/498/448 480/514/448 478/515/448 2018 | f 481/516/449 457/499/449 459/497/449 479/517/449 2019 | f 478/515/450 480/514/450 482/518/450 484/519/450 2020 | f 483/520/451 481/516/451 479/517/451 485/521/451 2021 | f 484/519/452 482/518/452 488/522/452 486/523/452 2022 | f 489/524/453 483/520/453 485/521/453 487/525/453 2023 | f 486/523/454 488/522/454 490/526/454 492/527/454 2024 | f 491/528/455 489/524/455 487/525/455 493/529/455 2025 | f 464/504/456 476/489/456 486/523/456 492/527/456 2026 | f 487/525/457 477/491/457 465/505/457 493/529/457 2027 | f 452/488/458 484/519/458 486/523/458 476/489/458 2028 | f 487/525/459 485/521/459 453/490/459 477/491/459 2029 | f 452/488/460 462/492/460 478/515/460 484/519/460 2030 | f 479/517/461 463/493/461 453/490/461 485/521/461 2031 | f 458/496/462 478/515/462 462/492/462 460/494/462 2032 | f 463/493/463 479/517/463 459/497/463 461/495/463 2033 | f 454/500/464 474/502/464 480/514/464 456/498/464 2034 | f 481/516/465 475/503/465 455/501/465 457/499/465 2035 | f 472/512/466 482/518/466 480/514/466 474/502/466 2036 | f 481/516/467 483/520/467 473/513/467 475/503/467 2037 | f 470/510/468 488/522/468 482/518/468 472/512/468 2038 | f 483/520/469 489/524/469 471/511/469 473/513/469 2039 | f 468/508/470 490/526/470 488/522/470 470/510/470 2040 | f 489/524/471 491/528/471 469/509/471 471/511/471 2041 | f 466/506/472 492/527/472 490/526/472 468/508/472 2042 | f 491/528/473 493/529/473 467/507/473 469/509/473 2043 | f 464/504/474 492/527/474 466/506/474 2044 | f 467/507/475 493/529/475 465/505/475 2045 | f 392/433/476 390/437/476 504/530/476 502/531/476 2046 | f 505/532/477 391/439/477 393/435/477 503/533/477 2047 | f 394/429/478 392/433/478 502/531/478 500/534/478 2048 | f 503/533/479 393/435/479 395/431/479 501/535/479 2049 | f 396/425/480 394/429/480 500/534/480 498/536/480 2050 | f 501/535/481 395/431/481 397/427/481 499/537/481 2051 | f 398/538/482 396/425/482 498/536/482 496/539/482 2052 | f 499/537/483 397/427/483 399/540/483 497/541/483 2053 | f 400/542/484 398/538/484 496/539/484 494/543/484 2054 | f 497/541/485 399/540/485 401/544/485 495/545/485 2055 | f 388/546/486 400/542/486 494/543/486 506/547/486 2056 | f 495/545/487 401/544/487 389/548/487 507/549/487 2057 | f 494/543/488 502/531/488 504/530/488 506/547/488 2058 | f 505/532/489 503/533/489 495/545/489 507/549/489 2059 | f 494/543/490 496/539/490 500/534/490 502/531/490 2060 | f 501/535/491 497/541/491 495/545/491 503/533/491 2061 | f 496/539/492 498/536/492 500/534/492 2062 | f 501/535/493 499/537/493 497/541/493 2063 | f 314/380/494 382/400/494 388/550/494 506/551/494 2064 | f 389/548/495 383/552/495 315/553/495 507/549/495 2065 | f 314/554/496 506/547/496 504/530/496 322/555/496 2066 | f 505/532/497 507/549/497 315/553/497 323/556/497 2067 | f 320/458/498 322/555/498 504/530/498 390/437/498 2068 | f 505/532/499 323/556/499 321/460/499 391/439/499 2069 | -------------------------------------------------------------------------------- /model/rab3.obj: -------------------------------------------------------------------------------- 1 | # Blender v2.80 (sub 75) OBJ File: '' 2 | # www.blender.org 3 | o bunny.000_bunny.003 4 | v -0.742453 1.609671 1.535919 5 | v -0.601563 1.270567 2.095706 6 | v -0.618275 1.491264 1.463623 7 | v -0.906933 0.871587 2.143487 8 | v -0.904794 1.186046 2.242196 9 | v -0.765842 1.225610 2.044899 10 | v -0.716920 1.297814 1.587232 11 | v -0.757130 1.319493 2.106749 12 | v -0.635108 1.175348 2.021413 13 | v -0.336393 0.228689 1.971185 14 | v -0.342915 0.671753 1.821581 15 | v -0.270326 0.192775 1.776012 16 | v -0.258084 0.555946 1.639516 17 | v -0.562670 0.394029 1.937604 18 | v 0.205418 0.191151 1.785234 19 | v 0.264990 0.022680 2.056984 20 | v 0.132863 0.031579 1.863269 21 | v 0.199504 1.023976 2.044609 22 | v -0.014719 0.910817 1.891614 23 | v -0.277240 1.004771 2.319983 24 | v -0.466943 0.397854 2.521659 25 | v -0.295335 0.676635 2.551691 26 | v -0.636313 0.591755 2.586774 27 | v -0.738977 0.799995 2.505037 28 | v -0.924240 0.932991 2.588216 29 | v -0.682546 0.916820 2.674516 30 | v -0.810402 0.408682 2.344489 31 | v -0.917679 0.679916 2.338643 32 | v -0.873425 0.572615 2.033362 33 | v -0.894817 1.298702 2.392467 34 | v -0.568434 0.924002 1.948514 35 | v -0.452894 1.019252 2.049083 36 | v 0.032122 0.968306 2.464086 37 | v 0.276137 0.948711 2.388156 38 | v -0.591005 0.242486 2.136492 39 | v -0.773223 0.062931 2.088905 40 | v -0.688123 0.060460 2.379101 41 | v -0.511057 0.234537 2.253724 42 | v -0.420878 0.987896 2.380664 43 | v 0.484399 0.720774 2.051405 44 | v 0.452382 0.662668 2.415587 45 | v 0.166579 0.038997 2.503881 46 | v 0.355127 0.083849 2.379086 47 | v 0.129867 0.235731 2.629194 48 | v -0.586571 0.665363 1.863182 49 | v -0.520669 0.171496 1.985832 50 | v -0.012694 0.042839 2.195043 51 | v 0.529673 0.446717 2.193677 52 | v 0.657213 0.402431 2.143180 53 | v 0.573718 0.183344 2.005130 54 | v 0.449509 0.319258 1.988744 55 | v 0.358780 0.517683 1.844097 56 | v -0.316752 0.041050 2.615532 57 | v -0.328081 0.042091 2.240558 58 | v -0.587672 0.086266 2.592765 59 | v -0.306254 0.222150 2.471305 60 | v -0.153947 0.205487 2.599064 61 | v -0.506358 1.309336 2.234715 62 | v -0.104801 1.631653 1.814181 63 | v -0.253776 1.589849 2.011198 64 | v -0.046766 1.410575 1.872715 65 | v 0.046438 0.623766 1.703299 66 | v 0.202590 0.721961 1.839323 67 | v -0.433744 0.048432 1.761141 68 | v -0.469051 1.179968 2.144672 69 | v -0.567248 1.270213 2.459926 70 | v -0.440129 0.052720 1.897309 71 | v -0.726000 0.072000 2.047300 72 | v -0.726500 0.076500 2.053000 73 | v -0.725766 0.074901 2.050642 74 | v 0.433674 0.286628 2.406109 75 | v 0.620532 0.311015 2.340977 76 | v 0.156941 0.510824 2.654615 77 | v 0.076670 0.735346 2.561329 78 | v -0.516261 0.219537 2.441194 79 | v -0.177844 0.573828 2.686082 80 | v -0.742453 1.609671 -0.908998 81 | v -0.601563 1.270567 -0.349211 82 | v -0.618275 1.491264 -0.981294 83 | v -0.906933 0.871587 -0.301431 84 | v -0.904794 1.186046 -0.202721 85 | v -0.765842 1.225610 -0.400018 86 | v -0.716920 1.297814 -0.857685 87 | v -0.757130 1.319493 -0.338168 88 | v -0.635108 1.175348 -0.423504 89 | v -0.336393 0.228689 -0.473733 90 | v -0.342915 0.671753 -0.623337 91 | v -0.270326 0.192775 -0.668906 92 | v -0.258084 0.555946 -0.805402 93 | v -0.562670 0.394029 -0.507314 94 | v 0.205418 0.191151 -0.659684 95 | v 0.264990 0.022680 -0.387934 96 | v 0.132863 0.031579 -0.581649 97 | v 0.199504 1.023976 -0.400308 98 | v -0.014719 0.910817 -0.553304 99 | v -0.277240 1.004771 -0.124935 100 | v -0.466943 0.397854 0.076741 101 | v -0.295335 0.676635 0.106773 102 | v -0.636313 0.591755 0.141857 103 | v -0.738977 0.799995 0.060120 104 | v -0.924240 0.932991 0.143299 105 | v -0.682546 0.916820 0.229598 106 | v -0.810402 0.408682 -0.100429 107 | v -0.917679 0.679916 -0.106274 108 | v -0.873425 0.572615 -0.411556 109 | v -0.894817 1.298702 -0.052450 110 | v -0.568434 0.924002 -0.496404 111 | v -0.452894 1.019252 -0.395835 112 | v 0.032122 0.968306 0.019169 113 | v 0.276137 0.948711 -0.056762 114 | v -0.591005 0.242486 -0.308426 115 | v -0.773223 0.062931 -0.356013 116 | v -0.688123 0.060460 -0.065817 117 | v -0.511057 0.234537 -0.191194 118 | v -0.420878 0.987896 -0.064253 119 | v 0.484399 0.720774 -0.393513 120 | v 0.452382 0.662668 -0.029331 121 | v 0.166579 0.038997 0.058963 122 | v 0.355127 0.083849 -0.065832 123 | v 0.129867 0.235731 0.184276 124 | v -0.586571 0.665363 -0.581736 125 | v -0.520669 0.171496 -0.459086 126 | v -0.012694 0.042839 -0.249875 127 | v 0.529673 0.446717 -0.251241 128 | v 0.657213 0.402431 -0.301738 129 | v 0.573718 0.183344 -0.439788 130 | v 0.449509 0.319258 -0.456174 131 | v 0.358780 0.517683 -0.600821 132 | v -0.316752 0.041050 0.170614 133 | v -0.328081 0.042091 -0.204360 134 | v -0.587672 0.086266 0.147847 135 | v -0.306254 0.222150 0.026387 136 | v -0.153947 0.205487 0.154146 137 | v -0.506358 1.309336 -0.210202 138 | v -0.104801 1.631653 -0.630736 139 | v -0.253776 1.589849 -0.433719 140 | v -0.046766 1.410575 -0.572202 141 | v 0.046438 0.623766 -0.741619 142 | v 0.202590 0.721961 -0.605595 143 | v -0.433744 0.048432 -0.683777 144 | v -0.469051 1.179968 -0.300246 145 | v -0.567248 1.270213 0.015008 146 | v -0.440129 0.052720 -0.547609 147 | v -0.726000 0.072000 -0.397618 148 | v -0.726500 0.076500 -0.391918 149 | v -0.725766 0.074901 -0.394276 150 | v 0.433674 0.286628 -0.038809 151 | v 0.620532 0.311015 -0.103941 152 | v 0.156941 0.510824 0.209697 153 | v 0.076670 0.735346 0.116411 154 | v -0.516261 0.219537 -0.003724 155 | v -0.177844 0.573828 0.241164 156 | v -0.742453 1.609672 -3.353916 157 | v -0.601563 1.270568 -2.794129 158 | v -0.618275 1.491265 -3.426212 159 | v -0.906933 0.871587 -2.746348 160 | v -0.904794 1.186046 -2.647639 161 | v -0.765842 1.225610 -2.844936 162 | v -0.716920 1.297815 -3.302603 163 | v -0.757130 1.319494 -2.783086 164 | v -0.635108 1.175349 -2.868422 165 | v -0.336393 0.228689 -2.918650 166 | v -0.342915 0.671753 -3.068254 167 | v -0.270326 0.192776 -3.113823 168 | v -0.258084 0.555947 -3.250319 169 | v -0.562670 0.394029 -2.952231 170 | v 0.205418 0.191151 -3.104601 171 | v 0.264990 0.022680 -2.832851 172 | v 0.132863 0.031579 -3.026567 173 | v 0.199504 1.023976 -2.845226 174 | v -0.014719 0.910818 -2.998221 175 | v -0.277240 1.004771 -2.569852 176 | v -0.466943 0.397854 -2.368176 177 | v -0.295335 0.676635 -2.338144 178 | v -0.636313 0.591755 -2.303061 179 | v -0.738977 0.799995 -2.384798 180 | v -0.924240 0.932991 -2.301619 181 | v -0.682546 0.916820 -2.215319 182 | v -0.810402 0.408682 -2.545346 183 | v -0.917679 0.679916 -2.551192 184 | v -0.873425 0.572616 -2.856473 185 | v -0.894817 1.298702 -2.497368 186 | v -0.568434 0.924002 -2.941321 187 | v -0.452894 1.019252 -2.840752 188 | v 0.032122 0.968306 -2.425749 189 | v 0.276137 0.948711 -2.501679 190 | v -0.591005 0.242486 -2.753343 191 | v -0.773223 0.062931 -2.800930 192 | v -0.688123 0.060460 -2.510734 193 | v -0.511057 0.234537 -2.636111 194 | v -0.420878 0.987896 -2.509171 195 | v 0.484399 0.720774 -2.838430 196 | v 0.452382 0.662668 -2.474248 197 | v 0.166579 0.038997 -2.385954 198 | v 0.355127 0.083849 -2.510749 199 | v 0.129867 0.235731 -2.260641 200 | v -0.586571 0.665363 -3.026653 201 | v -0.520669 0.171496 -2.904003 202 | v -0.012694 0.042839 -2.694792 203 | v 0.529673 0.446717 -2.696158 204 | v 0.657213 0.402431 -2.746655 205 | v 0.573718 0.183344 -2.884705 206 | v 0.449509 0.319258 -2.901091 207 | v 0.358780 0.517684 -3.045738 208 | v -0.316752 0.041050 -2.274303 209 | v -0.328081 0.042091 -2.649277 210 | v -0.587672 0.086266 -2.297070 211 | v -0.306254 0.222150 -2.418530 212 | v -0.153947 0.205487 -2.290771 213 | v -0.506358 1.309336 -2.655120 214 | v -0.104801 1.631653 -3.075654 215 | v -0.253776 1.589849 -2.878637 216 | v -0.046766 1.410576 -3.017120 217 | v 0.046438 0.623767 -3.186536 218 | v 0.202590 0.721961 -3.050512 219 | v -0.433744 0.048433 -3.128695 220 | v -0.469051 1.179968 -2.745163 221 | v -0.567248 1.270213 -2.429909 222 | v -0.440129 0.052720 -2.992527 223 | v -0.726000 0.072000 -2.842535 224 | v -0.726500 0.076500 -2.836835 225 | v -0.725766 0.074901 -2.839193 226 | v 0.433674 0.286628 -2.483726 227 | v 0.620532 0.311015 -2.548858 228 | v 0.156941 0.510824 -2.235220 229 | v 0.076670 0.735346 -2.328506 230 | v -0.516261 0.219537 -2.448641 231 | v -0.177844 0.573828 -2.203753 232 | vt 0.346697 0.401618 233 | vt 0.346697 0.577478 234 | vt 0.295062 0.391607 235 | vt 0.675011 0.127788 236 | vt 0.780424 0.131855 237 | vt 0.767540 0.200031 238 | vt 0.782719 0.408237 239 | vt 0.740100 0.347070 240 | vt 0.829906 0.395079 241 | vt 0.802145 0.191770 242 | vt 0.272272 0.468114 243 | vt 0.310880 0.581865 244 | vt 0.856588 0.837869 245 | vt 0.856588 0.988022 246 | vt 0.791056 0.846718 247 | vt 0.786079 0.971151 248 | vt 0.302074 0.161431 249 | vt 0.337771 0.244524 250 | vt 0.250014 0.287319 251 | vt 0.312287 0.144001 252 | vt 0.266619 0.244553 253 | vt 0.189157 0.065854 254 | vt 0.170583 0.005097 255 | vt 0.224511 0.032321 256 | vt 0.643754 0.683036 257 | vt 0.607629 0.607980 258 | vt 0.758558 0.548859 259 | vt 0.485941 0.292214 260 | vt 0.579244 0.242611 261 | vt 0.547035 0.351106 262 | vt 0.961088 0.237269 263 | vt 0.882897 0.338845 264 | vt 0.829906 0.295774 265 | vt 0.740568 0.000000 266 | vt 0.840316 0.377675 267 | vt 0.475815 0.397860 268 | vt 0.559945 0.436419 269 | vt 0.637945 0.825948 270 | vt 0.718468 0.893280 271 | vt 0.608805 0.909958 272 | vt 0.300585 0.831714 273 | vt 0.375705 0.730784 274 | vt 0.375705 0.840279 275 | vt 0.900647 0.200640 276 | vt 0.863934 0.124178 277 | vt 0.941852 0.207658 278 | vt 0.683114 0.477519 279 | vt 0.786079 0.655295 280 | vt 0.747833 0.728118 281 | vt 0.829906 0.168832 282 | vt 0.941852 0.096027 283 | vt 0.607522 0.963604 284 | vt 0.558717 0.938646 285 | vt 0.607523 0.864246 286 | vt 0.360363 0.677753 287 | vt 0.365188 0.723103 288 | vt 0.292510 0.682447 289 | vt 0.608192 0.385310 290 | vt 0.669267 0.283617 291 | vt 0.628809 0.777126 292 | vt 0.462319 0.436419 293 | vt 0.607629 0.446597 294 | vt 0.545175 0.511110 295 | vt 0.485265 0.716779 296 | vt 0.442975 0.668479 297 | vt 0.555085 0.687060 298 | vt 0.378840 0.342887 299 | vt 0.309114 0.324576 300 | vt 0.254046 0.391607 301 | vt 0.914674 0.946263 302 | vt 0.856588 0.922325 303 | vt 0.914674 0.837869 304 | vt 0.356924 0.175432 305 | vt 0.218590 0.717895 306 | vt 0.158932 0.637850 307 | vt 0.272272 0.664967 308 | vt 0.020220 0.076753 309 | vt 0.000000 0.044579 310 | vt 0.071421 0.000000 311 | vt 0.083633 0.058045 312 | vt 0.091463 0.130031 313 | vt 0.071439 0.712129 314 | vt 0.008718 0.566113 315 | vt 0.126680 0.541047 316 | vt 0.000000 0.898591 317 | vt 0.021605 0.858421 318 | vt 0.094621 0.933060 319 | vt 0.387148 0.327492 320 | vt 0.378840 0.240699 321 | vt 0.431060 0.236754 322 | vt 0.000000 0.478478 323 | vt 0.383067 0.083407 324 | vt 0.449983 0.101407 325 | vt 0.433710 0.190916 326 | vt 0.443887 0.527342 327 | vt 0.378840 0.536863 328 | vt 0.898021 0.643150 329 | vt 0.898360 0.436419 330 | vt 0.926078 0.510294 331 | vt 0.194083 0.808963 332 | vt 0.245989 0.955560 333 | vt 0.173097 0.955560 334 | vt 0.735780 0.901345 335 | vt 0.718468 0.803899 336 | vt 0.777858 0.777126 337 | vt 0.119982 0.298662 338 | vt 0.099785 0.211970 339 | vt 0.170509 0.212579 340 | vt 0.378840 0.131032 341 | vt 0.777858 0.951584 342 | vt 0.030078 0.292436 343 | vt 0.004108 0.162172 344 | vt 0.558717 0.716779 345 | vt 0.530121 0.897987 346 | vt 0.480737 0.886369 347 | vt 0.893114 0.237269 348 | vt 0.841277 0.223097 349 | vt 0.346697 0.427302 350 | vt 0.377218 0.391607 351 | vt 0.377218 0.579667 352 | vt 0.843598 0.480004 353 | vt 0.827922 0.721278 354 | vt 0.846216 0.637805 355 | vt 0.926078 0.712409 356 | vt 0.558717 0.995612 357 | vt 0.443824 0.925547 358 | vt 0.450969 1.000000 359 | vt 0.378840 0.842067 360 | vt 0.272272 0.480153 361 | vt 0.228781 0.485850 362 | vt 0.325658 0.954759 363 | vt 0.272272 0.886599 364 | vt 0.325658 0.840279 365 | vt 0.926078 0.634836 366 | vt 0.966255 0.577728 367 | vt 0.966255 0.731681 368 | vt 0.979813 0.821513 369 | vt 0.930374 0.809413 370 | vt 0.926078 0.731681 371 | vt 0.245989 0.855345 372 | vt 0.265679 0.808963 373 | vt 0.265679 0.894302 374 | vt 0.926078 0.576654 375 | vt 0.969857 0.436419 376 | vt 0.969857 0.577728 377 | vt 0.979813 0.755235 378 | vt 0.657862 0.436419 379 | vt 0.913748 0.000000 380 | vt 1.000000 0.237269 381 | vt 1.000000 0.320063 382 | vt 0.961088 0.260253 383 | vt 0.659200 0.989653 384 | vt 0.786079 0.507278 385 | vt 0.149176 0.391607 386 | vt 0.996748 0.320063 387 | vt 0.996748 0.406337 388 | vt 0.961088 0.360300 389 | vt 0.377383 0.391607 390 | vt 0.377383 0.393448 391 | vt 0.377218 0.392666 392 | vt 0.786079 0.638945 393 | vt 0.718468 0.790427 394 | vt 0.477699 0.611526 395 | vt 0.173097 0.949762 396 | vt 0.097965 0.881224 397 | vt 0.152540 0.808963 398 | vt 0.094621 0.949762 399 | vt 0.062228 0.435104 400 | vt 0.250437 0.808963 401 | vt 0.121025 0.763504 402 | vt 0.670461 0.060321 403 | vt 0.539154 0.097841 404 | vt 0.583788 0.000000 405 | vt 0.605473 0.124867 406 | vt 0.325658 0.902972 407 | vt 0.340579 0.840279 408 | vt 0.372574 0.871300 409 | vt 0.372574 0.945411 410 | vt 0.976817 0.182970 411 | vt 0.941852 0.132253 412 | vt 0.976817 0.071204 413 | vt 0.094621 0.808963 414 | vt 0.607629 0.777126 415 | vt 0.320122 0.632895 416 | vt 0.869033 0.837869 417 | vt 0.992597 0.935674 418 | vt 0.956935 0.887222 419 | vt 0.992597 0.837869 420 | vt 0.425009 0.303116 421 | vt 0.675011 0.140512 422 | vt 0.675011 0.236483 423 | vt 0.829906 0.099045 424 | vt 0.961088 0.408814 425 | vt 0.607629 0.615248 426 | vt 0.914674 0.916414 427 | vt 0.956935 0.837869 428 | vt 0.956935 0.956506 429 | vt 0.272272 0.609559 430 | vt 0.365188 0.581865 431 | vt 0.272272 0.723103 432 | vt 0.558717 0.745148 433 | vt 0.602204 0.716779 434 | vt 0.602204 0.864246 435 | vt 0.554039 0.206668 436 | vt 0.998055 0.071204 437 | vt 0.941852 0.071204 438 | vt 0.979931 0.000000 439 | vt 0.346697 0.401618 440 | vt 0.346697 0.577478 441 | vt 0.295062 0.391607 442 | vt 0.675011 0.127788 443 | vt 0.780424 0.131855 444 | vt 0.767540 0.200031 445 | vt 0.782719 0.408237 446 | vt 0.740100 0.347070 447 | vt 0.829906 0.395079 448 | vt 0.802145 0.191770 449 | vt 0.272272 0.468114 450 | vt 0.310880 0.581865 451 | vt 0.856588 0.837869 452 | vt 0.856588 0.988022 453 | vt 0.791056 0.846718 454 | vt 0.786079 0.971151 455 | vt 0.302074 0.161431 456 | vt 0.337771 0.244524 457 | vt 0.250014 0.287319 458 | vt 0.312287 0.144001 459 | vt 0.266619 0.244553 460 | vt 0.189157 0.065854 461 | vt 0.170583 0.005097 462 | vt 0.224511 0.032321 463 | vt 0.643754 0.683036 464 | vt 0.607629 0.607980 465 | vt 0.758558 0.548859 466 | vt 0.485941 0.292214 467 | vt 0.579244 0.242611 468 | vt 0.547035 0.351106 469 | vt 0.961088 0.237269 470 | vt 0.882897 0.338845 471 | vt 0.829906 0.295774 472 | vt 0.740568 0.000000 473 | vt 0.840316 0.377675 474 | vt 0.475815 0.397860 475 | vt 0.559945 0.436419 476 | vt 0.637945 0.825948 477 | vt 0.718468 0.893280 478 | vt 0.608805 0.909958 479 | vt 0.300585 0.831714 480 | vt 0.375705 0.730784 481 | vt 0.375705 0.840279 482 | vt 0.900647 0.200640 483 | vt 0.863934 0.124178 484 | vt 0.941852 0.207658 485 | vt 0.683114 0.477519 486 | vt 0.786079 0.655295 487 | vt 0.747833 0.728118 488 | vt 0.829906 0.168832 489 | vt 0.941852 0.096027 490 | vt 0.607522 0.963604 491 | vt 0.558717 0.938646 492 | vt 0.607523 0.864246 493 | vt 0.360363 0.677753 494 | vt 0.365188 0.723103 495 | vt 0.292510 0.682447 496 | vt 0.608192 0.385310 497 | vt 0.669267 0.283617 498 | vt 0.628809 0.777126 499 | vt 0.462319 0.436419 500 | vt 0.607629 0.446597 501 | vt 0.545175 0.511110 502 | vt 0.485265 0.716779 503 | vt 0.442975 0.668479 504 | vt 0.555085 0.687060 505 | vt 0.378840 0.342887 506 | vt 0.309114 0.324576 507 | vt 0.254046 0.391607 508 | vt 0.914674 0.946263 509 | vt 0.856588 0.922325 510 | vt 0.914674 0.837869 511 | vt 0.356924 0.175432 512 | vt 0.218590 0.717895 513 | vt 0.158932 0.637850 514 | vt 0.272272 0.664967 515 | vt 0.020220 0.076753 516 | vt 0.000000 0.044579 517 | vt 0.071421 0.000000 518 | vt 0.083633 0.058045 519 | vt 0.091463 0.130031 520 | vt 0.071439 0.712129 521 | vt 0.008718 0.566113 522 | vt 0.126680 0.541047 523 | vt 0.000000 0.898591 524 | vt 0.021605 0.858421 525 | vt 0.094621 0.933060 526 | vt 0.387148 0.327492 527 | vt 0.378840 0.240699 528 | vt 0.431060 0.236754 529 | vt 0.000000 0.478478 530 | vt 0.383067 0.083407 531 | vt 0.449983 0.101407 532 | vt 0.433710 0.190916 533 | vt 0.443887 0.527342 534 | vt 0.378840 0.536863 535 | vt 0.898021 0.643150 536 | vt 0.898360 0.436419 537 | vt 0.926078 0.510294 538 | vt 0.194083 0.808963 539 | vt 0.245989 0.955560 540 | vt 0.173097 0.955560 541 | vt 0.735780 0.901345 542 | vt 0.718468 0.803899 543 | vt 0.777858 0.777126 544 | vt 0.119982 0.298662 545 | vt 0.099785 0.211970 546 | vt 0.170509 0.212579 547 | vt 0.378840 0.131032 548 | vt 0.777858 0.951584 549 | vt 0.030078 0.292436 550 | vt 0.004108 0.162172 551 | vt 0.558717 0.716779 552 | vt 0.530121 0.897987 553 | vt 0.480737 0.886369 554 | vt 0.893114 0.237269 555 | vt 0.841277 0.223097 556 | vt 0.346697 0.427302 557 | vt 0.377218 0.391607 558 | vt 0.377218 0.579667 559 | vt 0.843598 0.480004 560 | vt 0.827922 0.721278 561 | vt 0.846216 0.637805 562 | vt 0.926078 0.712409 563 | vt 0.558717 0.995612 564 | vt 0.443824 0.925547 565 | vt 0.450969 1.000000 566 | vt 0.378840 0.842067 567 | vt 0.272272 0.480153 568 | vt 0.228781 0.485850 569 | vt 0.325658 0.954759 570 | vt 0.272272 0.886599 571 | vt 0.325658 0.840279 572 | vt 0.926078 0.634836 573 | vt 0.966255 0.577728 574 | vt 0.966255 0.731681 575 | vt 0.979813 0.821513 576 | vt 0.930374 0.809413 577 | vt 0.926078 0.731681 578 | vt 0.245989 0.855345 579 | vt 0.265679 0.808963 580 | vt 0.265679 0.894302 581 | vt 0.926078 0.576654 582 | vt 0.969857 0.436419 583 | vt 0.969857 0.577728 584 | vt 0.979813 0.755235 585 | vt 0.657862 0.436419 586 | vt 0.913748 0.000000 587 | vt 1.000000 0.237269 588 | vt 1.000000 0.320063 589 | vt 0.961088 0.260253 590 | vt 0.659200 0.989653 591 | vt 0.786079 0.507278 592 | vt 0.149176 0.391607 593 | vt 0.996748 0.320063 594 | vt 0.996748 0.406337 595 | vt 0.961088 0.360300 596 | vt 0.377383 0.391607 597 | vt 0.377383 0.393448 598 | vt 0.377218 0.392666 599 | vt 0.786079 0.638945 600 | vt 0.718468 0.790427 601 | vt 0.477699 0.611526 602 | vt 0.173097 0.949762 603 | vt 0.097965 0.881224 604 | vt 0.152540 0.808963 605 | vt 0.094621 0.949762 606 | vt 0.062228 0.435104 607 | vt 0.250437 0.808963 608 | vt 0.121025 0.763504 609 | vt 0.670461 0.060321 610 | vt 0.539154 0.097841 611 | vt 0.583788 0.000000 612 | vt 0.605473 0.124867 613 | vt 0.325658 0.902972 614 | vt 0.340579 0.840279 615 | vt 0.372574 0.871300 616 | vt 0.372574 0.945411 617 | vt 0.976817 0.182970 618 | vt 0.941852 0.132253 619 | vt 0.976817 0.071204 620 | vt 0.094621 0.808963 621 | vt 0.607629 0.777126 622 | vt 0.320122 0.632895 623 | vt 0.869033 0.837869 624 | vt 0.992597 0.935674 625 | vt 0.956935 0.887222 626 | vt 0.992597 0.837869 627 | vt 0.425009 0.303116 628 | vt 0.675011 0.140512 629 | vt 0.675011 0.236483 630 | vt 0.829906 0.099045 631 | vt 0.961088 0.408814 632 | vt 0.607629 0.615248 633 | vt 0.914674 0.916414 634 | vt 0.956935 0.837869 635 | vt 0.956935 0.956506 636 | vt 0.272272 0.609559 637 | vt 0.365188 0.581865 638 | vt 0.272272 0.723103 639 | vt 0.558717 0.745148 640 | vt 0.602204 0.716779 641 | vt 0.602204 0.864246 642 | vt 0.554039 0.206668 643 | vt 0.998055 0.071204 644 | vt 0.941852 0.071204 645 | vt 0.979931 0.000000 646 | vt 0.346697 0.401618 647 | vt 0.346697 0.577478 648 | vt 0.295062 0.391607 649 | vt 0.675011 0.127788 650 | vt 0.780424 0.131855 651 | vt 0.767540 0.200031 652 | vt 0.782719 0.408237 653 | vt 0.740100 0.347070 654 | vt 0.829906 0.395079 655 | vt 0.802145 0.191770 656 | vt 0.272272 0.468114 657 | vt 0.310880 0.581865 658 | vt 0.856588 0.837869 659 | vt 0.856588 0.988022 660 | vt 0.791056 0.846718 661 | vt 0.786079 0.971151 662 | vt 0.302074 0.161431 663 | vt 0.337771 0.244524 664 | vt 0.250014 0.287319 665 | vt 0.312287 0.144001 666 | vt 0.266619 0.244553 667 | vt 0.189157 0.065854 668 | vt 0.170583 0.005097 669 | vt 0.224511 0.032321 670 | vt 0.643754 0.683036 671 | vt 0.607629 0.607980 672 | vt 0.758558 0.548859 673 | vt 0.485941 0.292214 674 | vt 0.579244 0.242611 675 | vt 0.547035 0.351106 676 | vt 0.961088 0.237269 677 | vt 0.882897 0.338845 678 | vt 0.829906 0.295774 679 | vt 0.740568 0.000000 680 | vt 0.840316 0.377675 681 | vt 0.475815 0.397860 682 | vt 0.559945 0.436419 683 | vt 0.637945 0.825948 684 | vt 0.718468 0.893280 685 | vt 0.608805 0.909958 686 | vt 0.300585 0.831714 687 | vt 0.375705 0.730784 688 | vt 0.375705 0.840279 689 | vt 0.900647 0.200640 690 | vt 0.863934 0.124178 691 | vt 0.941852 0.207658 692 | vt 0.683114 0.477519 693 | vt 0.786079 0.655295 694 | vt 0.747833 0.728118 695 | vt 0.829906 0.168832 696 | vt 0.941852 0.096027 697 | vt 0.607522 0.963604 698 | vt 0.558717 0.938646 699 | vt 0.607523 0.864246 700 | vt 0.360363 0.677753 701 | vt 0.365188 0.723103 702 | vt 0.292510 0.682447 703 | vt 0.608192 0.385310 704 | vt 0.669267 0.283617 705 | vt 0.628809 0.777126 706 | vt 0.462319 0.436419 707 | vt 0.607629 0.446597 708 | vt 0.545175 0.511110 709 | vt 0.485265 0.716779 710 | vt 0.442975 0.668479 711 | vt 0.555085 0.687060 712 | vt 0.378840 0.342887 713 | vt 0.309114 0.324576 714 | vt 0.254046 0.391607 715 | vt 0.914674 0.946263 716 | vt 0.856588 0.922325 717 | vt 0.914674 0.837869 718 | vt 0.356924 0.175432 719 | vt 0.218590 0.717895 720 | vt 0.158932 0.637850 721 | vt 0.272272 0.664967 722 | vt 0.020220 0.076753 723 | vt 0.000000 0.044579 724 | vt 0.071421 0.000000 725 | vt 0.083633 0.058045 726 | vt 0.091463 0.130031 727 | vt 0.071439 0.712129 728 | vt 0.008718 0.566113 729 | vt 0.126680 0.541047 730 | vt 0.000000 0.898591 731 | vt 0.021605 0.858421 732 | vt 0.094621 0.933060 733 | vt 0.387148 0.327492 734 | vt 0.378840 0.240699 735 | vt 0.431060 0.236754 736 | vt 0.000000 0.478478 737 | vt 0.383067 0.083407 738 | vt 0.449983 0.101407 739 | vt 0.433710 0.190916 740 | vt 0.443887 0.527342 741 | vt 0.378840 0.536863 742 | vt 0.898021 0.643150 743 | vt 0.898360 0.436419 744 | vt 0.926078 0.510294 745 | vt 0.194083 0.808963 746 | vt 0.245989 0.955560 747 | vt 0.173097 0.955560 748 | vt 0.735780 0.901345 749 | vt 0.718468 0.803899 750 | vt 0.777858 0.777126 751 | vt 0.119982 0.298662 752 | vt 0.099785 0.211970 753 | vt 0.170509 0.212579 754 | vt 0.378840 0.131032 755 | vt 0.777858 0.951584 756 | vt 0.030078 0.292436 757 | vt 0.004108 0.162172 758 | vt 0.558717 0.716779 759 | vt 0.530121 0.897987 760 | vt 0.480737 0.886369 761 | vt 0.893114 0.237269 762 | vt 0.841277 0.223097 763 | vt 0.346697 0.427302 764 | vt 0.377218 0.391607 765 | vt 0.377218 0.579667 766 | vt 0.843598 0.480004 767 | vt 0.827922 0.721278 768 | vt 0.846216 0.637805 769 | vt 0.926078 0.712409 770 | vt 0.558717 0.995612 771 | vt 0.443824 0.925547 772 | vt 0.450969 1.000000 773 | vt 0.378840 0.842067 774 | vt 0.272272 0.480153 775 | vt 0.228781 0.485850 776 | vt 0.325658 0.954759 777 | vt 0.272272 0.886599 778 | vt 0.325658 0.840279 779 | vt 0.926078 0.634836 780 | vt 0.966255 0.577728 781 | vt 0.966255 0.731681 782 | vt 0.979813 0.821513 783 | vt 0.930374 0.809413 784 | vt 0.926078 0.731681 785 | vt 0.245989 0.855345 786 | vt 0.265679 0.808963 787 | vt 0.265679 0.894302 788 | vt 0.926078 0.576654 789 | vt 0.969857 0.436419 790 | vt 0.969857 0.577728 791 | vt 0.979813 0.755235 792 | vt 0.657862 0.436419 793 | vt 0.913748 0.000000 794 | vt 1.000000 0.237269 795 | vt 1.000000 0.320063 796 | vt 0.961088 0.260253 797 | vt 0.659200 0.989653 798 | vt 0.786079 0.507278 799 | vt 0.149176 0.391607 800 | vt 0.996748 0.320063 801 | vt 0.996748 0.406337 802 | vt 0.961088 0.360300 803 | vt 0.377383 0.391607 804 | vt 0.377383 0.393448 805 | vt 0.377218 0.392666 806 | vt 0.786079 0.638945 807 | vt 0.718468 0.790427 808 | vt 0.477699 0.611526 809 | vt 0.173097 0.949762 810 | vt 0.097965 0.881224 811 | vt 0.152540 0.808963 812 | vt 0.094621 0.949762 813 | vt 0.062228 0.435104 814 | vt 0.250437 0.808963 815 | vt 0.121025 0.763504 816 | vt 0.670461 0.060321 817 | vt 0.539154 0.097841 818 | vt 0.583788 0.000000 819 | vt 0.605473 0.124867 820 | vt 0.325658 0.902972 821 | vt 0.340579 0.840279 822 | vt 0.372574 0.871300 823 | vt 0.372574 0.945411 824 | vt 0.976817 0.182970 825 | vt 0.941852 0.132253 826 | vt 0.976817 0.071204 827 | vt 0.094621 0.808963 828 | vt 0.607629 0.777126 829 | vt 0.320122 0.632895 830 | vt 0.869033 0.837869 831 | vt 0.992597 0.935674 832 | vt 0.956935 0.887222 833 | vt 0.992597 0.837869 834 | vt 0.425009 0.303116 835 | vt 0.675011 0.140512 836 | vt 0.675011 0.236483 837 | vt 0.829906 0.099045 838 | vt 0.961088 0.408814 839 | vt 0.607629 0.615248 840 | vt 0.914674 0.916414 841 | vt 0.956935 0.837869 842 | vt 0.956935 0.956506 843 | vt 0.272272 0.609559 844 | vt 0.365188 0.581865 845 | vt 0.272272 0.723103 846 | vt 0.558717 0.745148 847 | vt 0.602204 0.716779 848 | vt 0.602204 0.864246 849 | vt 0.554039 0.206668 850 | vt 0.998055 0.071204 851 | vt 0.941852 0.071204 852 | vt 0.979931 0.000000 853 | vn 0.7354 0.6455 0.2059 854 | vn -0.8211 0.1760 -0.5430 855 | vn -0.6156 -0.1768 -0.7679 856 | vn -0.9965 0.0819 0.0160 857 | vn 0.7547 -0.5803 -0.3059 858 | vn -0.9875 -0.1008 -0.1215 859 | vn -0.9472 -0.1151 -0.2994 860 | vn -0.9254 -0.1056 -0.3640 861 | vn -0.0937 -0.3197 -0.9429 862 | vn 0.0169 -0.3523 -0.9357 863 | vn 0.6800 -0.5470 -0.4883 864 | vn 0.6803 -0.5467 -0.4882 865 | vn 0.6793 -0.5477 -0.4885 866 | vn -0.2350 0.9093 -0.3435 867 | vn 0.1485 -0.1958 0.9693 868 | vn -0.5528 -0.8281 0.0928 869 | vn -0.9989 0.0199 -0.0416 870 | vn -0.2664 -0.7499 0.6056 871 | vn -0.6833 -0.2555 0.6840 872 | vn -0.9299 -0.3679 -0.0055 873 | vn -0.2684 0.4713 0.8401 874 | vn -0.0731 0.2599 -0.9629 875 | vn 0.2106 0.9739 -0.0845 876 | vn 0.0467 0.9876 0.1497 877 | vn 0.1352 0.9737 0.1832 878 | vn 0.4300 0.3548 -0.8301 879 | vn -0.4933 -0.0453 -0.8687 880 | vn -0.7134 0.6670 0.2149 881 | vn -0.4916 0.7796 0.3881 882 | vn -0.6675 -0.0372 0.7437 883 | vn -0.0271 0.4730 0.8807 884 | vn 0.7288 0.6846 -0.0126 885 | vn 0.8339 0.5289 0.1577 886 | vn 0.5729 -0.3616 0.7356 887 | vn -0.4236 -0.2741 -0.8634 888 | vn -0.1676 0.3195 -0.9327 889 | vn -0.5359 -0.6330 -0.5587 890 | vn -0.0113 -0.2138 -0.9768 891 | vn -0.0711 -0.9975 0.0027 892 | vn -0.1277 0.5631 -0.8164 893 | vn 0.6393 0.5154 -0.5706 894 | vn 0.6866 -0.1963 -0.7000 895 | vn 0.6879 -0.5397 -0.4854 896 | vn -0.0610 -0.9979 0.0230 897 | vn 0.0017 -1.0000 -0.0028 898 | vn 0.0020 -1.0000 -0.0028 899 | vn 0.0013 -1.0000 -0.0033 900 | vn -0.4339 -0.8693 0.2369 901 | vn 0.0379 0.6212 0.7828 902 | vn -0.1648 -0.9863 0.0022 903 | vn -0.0315 -0.5412 0.8403 904 | vn 0.9365 -0.0268 -0.3497 905 | vn 0.7928 -0.2842 0.5392 906 | vn -0.2846 -0.3145 -0.9056 907 | vn -0.0674 0.8273 -0.5577 908 | vn 0.0061 0.2734 -0.9619 909 | vn 0.2254 -0.1007 -0.9690 910 | vn 0.4038 -0.0248 -0.9145 911 | vn 0.1738 -0.0958 -0.9801 912 | vn 0.0158 -0.4451 -0.8954 913 | vn -0.0599 0.8407 -0.5382 914 | vn 0.2800 0.5416 -0.7926 915 | vn 0.4811 0.3490 -0.8042 916 | vn 0.5511 0.4043 -0.7300 917 | vn 0.5285 0.4809 -0.6996 918 | vn -0.0852 0.3860 -0.9185 919 | vn 0.2978 0.8479 0.4387 920 | vn 0.5418 0.3900 -0.7445 921 | vn -0.1480 -0.6290 -0.7632 922 | vn 0.5329 0.3445 0.7729 923 | vn 0.8940 0.4190 0.1585 924 | vn 0.0027 0.9973 0.0739 925 | vn -0.7884 0.3878 -0.4775 926 | vn 0.0476 0.9819 0.1834 927 | vn -0.6292 0.7445 0.2233 928 | vn -0.0351 -0.9989 0.0298 929 | vn -0.0353 -0.9990 0.0272 930 | vn -0.0357 -0.9992 0.0200 931 | vn -0.1549 -0.2740 -0.9492 932 | vn -0.5563 0.2953 -0.7768 933 | vn -0.6747 0.6356 -0.3753 934 | vn -0.5212 0.6473 -0.5562 935 | vn -0.8349 -0.5499 -0.0218 936 | vn -0.3813 -0.9060 -0.1837 937 | vn 0.9615 -0.2506 -0.1129 938 | vn -0.3049 0.9130 -0.2712 939 | vn -0.0495 0.7529 -0.6562 940 | vn 0.8518 0.0077 -0.5237 941 | vn 0.5157 0.4757 -0.7126 942 | vn -0.5121 0.2458 -0.8230 943 | vn -0.0699 -0.1822 -0.9808 944 | vn -0.4685 0.3013 -0.8305 945 | vn 0.2464 0.8767 -0.4132 946 | vn -0.7093 -0.6726 -0.2107 947 | vn 0.6292 -0.3135 0.7112 948 | vn -0.0739 0.9921 0.1010 949 | vn -0.0358 -0.9992 0.0182 950 | vn -0.0408 -0.9990 -0.0176 951 | vn -0.5091 0.6623 -0.5497 952 | vn -0.3570 0.7177 -0.5979 953 | vn 0.9857 0.1474 -0.0812 954 | vn -0.9905 -0.0668 -0.1201 955 | vn 0.9249 -0.0555 0.3761 956 | vn 0.5942 -0.3280 0.7344 957 | vn 0.9675 0.2224 0.1205 958 | vn -0.0020 -0.9995 -0.0303 959 | vn 0.6541 -0.7328 0.1874 960 | vn 0.9330 -0.3598 0.0067 961 | vn -0.0487 -0.9988 0.0058 962 | vn 0.4662 -0.8839 0.0374 963 | vn 0.4655 0.3642 0.8067 964 | vn 0.2619 0.4487 0.8545 965 | vn 0.4454 0.7784 0.4424 966 | vn 0.1202 0.7660 0.6315 967 | vn 0.3478 -0.2549 0.9023 968 | vn 0.1143 -0.1757 0.9778 969 | vn -0.2994 -0.7920 0.5321 970 | vn -0.7466 0.4947 0.4448 971 | vn -0.6863 0.7262 0.0391 972 | vn 0.7128 0.1792 0.6781 973 | vn -0.9632 0.2688 -0.0052 974 | vn -0.1267 -0.3787 0.9168 975 | vn 0.2918 -0.9513 0.0990 976 | vn -0.2939 0.5621 0.7731 977 | vn 0.2711 0.5452 0.7933 978 | vn 0.1115 0.4103 0.9051 979 | vn -0.9966 0.0825 0.0043 980 | vn -0.0063 -0.9999 -0.0088 981 | vn 0.5722 -0.7518 0.3277 982 | vn 0.3005 0.4158 0.8584 983 | vn -0.3880 -0.5795 0.7167 984 | vn 0.2228 -0.1238 0.9670 985 | vn -0.4965 0.5582 0.6647 986 | vn 0.6439 -0.0513 0.7634 987 | vn -0.0824 0.3704 0.9252 988 | vn -0.0038 -0.9926 0.1217 989 | vn -0.1323 0.7280 0.6726 990 | vn -0.7048 0.6634 0.2512 991 | vn -0.0999 0.7701 0.6300 992 | vn -0.1236 0.5442 0.8298 993 | vn -0.7829 -0.0901 0.6156 994 | vn 0.6010 -0.1320 0.7883 995 | vn -0.6413 -0.2156 0.7364 996 | vn 0.0488 -0.2266 0.9728 997 | vn -0.0965 -0.0822 0.9919 998 | vn 0.1641 0.4279 0.8888 999 | vn -0.7827 0.5218 -0.3392 1000 | vn -0.9179 -0.2415 -0.3148 1001 | vn 0.9579 0.0856 0.2739 1002 | vn -0.8350 -0.5499 -0.0218 1003 | vn -0.3574 0.7176 -0.5978 1004 | vn -0.3568 0.7177 -0.5980 1005 | usemtl Default_OBJ.001 1006 | s 1 1007 | f 1/1/1 2/2/1 3/3/1 1008 | f 4/4/2 5/5/2 6/6/2 1009 | f 3/7/3 7/8/3 1/9/3 1010 | f 8/10/4 1/9/4 6/6/4 1011 | f 7/11/5 3/3/5 9/12/5 1012 | f 7/8/6 6/6/6 1/9/6 1013 | f 10/13/7 11/14/7 12/15/7 1014 | f 13/16/8 12/15/8 11/14/8 1015 | f 10/17/9 14/18/9 11/19/9 1016 | f 12/20/10 13/21/10 15/22/10 1017 | f 15/22/11 16/23/12 17/24/13 1018 | f 18/25/14 19/26/14 20/27/14 1019 | f 21/28/15 22/29/15 23/30/15 1020 | f 4/31/16 24/32/16 25/33/16 1021 | f 5/5/17 4/4/17 25/34/17 1022 | f 25/33/18 24/32/18 26/35/18 1023 | f 27/36/19 23/30/19 28/37/19 1024 | f 28/38/20 29/39/20 27/40/20 1025 | f 26/41/21 30/42/21 25/43/21 1026 | f 9/44/22 31/45/22 6/46/22 1027 | f 19/26/23 32/47/23 20/27/23 1028 | f 18/25/24 20/27/24 33/48/24 1029 | f 18/25/25 33/48/25 34/49/25 1030 | f 31/45/26 9/44/26 32/50/26 1031 | f 4/51/27 6/46/27 31/45/27 1032 | f 35/52/28 36/53/28 37/54/28 1033 | f 38/55/29 35/56/29 37/57/29 1034 | f 24/58/30 28/37/30 23/30/30 1035 | f 39/59/31 23/30/31 22/29/31 1036 | f 34/49/32 40/60/32 18/25/32 1037 | f 40/61/33 34/62/33 41/63/33 1038 | f 42/64/34 43/65/34 44/66/34 1039 | f 14/18/35 29/67/35 45/68/35 1040 | f 31/69/36 11/19/36 45/68/36 1041 | f 14/70/37 35/71/37 29/72/37 1042 | f 46/73/38 14/18/38 10/17/38 1043 | f 16/74/39 47/75/39 17/76/39 1044 | f 48/77/40 49/78/40 50/79/40 1045 | f 48/77/41 50/79/41 51/80/41 1046 | f 15/22/42 52/81/42 51/80/42 1047 | f 51/80/43 16/23/12 15/22/11 1048 | f 16/74/44 42/82/44 47/75/44 1049 | f 53/83/45 54/84/46 47/75/47 1050 | f 35/85/48 38/86/48 27/87/48 1051 | f 55/88/49 53/89/49 56/90/49 1052 | f 55/91/50 54/84/50 53/83/50 1053 | f 42/92/51 44/93/51 57/94/51 1054 | f 48/95/52 51/96/52 40/61/52 1055 | f 58/97/53 59/98/53 60/99/53 1056 | f 2/100/54 59/101/54 61/102/54 1057 | f 62/103/55 13/104/55 11/105/55 1058 | f 19/106/56 63/107/56 11/19/56 1059 | f 62/108/57 15/22/57 13/21/57 1060 | f 15/22/58 62/108/58 52/81/58 1061 | f 17/24/59 64/109/59 12/20/59 1062 | f 12/20/60 15/22/60 17/24/60 1063 | f 62/103/61 11/105/61 63/110/61 1064 | f 18/111/62 63/107/62 19/106/62 1065 | f 62/108/63 63/107/63 52/81/63 1066 | f 40/112/64 52/81/64 63/107/64 1067 | f 18/111/65 40/112/65 63/107/65 1068 | f 11/19/66 31/69/66 19/106/66 1069 | f 1/113/67 8/114/67 2/115/67 1070 | f 2/116/68 65/117/68 9/44/68 1071 | f 65/118/69 2/119/69 61/120/69 1072 | f 58/97/70 61/121/70 59/98/70 1073 | f 39/122/71 65/123/71 66/124/71 1074 | f 30/125/72 58/126/72 8/114/72 1075 | f 5/5/73 8/10/73 6/6/73 1076 | f 58/126/74 30/125/74 66/127/74 1077 | f 2/115/75 58/126/75 60/128/75 1078 | f 64/129/76 17/76/77 67/130/78 1079 | f 11/19/79 14/18/79 45/68/79 1080 | f 31/131/80 45/132/80 29/133/80 1081 | f 60/134/81 59/135/81 2/136/81 1082 | f 12/137/82 64/138/82 46/139/82 1083 | f 67/140/83 46/141/83 64/142/83 1084 | f 6/143/84 7/144/84 9/145/84 1085 | f 9/12/85 3/3/85 2/2/85 1086 | f 10/146/86 12/137/86 46/139/86 1087 | f 19/26/87 31/147/87 32/47/87 1088 | f 51/80/88 52/81/88 40/112/88 1089 | f 32/50/89 9/44/89 65/117/89 1090 | f 4/51/90 31/45/90 29/148/90 1091 | f 51/80/91 50/79/91 16/23/91 1092 | f 67/149/92 36/150/92 46/151/92 1093 | f 8/114/93 58/126/93 2/115/93 1094 | f 29/39/94 35/152/94 27/40/94 1095 | f 65/123/95 61/121/95 58/97/95 1096 | f 39/153/96 20/27/96 32/47/96 1097 | f 17/76/77 47/75/97 67/130/78 1098 | f 54/84/98 36/154/98 67/130/98 1099 | f 46/155/99 36/156/99 35/157/99 1100 | f 68/158/100 69/159/100 70/160/100 1101 | f 32/161/101 65/123/101 39/122/101 1102 | f 28/38/102 4/162/102 29/39/102 1103 | f 48/95/103 41/63/103 71/163/103 1104 | f 44/66/104 43/65/104 71/163/104 1105 | f 41/63/105 48/95/105 40/61/105 1106 | f 54/84/106 67/130/106 47/75/106 1107 | f 50/164/107 72/165/107 43/166/107 1108 | f 49/167/108 72/165/108 50/164/108 1109 | f 37/168/109 36/154/109 54/84/109 1110 | f 50/169/110 43/170/110 16/74/110 1111 | f 34/171/111 73/172/111 41/173/111 1112 | f 34/171/112 74/174/112 73/172/112 1113 | f 72/175/113 49/176/113 48/177/113 1114 | f 72/175/114 48/177/114 71/178/114 1115 | f 72/179/115 71/180/115 43/181/115 1116 | f 22/29/116 21/28/116 56/90/116 1117 | f 21/182/117 27/87/117 38/86/117 1118 | f 4/162/118 28/38/118 24/183/118 1119 | f 38/55/119 37/57/119 75/184/119 1120 | f 39/122/120 66/124/120 26/185/120 1121 | f 38/186/121 75/187/121 21/188/121 1122 | f 21/28/122 75/189/122 56/90/122 1123 | f 43/170/123 42/82/123 16/74/123 1124 | f 22/29/124 33/190/124 20/191/124 1125 | f 20/191/125 39/59/125 22/29/125 1126 | f 39/59/126 24/58/126 23/30/126 1127 | f 5/5/127 25/34/127 30/192/127 1128 | f 47/75/47 42/82/128 53/83/45 1129 | f 39/193/129 26/35/129 24/32/129 1130 | f 34/171/130 33/190/130 74/174/130 1131 | f 21/28/131 23/30/131 27/36/131 1132 | f 42/92/132 57/94/132 53/89/132 1133 | f 53/89/133 57/94/133 56/90/133 1134 | f 71/163/134 41/63/134 73/194/134 1135 | f 74/174/135 33/190/135 22/29/135 1136 | f 55/91/136 37/168/136 54/84/136 1137 | f 76/195/137 74/196/137 22/197/137 1138 | f 55/198/138 75/184/138 37/57/138 1139 | f 75/184/139 55/198/139 56/199/139 1140 | f 26/41/140 66/200/140 30/42/140 1141 | f 76/201/141 22/202/141 56/203/141 1142 | f 71/163/142 73/194/142 44/66/142 1143 | f 76/204/143 56/90/143 57/94/143 1144 | f 76/204/144 57/94/144 73/172/144 1145 | f 73/172/145 57/94/145 44/93/145 1146 | f 74/174/146 76/204/146 73/172/146 1147 | f 5/5/147 30/192/147 8/10/147 1148 | f 46/205/148 35/206/148 14/207/148 1149 | f 58/97/149 66/124/149 65/123/149 1150 | f 77/208/1 78/209/1 79/210/1 1151 | f 80/211/2 81/212/2 82/213/2 1152 | f 79/214/3 83/215/3 77/216/3 1153 | f 84/217/4 77/216/4 82/213/4 1154 | f 83/218/5 79/210/5 85/219/5 1155 | f 83/215/6 82/213/6 77/216/6 1156 | f 86/220/7 87/221/7 88/222/7 1157 | f 89/223/8 88/222/8 87/221/8 1158 | f 86/224/9 90/225/9 87/226/9 1159 | f 88/227/10 89/228/10 91/229/10 1160 | f 91/229/11 92/230/12 93/231/13 1161 | f 94/232/14 95/233/14 96/234/14 1162 | f 97/235/15 98/236/15 99/237/15 1163 | f 80/238/16 100/239/16 101/240/16 1164 | f 81/212/17 80/211/17 101/241/17 1165 | f 101/240/18 100/239/18 102/242/18 1166 | f 103/243/19 99/237/19 104/244/19 1167 | f 104/245/20 105/246/20 103/247/20 1168 | f 102/248/21 106/249/21 101/250/21 1169 | f 85/251/22 107/252/22 82/253/22 1170 | f 95/233/23 108/254/23 96/234/23 1171 | f 94/232/24 96/234/24 109/255/24 1172 | f 94/232/25 109/255/25 110/256/25 1173 | f 107/252/26 85/251/26 108/257/26 1174 | f 80/258/27 82/253/27 107/252/27 1175 | f 111/259/28 112/260/28 113/261/28 1176 | f 114/262/29 111/263/29 113/264/29 1177 | f 100/265/30 104/244/30 99/237/30 1178 | f 115/266/31 99/237/31 98/236/31 1179 | f 110/256/32 116/267/32 94/232/32 1180 | f 116/268/33 110/269/33 117/270/33 1181 | f 118/271/34 119/272/34 120/273/34 1182 | f 90/225/35 105/274/35 121/275/35 1183 | f 107/276/36 87/226/36 121/275/36 1184 | f 90/277/37 111/278/37 105/279/37 1185 | f 122/280/38 90/225/38 86/224/38 1186 | f 92/281/39 123/282/39 93/283/39 1187 | f 124/284/40 125/285/40 126/286/40 1188 | f 124/284/41 126/286/41 127/287/41 1189 | f 91/229/42 128/288/42 127/287/42 1190 | f 127/287/43 92/230/12 91/229/11 1191 | f 92/281/44 118/289/44 123/282/44 1192 | f 129/290/45 130/291/46 123/282/47 1193 | f 111/292/48 114/293/48 103/294/48 1194 | f 131/295/49 129/296/49 132/297/49 1195 | f 131/298/50 130/291/50 129/290/50 1196 | f 118/299/51 120/300/51 133/301/51 1197 | f 124/302/52 127/303/52 116/268/52 1198 | f 134/304/53 135/305/53 136/306/53 1199 | f 78/307/54 135/308/54 137/309/54 1200 | f 138/310/55 89/311/55 87/312/55 1201 | f 95/313/56 139/314/56 87/226/56 1202 | f 138/315/57 91/229/57 89/228/57 1203 | f 91/229/58 138/315/58 128/288/58 1204 | f 93/231/59 140/316/59 88/227/59 1205 | f 88/227/60 91/229/60 93/231/60 1206 | f 138/310/61 87/312/61 139/317/61 1207 | f 94/318/62 139/314/62 95/313/62 1208 | f 138/315/63 139/314/63 128/288/63 1209 | f 116/319/64 128/288/64 139/314/64 1210 | f 94/318/65 116/319/65 139/314/65 1211 | f 87/226/66 107/276/66 95/313/66 1212 | f 77/320/67 84/321/67 78/322/67 1213 | f 78/323/68 141/324/68 85/251/68 1214 | f 141/325/69 78/326/69 137/327/69 1215 | f 134/304/70 137/328/70 135/305/70 1216 | f 115/329/71 141/330/71 142/331/71 1217 | f 106/332/72 134/333/72 84/321/72 1218 | f 81/212/73 84/217/73 82/213/73 1219 | f 134/333/74 106/332/74 142/334/74 1220 | f 78/322/75 134/333/75 136/335/75 1221 | f 140/336/76 93/283/77 143/337/78 1222 | f 87/226/79 90/225/79 121/275/79 1223 | f 107/338/80 121/339/80 105/340/80 1224 | f 136/341/81 135/342/81 78/343/81 1225 | f 88/344/82 140/345/82 122/346/82 1226 | f 143/347/150 122/348/150 140/349/150 1227 | f 82/350/84 83/351/84 85/352/84 1228 | f 85/219/85 79/210/85 78/209/85 1229 | f 86/353/86 88/344/86 122/346/86 1230 | f 95/233/87 107/354/87 108/254/87 1231 | f 127/287/88 128/288/88 116/319/88 1232 | f 108/257/89 85/251/89 141/324/89 1233 | f 80/258/90 107/252/90 105/355/90 1234 | f 127/287/91 126/286/91 92/230/91 1235 | f 143/356/92 112/357/92 122/358/92 1236 | f 84/321/93 134/333/93 78/322/93 1237 | f 105/246/94 111/359/94 103/247/94 1238 | f 141/330/95 137/328/95 134/304/95 1239 | f 115/360/96 96/234/96 108/254/96 1240 | f 93/283/77 123/282/97 143/337/78 1241 | f 130/291/98 112/361/98 143/337/98 1242 | f 122/362/99 112/363/99 111/364/99 1243 | f 144/365/151 145/366/151 146/367/151 1244 | f 108/368/101 141/330/101 115/329/101 1245 | f 104/245/102 80/369/102 105/246/102 1246 | f 124/302/103 117/270/103 147/370/103 1247 | f 120/273/104 119/272/104 147/370/104 1248 | f 117/270/105 124/302/105 116/268/105 1249 | f 130/291/106 143/337/106 123/282/106 1250 | f 126/371/107 148/372/107 119/373/107 1251 | f 125/374/108 148/372/108 126/371/108 1252 | f 113/375/109 112/361/109 130/291/109 1253 | f 126/376/110 119/377/110 92/281/110 1254 | f 110/378/111 149/379/111 117/380/111 1255 | f 110/378/112 150/381/112 149/379/112 1256 | f 148/382/113 125/383/113 124/384/113 1257 | f 148/382/114 124/384/114 147/385/114 1258 | f 148/386/115 147/387/115 119/388/115 1259 | f 98/236/116 97/235/116 132/297/116 1260 | f 97/389/117 103/294/117 114/293/117 1261 | f 80/369/118 104/245/118 100/390/118 1262 | f 114/262/119 113/264/119 151/391/119 1263 | f 115/329/120 142/331/120 102/392/120 1264 | f 114/393/121 151/394/121 97/395/121 1265 | f 97/235/122 151/396/122 132/297/122 1266 | f 119/377/123 118/289/123 92/281/123 1267 | f 98/236/124 109/397/124 96/398/124 1268 | f 96/398/125 115/266/125 98/236/125 1269 | f 115/266/126 100/265/126 99/237/126 1270 | f 81/212/127 101/241/127 106/399/127 1271 | f 123/282/47 118/289/128 129/290/45 1272 | f 115/400/129 102/242/129 100/239/129 1273 | f 110/378/130 109/397/130 150/381/130 1274 | f 97/235/131 99/237/131 103/243/131 1275 | f 118/299/132 133/301/132 129/296/132 1276 | f 129/296/133 133/301/133 132/297/133 1277 | f 147/370/134 117/270/134 149/401/134 1278 | f 150/381/135 109/397/135 98/236/135 1279 | f 131/298/136 113/375/136 130/291/136 1280 | f 152/402/137 150/403/137 98/404/137 1281 | f 131/405/138 151/391/138 113/264/138 1282 | f 151/391/139 131/405/139 132/406/139 1283 | f 102/248/140 142/407/140 106/249/140 1284 | f 152/408/141 98/409/141 132/410/141 1285 | f 147/370/142 149/401/142 120/273/142 1286 | f 152/411/143 132/297/143 133/301/143 1287 | f 152/411/144 133/301/144 149/379/144 1288 | f 149/379/145 133/301/145 120/300/145 1289 | f 150/381/146 152/411/146 149/379/146 1290 | f 81/212/147 106/399/147 84/217/147 1291 | f 122/412/148 111/413/148 90/414/148 1292 | f 134/304/149 142/331/149 141/330/149 1293 | f 153/415/1 154/416/1 155/417/1 1294 | f 156/418/2 157/419/2 158/420/2 1295 | f 155/421/3 159/422/3 153/423/3 1296 | f 160/424/4 153/423/4 158/420/4 1297 | f 159/425/5 155/417/5 161/426/5 1298 | f 159/422/6 158/420/6 153/423/6 1299 | f 162/427/7 163/428/7 164/429/7 1300 | f 165/430/8 164/429/8 163/428/8 1301 | f 162/431/9 166/432/9 163/433/9 1302 | f 164/434/10 165/435/10 167/436/10 1303 | f 167/436/11 168/437/12 169/438/13 1304 | f 170/439/14 171/440/14 172/441/14 1305 | f 173/442/15 174/443/15 175/444/15 1306 | f 156/445/16 176/446/16 177/447/16 1307 | f 157/419/17 156/418/17 177/448/17 1308 | f 177/447/18 176/446/18 178/449/18 1309 | f 179/450/19 175/444/19 180/451/19 1310 | f 180/452/20 181/453/20 179/454/20 1311 | f 178/455/21 182/456/21 177/457/21 1312 | f 161/458/22 183/459/22 158/460/22 1313 | f 171/440/23 184/461/23 172/441/23 1314 | f 170/439/24 172/441/24 185/462/24 1315 | f 170/439/25 185/462/25 186/463/25 1316 | f 183/459/26 161/458/26 184/464/26 1317 | f 156/465/27 158/460/27 183/459/27 1318 | f 187/466/28 188/467/28 189/468/28 1319 | f 190/469/29 187/470/29 189/471/29 1320 | f 176/472/30 180/451/30 175/444/30 1321 | f 191/473/31 175/444/31 174/443/31 1322 | f 186/463/32 192/474/32 170/439/32 1323 | f 192/475/33 186/476/33 193/477/33 1324 | f 194/478/34 195/479/34 196/480/34 1325 | f 166/432/35 181/481/35 197/482/35 1326 | f 183/483/36 163/433/36 197/482/36 1327 | f 166/484/37 187/485/37 181/486/37 1328 | f 198/487/38 166/432/38 162/431/38 1329 | f 168/488/39 199/489/39 169/490/39 1330 | f 200/491/40 201/492/40 202/493/40 1331 | f 200/491/41 202/493/41 203/494/41 1332 | f 167/436/42 204/495/42 203/494/42 1333 | f 203/494/43 168/437/12 167/436/11 1334 | f 168/488/44 194/496/44 199/489/44 1335 | f 205/497/45 206/498/46 199/489/47 1336 | f 187/499/48 190/500/48 179/501/48 1337 | f 207/502/49 205/503/49 208/504/49 1338 | f 207/505/50 206/498/50 205/497/50 1339 | f 194/506/51 196/507/51 209/508/51 1340 | f 200/509/52 203/510/52 192/475/52 1341 | f 210/511/53 211/512/53 212/513/53 1342 | f 154/514/54 211/515/54 213/516/54 1343 | f 214/517/55 165/518/55 163/519/55 1344 | f 171/520/56 215/521/56 163/433/56 1345 | f 214/522/57 167/436/57 165/435/57 1346 | f 167/436/58 214/522/58 204/495/58 1347 | f 169/438/59 216/523/59 164/434/59 1348 | f 164/434/60 167/436/60 169/438/60 1349 | f 214/517/61 163/519/61 215/524/61 1350 | f 170/525/62 215/521/62 171/520/62 1351 | f 214/522/63 215/521/63 204/495/63 1352 | f 192/526/64 204/495/64 215/521/64 1353 | f 170/525/65 192/526/65 215/521/65 1354 | f 163/433/66 183/483/66 171/520/66 1355 | f 153/527/67 160/528/67 154/529/67 1356 | f 154/530/68 217/531/68 161/458/68 1357 | f 217/532/69 154/533/69 213/534/69 1358 | f 210/511/70 213/535/70 211/512/70 1359 | f 191/536/71 217/537/71 218/538/71 1360 | f 182/539/72 210/540/72 160/528/72 1361 | f 157/419/73 160/424/73 158/420/73 1362 | f 210/540/74 182/539/74 218/541/74 1363 | f 154/529/75 210/540/75 212/542/75 1364 | f 216/543/76 169/490/77 219/544/78 1365 | f 163/433/79 166/432/79 197/482/79 1366 | f 183/545/80 197/546/80 181/547/80 1367 | f 212/548/81 211/549/81 154/550/81 1368 | f 164/551/82 216/552/82 198/553/82 1369 | f 219/554/83 198/555/83 216/556/83 1370 | f 158/557/84 159/558/84 161/559/84 1371 | f 161/426/85 155/417/85 154/416/85 1372 | f 162/560/86 164/551/86 198/553/86 1373 | f 171/440/87 183/561/87 184/461/87 1374 | f 203/494/88 204/495/88 192/526/88 1375 | f 184/464/89 161/458/89 217/531/89 1376 | f 156/465/90 183/459/90 181/562/90 1377 | f 203/494/91 202/493/91 168/437/91 1378 | f 219/563/92 188/564/92 198/565/92 1379 | f 160/528/93 210/540/93 154/529/93 1380 | f 181/453/94 187/566/94 179/454/94 1381 | f 217/537/95 213/535/95 210/511/95 1382 | f 191/567/96 172/441/96 184/461/96 1383 | f 169/490/77 199/489/97 219/544/78 1384 | f 206/498/98 188/568/98 219/544/98 1385 | f 198/569/99 188/570/99 187/571/99 1386 | f 220/572/152 221/573/152 222/574/152 1387 | f 184/575/101 217/537/101 191/536/101 1388 | f 180/452/102 156/576/102 181/453/102 1389 | f 200/509/103 193/477/103 223/577/103 1390 | f 196/480/104 195/479/104 223/577/104 1391 | f 193/477/105 200/509/105 192/475/105 1392 | f 206/498/106 219/544/106 199/489/106 1393 | f 202/578/107 224/579/107 195/580/107 1394 | f 201/581/108 224/579/108 202/578/108 1395 | f 189/582/109 188/568/109 206/498/109 1396 | f 202/583/110 195/584/110 168/488/110 1397 | f 186/585/111 225/586/111 193/587/111 1398 | f 186/585/112 226/588/112 225/586/112 1399 | f 224/589/113 201/590/113 200/591/113 1400 | f 224/589/114 200/591/114 223/592/114 1401 | f 224/593/115 223/594/115 195/595/115 1402 | f 174/443/116 173/442/116 208/504/116 1403 | f 173/596/117 179/501/117 190/500/117 1404 | f 156/576/118 180/452/118 176/597/118 1405 | f 190/469/119 189/471/119 227/598/119 1406 | f 191/536/120 218/538/120 178/599/120 1407 | f 190/600/121 227/601/121 173/602/121 1408 | f 173/442/122 227/603/122 208/504/122 1409 | f 195/584/123 194/496/123 168/488/123 1410 | f 174/443/124 185/604/124 172/605/124 1411 | f 172/605/125 191/473/125 174/443/125 1412 | f 191/473/126 176/472/126 175/444/126 1413 | f 157/419/127 177/448/127 182/606/127 1414 | f 199/489/47 194/496/128 205/497/45 1415 | f 191/607/129 178/449/129 176/446/129 1416 | f 186/585/130 185/604/130 226/588/130 1417 | f 173/442/131 175/444/131 179/450/131 1418 | f 194/506/132 209/508/132 205/503/132 1419 | f 205/503/133 209/508/133 208/504/133 1420 | f 223/577/134 193/477/134 225/608/134 1421 | f 226/588/135 185/604/135 174/443/135 1422 | f 207/505/136 189/582/136 206/498/136 1423 | f 228/609/137 226/610/137 174/611/137 1424 | f 207/612/138 227/598/138 189/471/138 1425 | f 227/598/139 207/612/139 208/613/139 1426 | f 178/455/140 218/614/140 182/456/140 1427 | f 228/615/141 174/616/141 208/617/141 1428 | f 223/577/142 225/608/142 196/480/142 1429 | f 228/618/143 208/504/143 209/508/143 1430 | f 228/618/144 209/508/144 225/586/144 1431 | f 225/586/145 209/508/145 196/507/145 1432 | f 226/588/146 228/618/146 225/586/146 1433 | f 157/419/147 182/606/147 160/424/147 1434 | f 198/619/148 187/620/148 166/621/148 1435 | f 210/511/149 218/538/149 217/537/149 1436 | -------------------------------------------------------------------------------- /model/rabbit.obj: -------------------------------------------------------------------------------- 1 | # Blender v2.80 (sub 75) OBJ File: '' 2 | # www.blender.org 3 | o bunny 4 | v -0.742453 1.609671 -0.464081 5 | v -0.601563 1.270567 0.095706 6 | v -0.618275 1.491264 -0.536377 7 | v -0.906933 0.871587 0.143487 8 | v -0.904794 1.186046 0.242196 9 | v -0.765842 1.225610 0.044899 10 | v -0.716920 1.297814 -0.412768 11 | v -0.757130 1.319493 0.106749 12 | v -0.635108 1.175348 0.021413 13 | v -0.336393 0.228689 -0.028815 14 | v -0.342915 0.671753 -0.178419 15 | v -0.270326 0.192775 -0.223988 16 | v -0.258084 0.555946 -0.360484 17 | v -0.562670 0.394029 -0.062396 18 | v 0.205418 0.191151 -0.214766 19 | v 0.264990 0.022680 0.056984 20 | v 0.132863 0.031579 -0.136731 21 | v 0.199504 1.023976 0.044609 22 | v -0.014719 0.910817 -0.108386 23 | v -0.277240 1.004771 0.319983 24 | v -0.466943 0.397854 0.521659 25 | v -0.295335 0.676635 0.551691 26 | v -0.636313 0.591755 0.586774 27 | v -0.738977 0.799995 0.505037 28 | v -0.924240 0.932991 0.588216 29 | v -0.682546 0.916820 0.674516 30 | v -0.810402 0.408682 0.344489 31 | v -0.917679 0.679916 0.338643 32 | v -0.873425 0.572615 0.033362 33 | v -0.894817 1.298702 0.392467 34 | v -0.568434 0.924002 -0.051486 35 | v -0.452894 1.019252 0.049083 36 | v 0.032122 0.968306 0.464086 37 | v 0.276137 0.948711 0.388156 38 | v -0.591005 0.242486 0.136492 39 | v -0.773223 0.062931 0.088905 40 | v -0.688123 0.060460 0.379101 41 | v -0.511057 0.234537 0.253724 42 | v -0.420878 0.987896 0.380664 43 | v 0.484399 0.720774 0.051405 44 | v 0.452382 0.662668 0.415587 45 | v 0.166579 0.038997 0.503881 46 | v 0.355127 0.083849 0.379086 47 | v 0.129867 0.235731 0.629194 48 | v -0.586571 0.665363 -0.136818 49 | v -0.520669 0.171496 -0.014168 50 | v -0.012694 0.042839 0.195043 51 | v 0.529673 0.446717 0.193677 52 | v 0.657213 0.402431 0.143180 53 | v 0.573718 0.183344 0.005130 54 | v 0.449509 0.319258 -0.011256 55 | v 0.358780 0.517683 -0.155903 56 | v -0.316752 0.041050 0.615532 57 | v -0.328081 0.042091 0.240558 58 | v -0.587672 0.086266 0.592765 59 | v -0.306254 0.222150 0.471305 60 | v -0.153947 0.205487 0.599064 61 | v -0.506358 1.309336 0.234715 62 | v -0.104801 1.631653 -0.185819 63 | v -0.253776 1.589849 0.011198 64 | v -0.046766 1.410575 -0.127285 65 | v 0.046438 0.623766 -0.296701 66 | v 0.202590 0.721961 -0.160677 67 | v -0.433744 0.048432 -0.238859 68 | v -0.469051 1.179968 0.144672 69 | v -0.567248 1.270213 0.459926 70 | v -0.440129 0.052720 -0.102691 71 | v -0.726000 0.072000 0.047300 72 | v -0.726500 0.076500 0.053000 73 | v -0.725766 0.074901 0.050642 74 | v 0.433674 0.286628 0.406109 75 | v 0.620532 0.311015 0.340977 76 | v 0.156941 0.510824 0.654615 77 | v 0.076670 0.735346 0.561329 78 | v -0.516261 0.219537 0.441194 79 | v -0.177844 0.573828 0.686082 80 | vt 0.346697 0.401618 81 | vt 0.346697 0.577478 82 | vt 0.295062 0.391607 83 | vt 0.675011 0.127788 84 | vt 0.780424 0.131855 85 | vt 0.767540 0.200031 86 | vt 0.782719 0.408237 87 | vt 0.740100 0.347070 88 | vt 0.829906 0.395079 89 | vt 0.802145 0.191770 90 | vt 0.272272 0.468114 91 | vt 0.310880 0.581865 92 | vt 0.856588 0.837869 93 | vt 0.856588 0.988022 94 | vt 0.791056 0.846718 95 | vt 0.786079 0.971151 96 | vt 0.302074 0.161431 97 | vt 0.337771 0.244524 98 | vt 0.250014 0.287319 99 | vt 0.312287 0.144001 100 | vt 0.266619 0.244553 101 | vt 0.189157 0.065854 102 | vt 0.170583 0.005097 103 | vt 0.224511 0.032321 104 | vt 0.643754 0.683036 105 | vt 0.607629 0.607980 106 | vt 0.758558 0.548859 107 | vt 0.485941 0.292214 108 | vt 0.579244 0.242611 109 | vt 0.547035 0.351106 110 | vt 0.961088 0.237269 111 | vt 0.882897 0.338845 112 | vt 0.829906 0.295774 113 | vt 0.740568 0.000000 114 | vt 0.840316 0.377675 115 | vt 0.475815 0.397860 116 | vt 0.559945 0.436419 117 | vt 0.637945 0.825948 118 | vt 0.718468 0.893280 119 | vt 0.608805 0.909958 120 | vt 0.300585 0.831714 121 | vt 0.375705 0.730784 122 | vt 0.375705 0.840279 123 | vt 0.900647 0.200640 124 | vt 0.863934 0.124178 125 | vt 0.941852 0.207658 126 | vt 0.683114 0.477519 127 | vt 0.786079 0.655295 128 | vt 0.747833 0.728118 129 | vt 0.829906 0.168832 130 | vt 0.941852 0.096027 131 | vt 0.607522 0.963604 132 | vt 0.558717 0.938646 133 | vt 0.607523 0.864246 134 | vt 0.360363 0.677753 135 | vt 0.365188 0.723103 136 | vt 0.292510 0.682447 137 | vt 0.608192 0.385310 138 | vt 0.669267 0.283617 139 | vt 0.628809 0.777126 140 | vt 0.462319 0.436419 141 | vt 0.607629 0.446597 142 | vt 0.545175 0.511110 143 | vt 0.485265 0.716779 144 | vt 0.442975 0.668479 145 | vt 0.555085 0.687060 146 | vt 0.378840 0.342887 147 | vt 0.309114 0.324576 148 | vt 0.254046 0.391607 149 | vt 0.914674 0.946263 150 | vt 0.856588 0.922325 151 | vt 0.914674 0.837869 152 | vt 0.356924 0.175432 153 | vt 0.218590 0.717895 154 | vt 0.158932 0.637850 155 | vt 0.272272 0.664967 156 | vt 0.020220 0.076753 157 | vt 0.000000 0.044579 158 | vt 0.071421 0.000000 159 | vt 0.083633 0.058045 160 | vt 0.091463 0.130031 161 | vt 0.071439 0.712129 162 | vt 0.008718 0.566113 163 | vt 0.126680 0.541047 164 | vt 0.000000 0.898591 165 | vt 0.021605 0.858421 166 | vt 0.094621 0.933060 167 | vt 0.387148 0.327492 168 | vt 0.378840 0.240699 169 | vt 0.431060 0.236754 170 | vt 0.000000 0.478478 171 | vt 0.383067 0.083407 172 | vt 0.449983 0.101407 173 | vt 0.433710 0.190916 174 | vt 0.443887 0.527342 175 | vt 0.378840 0.536863 176 | vt 0.898021 0.643150 177 | vt 0.898360 0.436419 178 | vt 0.926078 0.510294 179 | vt 0.194083 0.808963 180 | vt 0.245989 0.955560 181 | vt 0.173097 0.955560 182 | vt 0.735780 0.901345 183 | vt 0.718468 0.803899 184 | vt 0.777858 0.777126 185 | vt 0.119982 0.298662 186 | vt 0.099785 0.211970 187 | vt 0.170509 0.212579 188 | vt 0.378840 0.131032 189 | vt 0.777858 0.951584 190 | vt 0.030078 0.292436 191 | vt 0.004108 0.162172 192 | vt 0.558717 0.716779 193 | vt 0.530121 0.897987 194 | vt 0.480737 0.886369 195 | vt 0.893114 0.237269 196 | vt 0.841277 0.223097 197 | vt 0.346697 0.427302 198 | vt 0.377218 0.391607 199 | vt 0.377218 0.579667 200 | vt 0.843598 0.480004 201 | vt 0.827922 0.721278 202 | vt 0.846216 0.637805 203 | vt 0.926078 0.712409 204 | vt 0.558717 0.995612 205 | vt 0.443824 0.925547 206 | vt 0.450969 1.000000 207 | vt 0.378840 0.842067 208 | vt 0.272272 0.480153 209 | vt 0.228781 0.485850 210 | vt 0.325658 0.954759 211 | vt 0.272272 0.886599 212 | vt 0.325658 0.840279 213 | vt 0.926078 0.634836 214 | vt 0.966255 0.577728 215 | vt 0.966255 0.731681 216 | vt 0.979813 0.821513 217 | vt 0.930374 0.809413 218 | vt 0.926078 0.731681 219 | vt 0.245989 0.855345 220 | vt 0.265679 0.808963 221 | vt 0.265679 0.894302 222 | vt 0.926078 0.576654 223 | vt 0.969857 0.436419 224 | vt 0.969857 0.577728 225 | vt 0.979813 0.755235 226 | vt 0.657862 0.436419 227 | vt 0.913748 0.000000 228 | vt 1.000000 0.237269 229 | vt 1.000000 0.320063 230 | vt 0.961088 0.260253 231 | vt 0.659200 0.989653 232 | vt 0.786079 0.507278 233 | vt 0.149176 0.391607 234 | vt 0.996748 0.320063 235 | vt 0.996748 0.406337 236 | vt 0.961088 0.360300 237 | vt 0.377383 0.391607 238 | vt 0.377383 0.393448 239 | vt 0.377218 0.392666 240 | vt 0.786079 0.638945 241 | vt 0.718468 0.790427 242 | vt 0.477699 0.611526 243 | vt 0.173097 0.949762 244 | vt 0.097965 0.881224 245 | vt 0.152540 0.808963 246 | vt 0.094621 0.949762 247 | vt 0.062228 0.435104 248 | vt 0.250437 0.808963 249 | vt 0.121025 0.763504 250 | vt 0.670461 0.060321 251 | vt 0.539154 0.097841 252 | vt 0.583788 0.000000 253 | vt 0.605473 0.124867 254 | vt 0.325658 0.902972 255 | vt 0.340579 0.840279 256 | vt 0.372574 0.871300 257 | vt 0.372574 0.945411 258 | vt 0.976817 0.182970 259 | vt 0.941852 0.132253 260 | vt 0.976817 0.071204 261 | vt 0.094621 0.808963 262 | vt 0.607629 0.777126 263 | vt 0.320122 0.632895 264 | vt 0.869033 0.837869 265 | vt 0.992597 0.935674 266 | vt 0.956935 0.887222 267 | vt 0.992597 0.837869 268 | vt 0.425009 0.303116 269 | vt 0.675011 0.140512 270 | vt 0.675011 0.236483 271 | vt 0.829906 0.099045 272 | vt 0.961088 0.408814 273 | vt 0.607629 0.615248 274 | vt 0.914674 0.916414 275 | vt 0.956935 0.837869 276 | vt 0.956935 0.956506 277 | vt 0.272272 0.609559 278 | vt 0.365188 0.581865 279 | vt 0.272272 0.723103 280 | vt 0.558717 0.745148 281 | vt 0.602204 0.716779 282 | vt 0.602204 0.864246 283 | vt 0.554039 0.206668 284 | vt 0.998055 0.071204 285 | vt 0.941852 0.071204 286 | vt 0.979931 0.000000 287 | vn 0.7354 0.6455 0.2059 288 | vn -0.8211 0.1760 -0.5430 289 | vn -0.6156 -0.1768 -0.7679 290 | vn -0.9965 0.0819 0.0160 291 | vn 0.7547 -0.5803 -0.3059 292 | vn -0.9875 -0.1008 -0.1215 293 | vn -0.9472 -0.1151 -0.2994 294 | vn -0.9254 -0.1056 -0.3640 295 | vn -0.0937 -0.3197 -0.9429 296 | vn 0.0169 -0.3523 -0.9357 297 | vn 0.6793 -0.5477 -0.4885 298 | vn -0.2350 0.9093 -0.3435 299 | vn 0.1485 -0.1958 0.9693 300 | vn -0.5528 -0.8281 0.0928 301 | vn -0.9989 0.0199 -0.0416 302 | vn -0.2664 -0.7499 0.6056 303 | vn -0.6833 -0.2555 0.6840 304 | vn -0.9299 -0.3679 -0.0055 305 | vn -0.2684 0.4713 0.8401 306 | vn -0.0731 0.2599 -0.9629 307 | vn 0.2106 0.9739 -0.0845 308 | vn 0.0467 0.9876 0.1497 309 | vn 0.1352 0.9737 0.1832 310 | vn 0.4300 0.3548 -0.8301 311 | vn -0.4933 -0.0453 -0.8687 312 | vn -0.7134 0.6670 0.2149 313 | vn -0.4916 0.7796 0.3881 314 | vn -0.6675 -0.0372 0.7437 315 | vn -0.0271 0.4730 0.8807 316 | vn 0.7288 0.6846 -0.0126 317 | vn 0.8339 0.5289 0.1577 318 | vn 0.5729 -0.3616 0.7356 319 | vn -0.4236 -0.2741 -0.8634 320 | vn -0.1676 0.3195 -0.9327 321 | vn -0.5359 -0.6330 -0.5587 322 | vn -0.0113 -0.2138 -0.9768 323 | vn -0.0711 -0.9975 0.0027 324 | vn -0.1277 0.5631 -0.8164 325 | vn 0.6393 0.5154 -0.5706 326 | vn 0.6866 -0.1963 -0.7000 327 | vn 0.6879 -0.5397 -0.4854 328 | vn -0.0610 -0.9979 0.0230 329 | vn 0.0020 -1.0000 -0.0028 330 | vn -0.4339 -0.8693 0.2369 331 | vn 0.0379 0.6212 0.7828 332 | vn -0.1648 -0.9863 0.0022 333 | vn -0.0315 -0.5412 0.8403 334 | vn 0.9365 -0.0268 -0.3497 335 | vn 0.7928 -0.2842 0.5392 336 | vn -0.2846 -0.3145 -0.9056 337 | vn -0.0674 0.8273 -0.5577 338 | vn 0.0061 0.2734 -0.9619 339 | vn 0.2254 -0.1007 -0.9690 340 | vn 0.4038 -0.0248 -0.9145 341 | vn 0.1738 -0.0958 -0.9801 342 | vn 0.0158 -0.4451 -0.8954 343 | vn -0.0599 0.8407 -0.5382 344 | vn 0.2800 0.5416 -0.7926 345 | vn 0.4811 0.3490 -0.8042 346 | vn 0.5511 0.4043 -0.7300 347 | vn 0.5285 0.4809 -0.6996 348 | vn -0.0852 0.3860 -0.9185 349 | vn 0.2978 0.8479 0.4387 350 | vn 0.5418 0.3900 -0.7445 351 | vn -0.1480 -0.6290 -0.7632 352 | vn 0.5329 0.3445 0.7729 353 | vn 0.8940 0.4190 0.1585 354 | vn 0.0027 0.9973 0.0739 355 | vn -0.7884 0.3878 -0.4775 356 | vn 0.0476 0.9819 0.1834 357 | vn -0.6292 0.7445 0.2233 358 | vn -0.0351 -0.9989 0.0298 359 | vn -0.1549 -0.2740 -0.9492 360 | vn -0.5563 0.2953 -0.7768 361 | vn -0.6747 0.6356 -0.3753 362 | vn -0.5212 0.6473 -0.5562 363 | vn -0.8350 -0.5499 -0.0218 364 | vn -0.3813 -0.9060 -0.1837 365 | vn 0.9615 -0.2506 -0.1129 366 | vn -0.3049 0.9130 -0.2712 367 | vn -0.0495 0.7529 -0.6562 368 | vn 0.8518 0.0077 -0.5237 369 | vn 0.5157 0.4757 -0.7126 370 | vn -0.5121 0.2458 -0.8230 371 | vn -0.0699 -0.1822 -0.9808 372 | vn -0.4685 0.3013 -0.8305 373 | vn 0.2464 0.8767 -0.4132 374 | vn -0.7093 -0.6726 -0.2107 375 | vn 0.6292 -0.3135 0.7112 376 | vn -0.0739 0.9921 0.1010 377 | vn -0.0358 -0.9992 0.0182 378 | vn -0.0408 -0.9990 -0.0176 379 | vn -0.5091 0.6623 -0.5497 380 | vn -0.3574 0.7175 -0.5979 381 | vn 0.9857 0.1474 -0.0812 382 | vn -0.9905 -0.0668 -0.1201 383 | vn 0.9249 -0.0555 0.3761 384 | vn 0.5942 -0.3280 0.7344 385 | vn 0.9675 0.2224 0.1205 386 | vn -0.0020 -0.9995 -0.0303 387 | vn 0.6541 -0.7328 0.1874 388 | vn 0.9330 -0.3598 0.0067 389 | vn -0.0487 -0.9988 0.0058 390 | vn 0.4662 -0.8839 0.0374 391 | vn 0.4655 0.3642 0.8067 392 | vn 0.2619 0.4487 0.8545 393 | vn 0.4454 0.7784 0.4424 394 | vn 0.1202 0.7660 0.6315 395 | vn 0.3478 -0.2549 0.9023 396 | vn 0.1143 -0.1757 0.9778 397 | vn -0.2994 -0.7920 0.5321 398 | vn -0.7466 0.4947 0.4448 399 | vn -0.6863 0.7262 0.0391 400 | vn 0.7128 0.1792 0.6781 401 | vn -0.9632 0.2688 -0.0052 402 | vn -0.1267 -0.3787 0.9168 403 | vn 0.2918 -0.9513 0.0990 404 | vn -0.2939 0.5621 0.7731 405 | vn 0.2711 0.5452 0.7933 406 | vn 0.1115 0.4103 0.9051 407 | vn -0.9966 0.0825 0.0043 408 | vn -0.0063 -0.9999 -0.0088 409 | vn 0.5722 -0.7518 0.3277 410 | vn 0.3005 0.4158 0.8584 411 | vn -0.3880 -0.5795 0.7167 412 | vn 0.2228 -0.1238 0.9670 413 | vn -0.4965 0.5582 0.6647 414 | vn 0.6439 -0.0513 0.7634 415 | vn -0.0824 0.3704 0.9252 416 | vn -0.0038 -0.9926 0.1217 417 | vn -0.1323 0.7280 0.6726 418 | vn -0.7048 0.6634 0.2512 419 | vn -0.0999 0.7701 0.6300 420 | vn -0.1236 0.5442 0.8298 421 | vn -0.7829 -0.0901 0.6156 422 | vn 0.6010 -0.1320 0.7883 423 | vn -0.6413 -0.2156 0.7364 424 | vn 0.0488 -0.2266 0.9728 425 | vn -0.0965 -0.0822 0.9919 426 | vn 0.1641 0.4279 0.8888 427 | vn -0.7827 0.5218 -0.3392 428 | vn -0.9179 -0.2415 -0.3148 429 | vn 0.9579 0.0856 0.2739 430 | s off 431 | f 1/1/1 2/2/1 3/3/1 432 | f 4/4/2 5/5/2 6/6/2 433 | f 3/7/3 7/8/3 1/9/3 434 | f 8/10/4 1/9/4 6/6/4 435 | f 7/11/5 3/3/5 9/12/5 436 | f 7/8/6 6/6/6 1/9/6 437 | f 10/13/7 11/14/7 12/15/7 438 | f 13/16/8 12/15/8 11/14/8 439 | f 10/17/9 14/18/9 11/19/9 440 | f 12/20/10 13/21/10 15/22/10 441 | f 15/22/11 16/23/11 17/24/11 442 | f 18/25/12 19/26/12 20/27/12 443 | f 21/28/13 22/29/13 23/30/13 444 | f 4/31/14 24/32/14 25/33/14 445 | f 5/5/15 4/4/15 25/34/15 446 | f 25/33/16 24/32/16 26/35/16 447 | f 27/36/17 23/30/17 28/37/17 448 | f 28/38/18 29/39/18 27/40/18 449 | f 26/41/19 30/42/19 25/43/19 450 | f 9/44/20 31/45/20 6/46/20 451 | f 19/26/21 32/47/21 20/27/21 452 | f 18/25/22 20/27/22 33/48/22 453 | f 18/25/23 33/48/23 34/49/23 454 | f 31/45/24 9/44/24 32/50/24 455 | f 4/51/25 6/46/25 31/45/25 456 | f 35/52/26 36/53/26 37/54/26 457 | f 38/55/27 35/56/27 37/57/27 458 | f 24/58/28 28/37/28 23/30/28 459 | f 39/59/29 23/30/29 22/29/29 460 | f 34/49/30 40/60/30 18/25/30 461 | f 40/61/31 34/62/31 41/63/31 462 | f 42/64/32 43/65/32 44/66/32 463 | f 14/18/33 29/67/33 45/68/33 464 | f 31/69/34 11/19/34 45/68/34 465 | f 14/70/35 35/71/35 29/72/35 466 | f 46/73/36 14/18/36 10/17/36 467 | f 16/74/37 47/75/37 17/76/37 468 | f 48/77/38 49/78/38 50/79/38 469 | f 48/77/39 50/79/39 51/80/39 470 | f 15/22/40 52/81/40 51/80/40 471 | f 51/80/41 16/23/41 15/22/41 472 | f 16/74/42 42/82/42 47/75/42 473 | f 53/83/43 54/84/43 47/75/43 474 | f 35/85/44 38/86/44 27/87/44 475 | f 55/88/45 53/89/45 56/90/45 476 | f 55/91/46 54/84/46 53/83/46 477 | f 42/92/47 44/93/47 57/94/47 478 | f 48/95/48 51/96/48 40/61/48 479 | f 58/97/49 59/98/49 60/99/49 480 | f 2/100/50 59/101/50 61/102/50 481 | f 62/103/51 13/104/51 11/105/51 482 | f 19/106/52 63/107/52 11/19/52 483 | f 62/108/53 15/22/53 13/21/53 484 | f 15/22/54 62/108/54 52/81/54 485 | f 17/24/55 64/109/55 12/20/55 486 | f 12/20/56 15/22/56 17/24/56 487 | f 62/103/57 11/105/57 63/110/57 488 | f 18/111/58 63/107/58 19/106/58 489 | f 62/108/59 63/107/59 52/81/59 490 | f 40/112/60 52/81/60 63/107/60 491 | f 18/111/61 40/112/61 63/107/61 492 | f 11/19/62 31/69/62 19/106/62 493 | f 1/113/63 8/114/63 2/115/63 494 | f 2/116/64 65/117/64 9/44/64 495 | f 65/118/65 2/119/65 61/120/65 496 | f 58/97/66 61/121/66 59/98/66 497 | f 39/122/67 65/123/67 66/124/67 498 | f 30/125/68 58/126/68 8/114/68 499 | f 5/5/69 8/10/69 6/6/69 500 | f 58/126/70 30/125/70 66/127/70 501 | f 2/115/71 58/126/71 60/128/71 502 | f 64/129/72 17/76/72 67/130/72 503 | f 11/19/73 14/18/73 45/68/73 504 | f 31/131/74 45/132/74 29/133/74 505 | f 60/134/75 59/135/75 2/136/75 506 | f 12/137/76 64/138/76 46/139/76 507 | f 67/140/77 46/141/77 64/142/77 508 | f 6/143/78 7/144/78 9/145/78 509 | f 9/12/79 3/3/79 2/2/79 510 | f 10/146/80 12/137/80 46/139/80 511 | f 19/26/81 31/147/81 32/47/81 512 | f 51/80/82 52/81/82 40/112/82 513 | f 32/50/83 9/44/83 65/117/83 514 | f 4/51/84 31/45/84 29/148/84 515 | f 51/80/85 50/79/85 16/23/85 516 | f 67/149/86 36/150/86 46/151/86 517 | f 8/114/87 58/126/87 2/115/87 518 | f 29/39/88 35/152/88 27/40/88 519 | f 65/123/89 61/121/89 58/97/89 520 | f 39/153/90 20/27/90 32/47/90 521 | f 17/76/91 47/75/91 67/130/91 522 | f 54/84/92 36/154/92 67/130/92 523 | f 46/155/93 36/156/93 35/157/93 524 | f 68/158/94 69/159/94 70/160/94 525 | f 32/161/95 65/123/95 39/122/95 526 | f 28/38/96 4/162/96 29/39/96 527 | f 48/95/97 41/63/97 71/163/97 528 | f 44/66/98 43/65/98 71/163/98 529 | f 41/63/99 48/95/99 40/61/99 530 | f 54/84/100 67/130/100 47/75/100 531 | f 50/164/101 72/165/101 43/166/101 532 | f 49/167/102 72/165/102 50/164/102 533 | f 37/168/103 36/154/103 54/84/103 534 | f 50/169/104 43/170/104 16/74/104 535 | f 34/171/105 73/172/105 41/173/105 536 | f 34/171/106 74/174/106 73/172/106 537 | f 72/175/107 49/176/107 48/177/107 538 | f 72/175/108 48/177/108 71/178/108 539 | f 72/179/109 71/180/109 43/181/109 540 | f 22/29/110 21/28/110 56/90/110 541 | f 21/182/111 27/87/111 38/86/111 542 | f 4/162/112 28/38/112 24/183/112 543 | f 38/55/113 37/57/113 75/184/113 544 | f 39/122/114 66/124/114 26/185/114 545 | f 38/186/115 75/187/115 21/188/115 546 | f 21/28/116 75/189/116 56/90/116 547 | f 43/170/117 42/82/117 16/74/117 548 | f 22/29/118 33/190/118 20/191/118 549 | f 20/191/119 39/59/119 22/29/119 550 | f 39/59/120 24/58/120 23/30/120 551 | f 5/5/121 25/34/121 30/192/121 552 | f 47/75/122 42/82/122 53/83/122 553 | f 39/193/123 26/35/123 24/32/123 554 | f 34/171/124 33/190/124 74/174/124 555 | f 21/28/125 23/30/125 27/36/125 556 | f 42/92/126 57/94/126 53/89/126 557 | f 53/89/127 57/94/127 56/90/127 558 | f 71/163/128 41/63/128 73/194/128 559 | f 74/174/129 33/190/129 22/29/129 560 | f 55/91/130 37/168/130 54/84/130 561 | f 76/195/131 74/196/131 22/197/131 562 | f 55/198/132 75/184/132 37/57/132 563 | f 75/184/133 55/198/133 56/199/133 564 | f 26/41/134 66/200/134 30/42/134 565 | f 76/201/135 22/202/135 56/203/135 566 | f 71/163/136 73/194/136 44/66/136 567 | f 76/204/137 56/90/137 57/94/137 568 | f 76/204/138 57/94/138 73/172/138 569 | f 73/172/139 57/94/139 44/93/139 570 | f 74/174/140 76/204/140 73/172/140 571 | f 5/5/141 30/192/141 8/10/141 572 | f 46/205/142 35/206/142 14/207/142 573 | f 58/97/143 66/124/143 65/123/143 574 | -------------------------------------------------------------------------------- /resources/cape_hill.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cewein/nerv_pathtracer/ead65f70d292fb1e8b396ad6fa007580fdb0b939/resources/cape_hill.jpg -------------------------------------------------------------------------------- /resources/checker-map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cewein/nerv_pathtracer/ead65f70d292fb1e8b396ad6fa007580fdb0b939/resources/checker-map.png -------------------------------------------------------------------------------- /resources/evening_road_01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cewein/nerv_pathtracer/ead65f70d292fb1e8b396ad6fa007580fdb0b939/resources/evening_road_01.jpg -------------------------------------------------------------------------------- /resources/greenwich_park_02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cewein/nerv_pathtracer/ead65f70d292fb1e8b396ad6fa007580fdb0b939/resources/greenwich_park_02.jpg -------------------------------------------------------------------------------- /resources/moonless_golf.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cewein/nerv_pathtracer/ead65f70d292fb1e8b396ad6fa007580fdb0b939/resources/moonless_golf.jpg -------------------------------------------------------------------------------- /shader/bvh.glsl: -------------------------------------------------------------------------------- 1 | //? #version 450 2 | //? #include "data.glsl" 3 | //? #include "hit.glsl" 4 | 5 | 6 | bool slabs(in vec3 p0,in vec3 p1,in ray r,in float tmini,in float tmaxi) { 7 | vec3 invRaydir = 1.0/r.direction; 8 | vec3 t0 = (p0 - r.origin) * invRaydir; 9 | vec3 t1 = (p1 - r.origin) * invRaydir; 10 | vec3 tmin = min(t0,t1), tmax = max(t0,t1); 11 | tmini = max(tmin.x,max(tmin.y,max(tmin.z,tmini))); 12 | tmaxi = min(tmax.x,min(tmax.y,min(tmax.z,tmaxi))); 13 | return tmini <= tmaxi; 14 | } 15 | 16 | float bvhTraversal(in ray r, float tmin, float tmax, inout hitRecord hit, inout bool hitAny) 17 | { 18 | //stack traversal without pointer 19 | int stack[32]; 20 | int stackAdrr = 0; 21 | stack[stackAdrr] = 0; 22 | 23 | float closestSoFar = tmax; 24 | 25 | vec3 invDir = 1.0/r.direction; 26 | 27 | while(stackAdrr >= 0 && stackAdrr < 32) 28 | { 29 | linearBVHNode node = bvh[stack[stackAdrr]]; 30 | stackAdrr -= 1; 31 | 32 | if(slabs(node.pMin.xyz, node.pMax.xyz, r, tmin, closestSoFar)) 33 | { 34 | if(node.pMin.w == -1.0 || node.pMax.w == -1.0) 35 | { 36 | int i = node.primitiveOffset; 37 | hitRecord tempHit; 38 | if(hitTriangle(r, tris[i], closestSoFar, tempHit)) 39 | { 40 | hitAny = true; 41 | closestSoFar = tempHit.t; 42 | hit = tempHit; 43 | } 44 | } 45 | 46 | if(node.pMin.w != -1.0) 47 | { 48 | stackAdrr += 1; 49 | stack[stackAdrr] = int(node.pMin.w); 50 | } 51 | if(node.pMax.w != -1.0) 52 | { 53 | stackAdrr += 1; 54 | stack[stackAdrr] = int(node.pMax.w); 55 | } 56 | } 57 | } 58 | 59 | return closestSoFar; 60 | } -------------------------------------------------------------------------------- /shader/commun.glsl: -------------------------------------------------------------------------------- 1 | //? #version 450 2 | //? #include "data.glsl" 3 | 4 | //PSEUDO RANDOM FUNCTION 5 | 6 | float random (vec2 p) { 7 | return fract(43757.5453*sin(dot(p, vec2(12.9898,78.233)))); 8 | } 9 | 10 | vec3 randInUnitSphere(vec2 st) { 11 | float phi = random(st.yx + sin(iTime) + cos(-iTime/tan(iTime))) * 2.0 * 3.14159265; 12 | float theta = random(st.xy + cos(iTime/tan(-iTime)) + sin(-iTime)) * 3.14169265; 13 | return vec3(cos(phi) * sin(theta), cos(theta), sin(phi) * sin(theta)); 14 | } 15 | 16 | vec3 randInUnitDisk(vec2 st) 17 | { 18 | return vec3(random(st.yx + sin(iTime) + cos(-iTime)) ,random(st.xy + cos(iTime) + sin(-iTime)),0.) * 2.0 - 1.0; 19 | } -------------------------------------------------------------------------------- /shader/data.glsl: -------------------------------------------------------------------------------- 1 | //? #version 450 2 | 3 | // DATA STRUCT 4 | layout (location = 0) out vec4 fragColor; 5 | layout (location = 15) uniform mat4 viewMatrix; 6 | layout (location = 20) uniform vec3 cameraTransform; 7 | 8 | layout (location = 28) uniform float fov; 9 | layout (location = 29) uniform float aperture; 10 | layout (location = 30) uniform float focusDistance; 11 | layout (location = 31) uniform ivec2 iResolution; 12 | layout (location = 33) uniform bool moving; 13 | layout (location = 35) uniform bool darkmode; 14 | layout (location = 36) uniform int maxBounce; 15 | 16 | layout (location = 34) uniform float iTime; 17 | 18 | uniform sampler2D background; 19 | uniform sampler2D checkboard; 20 | uniform int nbSphere; 21 | 22 | in vec2 iTexCoord; 23 | 24 | struct ray { 25 | vec3 origin; //origin 26 | vec3 direction; //direction 27 | }; 28 | 29 | struct material { 30 | vec3 color; 31 | float emission; 32 | float roughness; 33 | float metallic; 34 | float refractionIndex; 35 | float transmission; 36 | }; 37 | 38 | material matArr[] = material[6]( 39 | material(vec3(0.75,0.25,0.25),0.0,0.0,1.0,1.2,0.0), 40 | material(vec3(0.25,0.75,0.25),0.0,0.0,0.0,1.2,0.0), 41 | material(vec3(0.75,0.25,0.75),0.0,0.05,0.2,1.2,0.95), 42 | material(vec3(0.75,0.25,0.25),0.0,0.0,0.0,1.4,1.0), 43 | material(vec3(1.0,.1,0.1),2.0,0.0,0.0,1.2,0.0), 44 | material(vec3(.1,0.1,1.0),2.0,0.0,0.0,1.2,0.0) 45 | ); 46 | 47 | struct hitRecord { 48 | float t; 49 | vec3 p; 50 | vec3 normal; 51 | vec2 tex; 52 | material mat; 53 | }; 54 | 55 | struct triangle { 56 | vec4 v1; 57 | vec4 v2; 58 | vec4 v3; 59 | vec2 uv1; 60 | vec2 uv2; 61 | vec2 uv3; 62 | vec2 data; 63 | }; 64 | 65 | struct rectangle 66 | { 67 | vec2 x; 68 | vec2 y; 69 | float k; 70 | int mat; 71 | }; 72 | 73 | struct sphere 74 | { 75 | vec4 pos; 76 | int mat; 77 | }; 78 | 79 | struct linearBVHNode { 80 | vec4 pMin; 81 | vec4 pMax; 82 | int primitiveOffset; 83 | int secondChildOffset; 84 | int nPrimitives; 85 | int axis; 86 | }; 87 | 88 | layout (std430,binding=0) buffer triangleBuffer { 89 | triangle tris[]; 90 | }; 91 | 92 | layout (std430,binding=1) buffer colorBuffer { 93 | vec4 colorBuf[]; 94 | }; 95 | 96 | layout (std430,binding=2) buffer bvhBuffer { 97 | linearBVHNode bvh[]; 98 | }; 99 | 100 | layout (std430,binding=3) buffer materialBuffer { 101 | material matBuf[]; 102 | }; 103 | 104 | layout (std430,binding=4) buffer sphereBuffer { 105 | sphere sphereBuf[]; 106 | }; 107 | 108 | 109 | #define FLT_MAX 3.402823466e+38 110 | #define PI 3.14159265359 111 | #define PHI 1.61803398875 112 | -------------------------------------------------------------------------------- /shader/hit.glsl: -------------------------------------------------------------------------------- 1 | //? #version 450 2 | //? #include "data.glsl" 3 | 4 | vec3 pointAtParameter(ray r, float t) 5 | { 6 | return r.origin + t*r.direction; 7 | } 8 | 9 | bool hitSphere(in ray r, float tmin, float tmax, inout hitRecord hit, sphere s) 10 | { 11 | vec3 oc = r.origin - s.pos.xyz; 12 | float a = dot(r.direction,r.direction); 13 | float b = dot(oc, r.direction); 14 | float c = dot(oc,oc)-s.pos.w*s.pos.w; 15 | float d = b*b - a*c; 16 | if (d > 0.) 17 | { 18 | float temp = (-b - sqrt(b*b-a*c))/a; 19 | if(temp < tmax && temp > tmin) 20 | { 21 | hit.t = temp; 22 | hit.p = pointAtParameter(r,hit.t); 23 | hit.normal = (hit.p - s.pos.xyz) / s.pos.w; 24 | hit.mat = matArr[s.mat]; 25 | return true; 26 | } 27 | } 28 | return false; 29 | } 30 | 31 | bool hitRectangle(ray r, float tmin, float tmax, inout hitRecord hit, rectangle rect) 32 | { 33 | float t = (rect.k-r.origin.z)/r.direction.z; 34 | if(t < tmin || t > tmax) 35 | return false; 36 | float x = r.origin.x + t*r.direction.x; 37 | float y = r.origin.y + t*r.direction.y; 38 | if(x < rect.x.x || x > rect.x.y || y < rect.y.x || y > rect.y.y) 39 | return false; 40 | hit.t = t; 41 | hit.normal = vec3(0.0,0.0,1.0); 42 | hit.p = pointAtParameter(r,hit.t); 43 | hit.mat = matArr[rect.mat]; 44 | return true; 45 | } 46 | 47 | bool hitTriangle(ray r, triangle tris, float tmax, inout hitRecord hit) 48 | { 49 | 50 | vec3 v0 = tris.v1.xyz; 51 | vec3 v1 = tris.v2.xyz; 52 | vec3 v2 = tris.v3.xyz; 53 | //find vectors for two edges sharing vert0 54 | vec3 edge1 = v1 - v0; 55 | vec3 edge2 = v2 - v0; 56 | 57 | // begin calculating determinant - also used to calculate U parameter 58 | vec3 pvec = cross(r.direction, edge2); 59 | // if determinant is near zero, ray lies in plane of triangle 60 | float det = dot(edge1, pvec); 61 | // use backface culling 62 | if (det < 0.00001) 63 | return false; 64 | float inv_det = 1.0 / det; 65 | // calculate distance from vert0 to ray origin 66 | vec3 tvec = r.origin - v0; 67 | // calculate U parameter and test bounds 68 | float u = dot(tvec, pvec) * inv_det; 69 | if (u < 0.0 || u > 1.0f) 70 | return false; 71 | // prepare to test V parameter 72 | vec3 qvec = cross(tvec, edge1); 73 | // calculate V parameter and test bounds 74 | float v = dot(r.direction, qvec) * inv_det; 75 | if (v < 0.0 || u + v > 1.0) 76 | return false; 77 | // calculate t, ray intersects triangle 78 | float t = dot(edge2, qvec) * inv_det; 79 | 80 | // ray intersection 81 | if (t > 0.00001 && t < tmax) 82 | { 83 | hit.t = t; 84 | hit.p = pointAtParameter(r,hit.t); 85 | hit.normal = normalize(cross(v1 - v0, v2 - v0)); 86 | 87 | //using barycentric coordinates we can get good weight for each vertex 88 | float bottom =((v1.y-v2.y)*(v0.x-v2.x)+(v2.x-v1.x)*(v0.y-v2.y)); 89 | float w1 = ((v1.y-v2.y)*(hit.p.x-v2.x)+(v2.x-v1.x)*(hit.p.y-v2.y)) 90 | /bottom; 91 | float w2 = ((v2.y-v0.y)*(hit.p.x-v2.x)+(v0.x-v2.x)*(hit.p.y-v2.y)) 92 | /bottom; 93 | float w3 = 1.0 - w1 - w2; 94 | 95 | //mix all the color from the computed weigth 96 | vec2 uv = (w1*tris.uv1+w2*tris.uv2+w3*tris.uv3)/(w1+w2+w3); 97 | 98 | material mat; 99 | 100 | mat.transmission = 0.0; 101 | mat.color = texture2D(checkboard,uv).xyz; 102 | mat.roughness = 0.0; 103 | mat.refractionIndex = 1.4; 104 | mat.metallic = 0.0; 105 | mat.emission = 0.0; 106 | 107 | hit.mat = mat; 108 | return true; 109 | } 110 | 111 | return false; 112 | 113 | } 114 | 115 | bool hitGround(in ray r, float tmax, inout hitRecord hit) 116 | { 117 | float t = -(r.origin.y-0.1) / r.direction.y; 118 | if (t > 0.0001 && t < tmax) 119 | { 120 | 121 | hit.t = t; 122 | hit.p = pointAtParameter(r,hit.t); 123 | hit.normal = vec3(0., 1., 0.); 124 | 125 | material mat; 126 | 127 | //make the ground a checkboard 128 | if(mod(floor(hit.p.xz), 2.0) == vec2(0.) || mod(floor(hit.p.xz), 2.0) == vec2(1.)) 129 | { 130 | mat.transmission = 0.0; 131 | mat.metallic = 0.0; 132 | } 133 | else 134 | { 135 | mat.transmission = 0.0; 136 | mat.metallic = .95; 137 | } 138 | mat.color = vec3(1.0); 139 | mat.roughness = 0.0; 140 | mat.refractionIndex = 1.4; 141 | 142 | hit.mat = mat; 143 | return true; 144 | } 145 | return false; 146 | } 147 | 148 | vec3 hitSky(in ray r) 149 | { 150 | if(!darkmode) 151 | return texture(background, vec2((atan(r.direction.z, r.direction.x) / 6.283185307179586476925286766559) + 0.5, acos(r.direction.y) / 3.1415926535897932384626433832795)).xyz; 152 | else 153 | return vec3(0.0); 154 | } -------------------------------------------------------------------------------- /shader/raytraced.frag.glsl: -------------------------------------------------------------------------------- 1 | #version 450 core 2 | #define DOF 3 | 4 | #include "data.glsl" 5 | #include "commun.glsl" 6 | #include "hit.glsl" 7 | #include "bvh.glsl" 8 | 9 | 10 | bool noScatter = false; 11 | 12 | bool hit(in ray r, float tmin, float tmax, inout hitRecord hit) 13 | { 14 | 15 | bool hitAny = false; 16 | float closestSoFar = tmax; 17 | 18 | closestSoFar = bvhTraversal(r, tmin, closestSoFar, hit, hitAny); 19 | 20 | hitRecord tempHit; 21 | if(hitGround(r, closestSoFar, tempHit)) 22 | { 23 | hitAny = true; 24 | closestSoFar = tempHit.t; 25 | hit = tempHit; 26 | } 27 | 28 | rectangle rect = rectangle(vec2(-100.25, 100.25), vec2(0.0, 1.0), -1.5 - 0.15, 4); 29 | 30 | if(hitRectangle(r, tmin, closestSoFar, tempHit, rect)) 31 | { 32 | hitAny = true; 33 | closestSoFar = tempHit.t; 34 | hit = tempHit; 35 | noScatter = true; 36 | } 37 | 38 | rect = rectangle(vec2(-100.25, 100.25), vec2(0.0, 1.0), 1.7 + 0.15, 5); 39 | 40 | if(hitRectangle(r, tmin, closestSoFar, tempHit, rect)) 41 | { 42 | hitAny = true; 43 | closestSoFar = tempHit.t; 44 | hit = tempHit; 45 | noScatter = true; 46 | } 47 | 48 | 49 | // sphere s = sphere(vec4(-7.0,0.0,0.0,4.0),3); 50 | // 51 | // if(hitSphere(r,tmin,closestSoFar,tempHit,s)) 52 | // { 53 | // hitAny = true; 54 | // closestSoFar = tempHit.t; 55 | // hit = tempHit; 56 | // noScatter = false; 57 | // } 58 | 59 | return hitAny; 60 | } 61 | 62 | //todo a better getRay function since the focus blur/bokey seem wrongly done 63 | ray getRay(vec2 uv) 64 | { 65 | 66 | vec3 up = viewMatrix[1].xyz; 67 | vec3 right = viewMatrix[0].xyz; 68 | vec3 front = viewMatrix[2].xyz; 69 | 70 | float scale = tan(fov/180.0); 71 | vec2 d = (2.0 * gl_FragCoord.xy/iResolution.x - 1.0); 72 | d.x *= scale; 73 | d.y *= scale; 74 | 75 | vec3 origin = (cameraTransform).xyz; 76 | float lensRaduis = aperture/2.0; 77 | vec3 rd = lensRaduis * randInUnitDisk(uv); 78 | vec3 offset = up * rd.x + right * rd.y; 79 | 80 | vec3 ft = origin + d.y * focusDistance * up + d.x * focusDistance * right + focusDistance * front; 81 | 82 | vec3 direction = normalize(d.x * right + d.y * up + ft - origin - offset); 83 | return ray(origin + offset,direction); 84 | } 85 | 86 | // RAY MATERIAL INTERACTION 87 | vec3 lambert(in hitRecord rec, in vec2 st, inout ray r) 88 | { 89 | vec3 target = rec.normal + randInUnitSphere(st + r.direction.xy); 90 | r = ray(rec.p, target); 91 | return rec.mat.color.xyz; 92 | } 93 | 94 | vec3 metalic(in hitRecord rec, in vec3 unitDirection, in vec2 st, inout ray r) 95 | { 96 | vec3 reflected = reflect(unitDirection, rec.normal); 97 | r = ray(rec.p, reflected + rec.mat.roughness * randInUnitSphere(st + r.direction.xy)); 98 | return rec.mat.color.xyz; 99 | } 100 | 101 | float checkRefract(vec3 v, vec3 n, float niOverNt) 102 | { 103 | vec3 uv = v; 104 | float dt = dot(uv, n); 105 | float discriminant = 1.0 - niOverNt * niOverNt * (1. - dt * dt); 106 | return mix(0.0,1.0, discriminant); 107 | } 108 | 109 | float schlick(float cosine, float refIdx) 110 | { 111 | float r0 = (1. - refIdx) / (1. + refIdx); 112 | r0 = r0 * r0; 113 | return r0 + (1. - r0) * pow((1. - cosine), 5.); 114 | } 115 | 116 | ray dieletric(in hitRecord rec, in vec3 unitDirection, in vec2 st, in ray r) 117 | { 118 | float refractiveIndex = rec.mat.refractionIndex; 119 | vec3 outwardNormal = rec.normal; 120 | vec3 reflected = reflect(unitDirection, rec.normal); 121 | float niOverNt = 1.0 / refractiveIndex; 122 | float cosine = -dot(r.direction, rec.normal) / length(r.direction); 123 | 124 | //we should look into the glsl step function to remove this if 125 | if (dot(unitDirection, rec.normal) > 0.) 126 | { 127 | outwardNormal = -rec.normal; 128 | niOverNt = refractiveIndex; 129 | cosine = refractiveIndex * dot(r.direction, rec.normal) / length(r.direction); 130 | } 131 | 132 | float refProb = mix(1.0, schlick(cosine, refractiveIndex), checkRefract(unitDirection, outwardNormal, niOverNt + sin(iTime))); 133 | 134 | //look if the ray if refracted of reflected (based on the view direction) 135 | r = ray(rec.p, 136 | mix(reflected, 137 | refract(unitDirection, outwardNormal, niOverNt), 138 | step(refProb, random(st.xy + cos(iTime * st.yx))) 139 | ) 140 | ); 141 | 142 | return r; 143 | } 144 | 145 | //TRACER FUNCTION 146 | //todo redo this function 147 | //it work but is poorly done and can be way much better 148 | vec3 trace(ray r, vec2 st) 149 | { 150 | hitRecord hitRec; 151 | 152 | vec3 att = vec3(1.); 153 | vec3 col = vec3(0.0); 154 | 155 | //extrat space for ray 156 | ray tmp; 157 | ray glass; 158 | 159 | for(int i = 0; i < maxBounce; i++) 160 | { 161 | bool asHit = hit(r, 0.00001, FLT_MAX, hitRec); 162 | 163 | //check if as hit sky or emission surface 164 | if(!asHit || hitRec.mat.emission >= 1.0) 165 | { 166 | if(asHit && hitRec.mat.emission >= 1.0) 167 | col = att * hitRec.mat.color * hitRec.mat.emission; 168 | else 169 | col = att * hitSky(r); 170 | break; 171 | } 172 | 173 | vec3 unitDirection = normalize(r.direction); 174 | 175 | glass = dieletric(hitRec, unitDirection, st, r); 176 | tmp = r; 177 | 178 | //get color attenuation by mixing both lambert and metalic mat 179 | vec3 attenuate = mix( 180 | lambert(hitRec,st,r), //ray store in r 181 | metalic(hitRec, unitDirection, st, tmp), //ray store in tmp 182 | hitRec.mat.metallic 183 | ); 184 | 185 | //choose between attenuation or no attenuation 186 | att *= mix( 187 | attenuate, 188 | vec3(1.0), 189 | hitRec.mat.transmission 190 | ); 191 | 192 | //get the new direction if the ray it a metalic or lambert mat 193 | vec3 rayDir = mix(r.direction,tmp.direction,hitRec.mat.metallic); 194 | 195 | //chosse between refraction or reflection 196 | r.direction = mix( 197 | rayDir, 198 | glass.direction, 199 | hitRec.mat.transmission 200 | ); 201 | 202 | } 203 | 204 | //skybox 205 | return col; 206 | } 207 | 208 | void main() 209 | { 210 | // Normalized pixel coordinates (from 0 to 1) 211 | vec2 st = gl_FragCoord.xy/iResolution; 212 | 213 | vec4 cbd = colorBuf[iResolution.x * int(gl_FragCoord.y) + int(gl_FragCoord.x)]; 214 | 215 | vec3 col = vec3(0.); 216 | 217 | ray r = getRay(st + sin(cbd.w)); 218 | col = trace(r,st + cbd.w); 219 | col = pow(col, vec3(0.4545)); 220 | 221 | if(moving) 222 | cbd = vec4(col,1.); 223 | 224 | //accumulation 225 | cbd.xyz = cbd.xyz * cbd.w; 226 | cbd.xyz += col; 227 | cbd.w += 1; 228 | cbd.xyz = cbd.xyz / cbd.w; 229 | 230 | // Output to screen and buffer 231 | colorBuf[iResolution.x * int(gl_FragCoord.y) + int(gl_FragCoord.x)] = cbd; 232 | fragColor = vec4(cbd.xyz,0); 233 | } -------------------------------------------------------------------------------- /shader/static.vert.glsl: -------------------------------------------------------------------------------- 1 | #version 450 core 2 | 3 | layout (location = 0) in vec3 aPos; 4 | layout (location = 1) in vec3 aColor; 5 | layout (location = 2) in vec2 aTexCoord; 6 | 7 | out vec3 iColor; 8 | out vec2 iTexCoord; 9 | 10 | void main() 11 | { 12 | gl_Position = vec4(aPos, 1.); 13 | iColor = aColor; 14 | iTexCoord = aTexCoord; 15 | } -------------------------------------------------------------------------------- /src/bvh.cpp: -------------------------------------------------------------------------------- 1 | #include "bvh.h" 2 | #include "commun.h" 3 | #include 4 | 5 | nerv::AABB nerv::surrondingBox(nerv::AABB box0, nerv::AABB box1) 6 | { 7 | nerv::AABB surrond; 8 | surrond.max = glm::max(box0.max, box1.max); 9 | surrond.min = glm::min(box0.min, box1.min); 10 | return surrond; 11 | } 12 | 13 | bool nerv::box_compare(nerv::triangle a, nerv::triangle b, int axis) 14 | { 15 | nerv::AABB box0; 16 | nerv::AABB box1; 17 | 18 | a.boundingBox(&box0); 19 | b.boundingBox(&box1); 20 | 21 | return box0.min[axis] < box1.min[axis]; 22 | } 23 | 24 | bool nerv::box_x_compare(nerv::triangle a, nerv::triangle b) { 25 | return box_compare(a, b, 0); 26 | } 27 | 28 | bool nerv::box_y_compare(nerv::triangle a, nerv::triangle b) { 29 | return box_compare(a, b, 1); 30 | } 31 | 32 | bool nerv::box_z_compare(nerv::triangle a, nerv::triangle b) { 33 | return box_compare(a, b, 2); 34 | } 35 | 36 | nerv::bvhNode* nerv::createNode(std::vector& tris, size_t start, size_t end) 37 | { 38 | nerv::bvhNode* node = new nerv::bvhNode(); 39 | 40 | int axis = (int)randomFloat(2); 41 | 42 | auto comparator = (axis == 0) ? box_x_compare 43 | : (axis == 1) ? box_y_compare 44 | : box_z_compare; 45 | 46 | size_t objectSpan = end - start; 47 | 48 | if(objectSpan == 1) 49 | { 50 | node->type = nerv::NODE_TYPE::TRIANGLE; 51 | node->primitiveOffset = start; 52 | node->left = node->right = nullptr; 53 | 54 | nerv::AABB box; 55 | tris[start].boundingBox(&box); 56 | node->box = box; 57 | } 58 | else 59 | { 60 | std::sort(tris.begin() + start, tris.begin() + end, comparator); 61 | 62 | node->type = nerv::NODE_TYPE::AABB_BOX; 63 | node->primitiveOffset = -1; 64 | 65 | int mid = start + objectSpan / 2; 66 | 67 | node->left = nerv::createNode(tris, start, mid); 68 | node->right = nerv::createNode(tris, mid, end); 69 | 70 | node->box = surrondingBox(node->left->box, node->right->box); 71 | } 72 | 73 | return node; 74 | } 75 | 76 | void nerv::deleteBVHTree(bvhNode* bvh) 77 | { 78 | if (bvh == nullptr) 79 | return; 80 | 81 | deleteBVHTree(bvh->left); 82 | deleteBVHTree(bvh->right); 83 | 84 | delete bvh; 85 | } 86 | 87 | int nerv::countNode(bvhNode* node) 88 | { 89 | int c = 1; 90 | if (node == nullptr) 91 | return 0; 92 | 93 | c += countNode(node->left); 94 | c += countNode(node->right); 95 | 96 | return c; 97 | } 98 | 99 | int nerv::flattenBVH(nerv::linearBvhNode * flatten, bvhNode* node, int* offset, int depth) 100 | { 101 | linearBvhNode * linear = &flatten[*offset]; 102 | linear->pMin = glm::vec4(node->box.min, -1); 103 | linear->pMax = glm::vec4(node->box.max, -1); 104 | linear->axis = depth; 105 | int myOffset = (*offset)++; 106 | if (node->type != nerv::NODE_TYPE::AABB_BOX) 107 | { 108 | linear->primitiveOffset = node->primitiveOffset; 109 | linear->nPrimitives = 1; 110 | } 111 | else 112 | { 113 | 114 | linear->nPrimitives = 0; 115 | int ost = flattenBVH(flatten,node->left, offset, depth + 1); 116 | linear->pMin.w = ost; 117 | linear->secondChildOffset = flattenBVH(flatten,node->right, offset, depth + 1); 118 | linear->pMax.w = linear->secondChildOffset; 119 | 120 | } 121 | return myOffset; 122 | } -------------------------------------------------------------------------------- /src/bvh.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "primitive.h" 4 | #include 5 | 6 | namespace nerv 7 | { 8 | enum NODE_TYPE { 9 | AABB_BOX, 10 | TRIANGLE, 11 | }; 12 | 13 | struct bvhNode 14 | { 15 | NODE_TYPE type; 16 | int primitiveOffset; 17 | bvhNode * left; 18 | bvhNode * right; 19 | nerv::AABB box; 20 | }; 21 | 22 | struct linearBvhNode { 23 | glm::vec4 pMin = glm::vec4(); 24 | glm::vec4 pMax = glm::vec4(); 25 | int primitiveOffset = 0; 26 | int secondChildOffset = 0; 27 | int nPrimitives = 0; 28 | int axis = 0; 29 | }; 30 | 31 | bvhNode * createNode(std::vector& tris, size_t start, size_t end); 32 | 33 | void deleteBVHTree(bvhNode* bvh); 34 | int countNode(bvhNode* node); 35 | int flattenBVH(nerv::linearBvhNode * flatten, bvhNode* node, int* offset, int depth); 36 | 37 | bool box_compare(nerv::triangle a, nerv::triangle b, int axis); 38 | bool box_x_compare(nerv::triangle a, nerv::triangle b); 39 | bool box_y_compare(nerv::triangle a, nerv::triangle b); 40 | bool box_z_compare(nerv::triangle a, nerv::triangle b); 41 | 42 | nerv::AABB surrondingBox(nerv::AABB box0, nerv::AABB box1); 43 | } -------------------------------------------------------------------------------- /src/camera.cpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "glad/glad.h" 3 | 4 | #include "camera.h" 5 | 6 | 7 | /* 8 | read the config file and look at the subsecor for 9 | camera option, we provide the follow option array 10 | description: 11 | 12 | 0: speed 13 | 1: sensivity 14 | 2: fov 15 | 3: aperture 16 | 4: focus distance 17 | 18 | */ 19 | nerv::camera::camera(nerv::config* conf) 20 | { 21 | //read config file 22 | int sector = nerv::findConfigSubsector(conf, "camera"); 23 | std::vector camConf = nerv::readConfigSubsector(conf, sector); 24 | 25 | //see window.cpp 26 | sector = nerv::findConfigSubsector(conf, "window"); 27 | std::vector winConf = nerv::readConfigSubsector(conf, sector); 28 | 29 | //position value 30 | this->position = glm::vec3(-17.7, 5.1, 0.2); 31 | this->view = glm::mat4(1.0f); 32 | this->yaw = -88.0; 33 | this->pitch = -15.0; 34 | 35 | //controle value 36 | this->speed = camConf[0] / 10.0; 37 | this->sensivity = camConf[1] / 100.0; 38 | this->lastX = winConf[0] / 2; 39 | this->lastY = winConf[1] / 2; 40 | this->LastFrameTime = 0.0; 41 | 42 | //lens value 43 | this->fov = camConf[2]; 44 | this->aperture = camConf[3]; 45 | this->focusDistance = camConf[4]; 46 | } 47 | 48 | void nerv::camera::updateFPSView(camera* cam) 49 | { 50 | glm::vec3 eye = cam->position; 51 | 52 | float cosPitch = cosf(glm::radians(cam->pitch)); 53 | float sinPitch = sinf(glm::radians(cam->pitch)); 54 | float cosYaw = cosf(-glm::radians(cam->yaw)); 55 | float sinYaw = sinf(-glm::radians(cam->yaw)); 56 | 57 | glm::vec3 right = { cosYaw, 0, -sinYaw }; 58 | glm::vec3 up = { sinYaw * sinPitch, cosPitch, cosYaw * sinPitch }; 59 | glm::vec3 front = { sinYaw * cosPitch, -sinPitch, cosPitch * cosYaw }; 60 | 61 | right = glm::normalize(right); 62 | up = glm::normalize(up); 63 | front = glm::normalize(front); 64 | 65 | cam->view = { 66 | glm::vec4(right.x, right.y, right.z, 0), 67 | glm::vec4(up.x, up.y, up.z, 0), 68 | glm::vec4(front.x, front.y, front.z, 0), 69 | glm::vec4(-glm::dot(right, eye), -glm::dot(up, eye), -glm::dot(front, eye), 1) 70 | }; 71 | } 72 | 73 | bool nerv::camera::updateCamera(camera* cam, GLFWwindow* win) 74 | { 75 | bool moving = false; 76 | float deltaTime = glfwGetTime() - cam->LastFrameTime; 77 | 78 | if (glfwGetKey(win, GLFW_KEY_W) == GLFW_PRESS) 79 | { 80 | cam->position += deltaTime * cam->speed * glm::vec3(cam->view[2]); 81 | moving = true; 82 | } 83 | if (glfwGetKey(win, GLFW_KEY_S) == GLFW_PRESS) 84 | { 85 | cam->position -= deltaTime * cam->speed * glm::vec3(cam->view[2]); 86 | moving = true; 87 | } 88 | if (glfwGetKey(win, GLFW_KEY_SPACE) == GLFW_PRESS) 89 | { 90 | cam->position += deltaTime * cam->speed * glm::vec3(cam->view[1]); 91 | moving = true; 92 | } 93 | if (glfwGetKey(win, GLFW_KEY_LEFT_CONTROL) == GLFW_PRESS) 94 | { 95 | cam->position -= deltaTime * cam->speed * glm::vec3(cam->view[1]); 96 | moving = true; 97 | } 98 | if (glfwGetKey(win, GLFW_KEY_A) == GLFW_PRESS) 99 | { 100 | cam->position += deltaTime * cam->speed * glm::normalize(glm::cross(glm::vec3(cam->view[2]), glm::vec3(cam->view[1]))); 101 | moving = true; 102 | } 103 | if (glfwGetKey(win, GLFW_KEY_D) == GLFW_PRESS) 104 | { 105 | cam->position -= deltaTime * cam->speed * glm::normalize(glm::cross(glm::vec3(cam->view[2]), glm::vec3(cam->view[1]))); 106 | moving = true; 107 | } 108 | 109 | double xpos, ypos; 110 | glfwGetCursorPos(win, &xpos, &ypos); 111 | 112 | if (xpos != cam->lastX || ypos != cam->lastY) 113 | { 114 | float xoffset = -xpos + cam->lastX; 115 | float yoffset = ypos - cam->lastY; 116 | 117 | cam->lastX = xpos; 118 | cam->lastY = ypos; 119 | 120 | xoffset *= cam->sensivity; 121 | yoffset *= cam->sensivity; 122 | 123 | cam->yaw += xoffset; 124 | cam->pitch += yoffset; 125 | 126 | cam->pitch = fminf(fmaxf(cam->pitch, -89.9f), 89.9f); 127 | 128 | moving = true; 129 | } 130 | 131 | updateFPSView(cam); 132 | 133 | return moving; 134 | } 135 | 136 | void nerv::camera::updateTime(camera* cam) 137 | { 138 | cam->LastFrameTime = glfwGetTime(); 139 | } 140 | 141 | void nerv::camera::sendCameraInfo(camera* cam) 142 | { 143 | glUniformMatrix4fv(15, 1, GL_FALSE, &cam->view[0][0]); 144 | glUniform3fv(20, 1, &cam->position[0]); 145 | glUniform1fv(28, 1, &cam->fov); 146 | glUniform1fv(29, 1, &cam->aperture); 147 | glUniform1fv(30, 1, &cam->focusDistance); 148 | } 149 | -------------------------------------------------------------------------------- /src/camera.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "config.h" 3 | 4 | #include 5 | #include 6 | 7 | 8 | namespace nerv 9 | { 10 | struct camera 11 | { 12 | //position value 13 | glm::vec3 position; 14 | glm::mat4 view; 15 | float yaw; 16 | float pitch; 17 | 18 | //controle value 19 | float speed; 20 | float sensivity; 21 | float lastX; 22 | float lastY; 23 | float LastFrameTime; 24 | 25 | //lens value 26 | float fov; 27 | float aperture; 28 | float focusDistance; 29 | 30 | //create a camera 31 | camera(nerv::config * conf); 32 | 33 | //get the fps view from a camera 34 | //update the up, front and right vector 35 | void updateFPSView(camera * cam); 36 | 37 | //update the position and the lastX, lastY 38 | bool updateCamera(camera * cam , GLFWwindow * win); 39 | 40 | void updateTime(camera* cam); 41 | 42 | //send the information of the ginven camera to a shade 43 | void sendCameraInfo(camera * cam); 44 | }; 45 | 46 | } -------------------------------------------------------------------------------- /src/commun.cpp: -------------------------------------------------------------------------------- 1 | #include "commun.h" 2 | 3 | #include 4 | 5 | 6 | std::string nerv::read(std::string path) 7 | { 8 | //load file 9 | std::string filestr; 10 | std::fstream file; 11 | file.open(path); 12 | 13 | //if file open, read it and put it into filestr 14 | if (file.is_open()) 15 | { 16 | std::string line; 17 | while (getline(file, line)) 18 | { 19 | filestr.append(line+"\n"); 20 | } 21 | file.close(); 22 | } 23 | 24 | //return file as a string 25 | return filestr; 26 | } 27 | 28 | 29 | //https://stackoverflow.com/questions/686353/random-float-number-generation 30 | float nerv::randomFloat() 31 | { 32 | return static_cast (rand()) / static_cast (RAND_MAX); 33 | } 34 | 35 | float nerv::randomFloat(float max) 36 | { 37 | return static_cast (rand()) / (static_cast (RAND_MAX / max)); 38 | } 39 | 40 | float nerv::randomFloat(float min, float max) 41 | { 42 | return min + static_cast (rand()) / (static_cast (RAND_MAX / (max - min))); 43 | } -------------------------------------------------------------------------------- /src/commun.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | namespace nerv 7 | { 8 | //read a file for a given file path 9 | std::string read(std::string path); 10 | 11 | //random number gen 12 | float randomFloat(); 13 | float randomFloat(float max); 14 | float randomFloat(float min, float max); 15 | } -------------------------------------------------------------------------------- /src/config.cpp: -------------------------------------------------------------------------------- 1 | #include "config.h" 2 | #include 3 | #include 4 | #include 5 | 6 | nerv::config nerv::loadConfig(char * path) 7 | { 8 | nerv::config conf; 9 | 10 | conf.file.open(path); 11 | 12 | std::string line; 13 | 14 | //read the file and when we find a line 15 | //looking like : [name of subsector] 16 | //and we store the position of the cursor 17 | //and the name of subsector 18 | while (std::getline(conf.file, line)) 19 | { 20 | if (line.find('[') != std::string::npos) 21 | { 22 | line.pop_back(); 23 | line.erase(line.begin()); 24 | 25 | int pos = conf.file.tellg(); 26 | 27 | subsector subsec = std::make_tuple(line, pos); 28 | 29 | conf.sectors.push_back(subsec); 30 | } 31 | } 32 | 33 | //reset the file cursor 34 | conf.file.clear(); 35 | 36 | return conf; 37 | } 38 | 39 | int nerv::findConfigSubsector(config* conf, const char* subsectorName) 40 | { 41 | for (int i = 0; i < conf->sectors.size(); i++) 42 | { 43 | //comparte the tuple name and if it the same 44 | //return starting position of the subsector 45 | std::string name = std::get<0>(conf->sectors[i]); 46 | if (!strcmp(name.c_str(), subsectorName)) 47 | return std::get<1>(conf->sectors[i]); 48 | } 49 | 50 | return -1; 51 | } 52 | 53 | std::vector nerv::readConfigSubsector(config* conf, int subsectorStart) 54 | { 55 | 56 | if (subsectorStart == -1) 57 | return {}; 58 | 59 | //put the cursor at the position 60 | //where the subsector start 61 | conf->file.seekg(subsectorStart); 62 | 63 | std::vector val; 64 | 65 | std::string line; 66 | while (std::getline(conf->file, line)) 67 | { 68 | 69 | if (line.find('[') != std::string::npos) 70 | break; 71 | 72 | //we add one so we skip the "=" sign in the string 73 | size_t pos = line.find("=")+1; 74 | 75 | std::string strVal = line.substr(pos); 76 | int value = std::stoi(strVal); 77 | 78 | val.push_back(value); 79 | 80 | } 81 | 82 | //reset the file cursor 83 | conf->file.clear(); 84 | 85 | return val; 86 | } 87 | -------------------------------------------------------------------------------- /src/config.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include 4 | #include 5 | #include 6 | 7 | typedef std::tuple subsector; 8 | 9 | namespace nerv { 10 | 11 | struct config 12 | { 13 | // config file 14 | std::fstream file; 15 | 16 | // this is use for storing were each subconfig sector are 17 | // (ex: windows sector, keybind sector... ect) 18 | // we use that for letting the file open and not having 19 | // to rescan the whole file each time. we just need 20 | // to move the cursor to the wanted location 21 | // 22 | // char *: sector name 23 | // int: cursor position 24 | std::vector sectors; 25 | 26 | }; 27 | 28 | //load a config file into a config struct 29 | config loadConfig(char* path); 30 | 31 | //allow with a config and a string to find a subsector and cursor location 32 | //in a config, if not find return null 33 | int findConfigSubsector(config* conf, const char* subsectorName); 34 | std::vector readConfigSubsector(config* conf, int subsectorStart); 35 | } -------------------------------------------------------------------------------- /src/data.cpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "data.h" 3 | #include "primitive.h" 4 | 5 | #define TINYOBJLOADER_IMPLEMENTATION // define this in only *one* .cc 6 | #include 7 | 8 | #include 9 | 10 | #define STB_IMAGE_IMPLEMENTATION 11 | #include 12 | 13 | #include 14 | #include 15 | 16 | size_t nerv::createBuffer(int size, void* data, int id, int bufferType) 17 | { 18 | unsigned int buffer = 0; 19 | glGenBuffers(1, &buffer); 20 | glBindBuffer(bufferType, buffer); 21 | 22 | glBufferData(bufferType, size, data, GL_DYNAMIC_DRAW); 23 | glBindBufferBase(bufferType, id, buffer); 24 | glBindBuffer(bufferType, id); 25 | return buffer; 26 | } 27 | 28 | nerv::texture nerv::loadImage(const char* path) 29 | { 30 | 31 | texture img; 32 | stbi_set_flip_vertically_on_load(false); 33 | unsigned char* data = stbi_load(path, &(img.width), &(img.height), &(img.nbChannel), 0); 34 | 35 | if (data) 36 | { 37 | glGenTextures(1, &(img.id)); 38 | glBindTexture(GL_TEXTURE_2D, img.id); 39 | 40 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 41 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 42 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 43 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 44 | 45 | switch (img.nbChannel) 46 | { 47 | case 3: 48 | glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, img.width, img.height, 0, GL_RGB, GL_UNSIGNED_BYTE, data); 49 | break; 50 | case 4: 51 | glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, img.width, img.height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data); 52 | break; 53 | default: 54 | break; 55 | } 56 | 57 | stbi_image_free(data); 58 | logger.info("TEXUTRE", "succesfully loaded the texture located at " + std::string(path)); 59 | } 60 | else 61 | { 62 | logger.info("TEXUTRE", "error while openning the texture located at " + std::string(path)); 63 | } 64 | 65 | return img; 66 | } 67 | 68 | std::vector nerv::loadObj(const char* objPath, const char * matPath) 69 | { 70 | std::string inputfile = objPath; 71 | tinyobj::ObjReaderConfig reader_config; 72 | reader_config.mtl_search_path = matPath; // Path to material files 73 | 74 | tinyobj::ObjReader reader; 75 | 76 | if (!reader.ParseFromFile(inputfile, reader_config)) { 77 | if (!reader.Error().empty()) { 78 | std::cerr << "TinyObjReader: " << reader.Error(); 79 | } 80 | exit(1); 81 | } 82 | 83 | if (!reader.Warning().empty()) { 84 | std::cout << "TinyObjReader: " << reader.Warning(); 85 | } 86 | 87 | auto& attrib = reader.GetAttrib(); 88 | auto& shapes = reader.GetShapes(); 89 | auto& materials = reader.GetMaterials(); 90 | 91 | std::vector triangles; 92 | 93 | // Loop over shapes 94 | for (size_t s = 0; s < shapes.size(); s++) 95 | { 96 | // Loop over faces(polygon) 97 | size_t index_offset = 0; 98 | for (size_t f = 0; f < shapes[s].mesh.num_face_vertices.size(); f++) 99 | { 100 | size_t fv = size_t(shapes[s].mesh.num_face_vertices[f]); 101 | 102 | nerv::triangle tri; 103 | 104 | // Loop over vertices in the face. 105 | for (size_t v = 0; v < fv; v++) 106 | { 107 | // access to vertex 108 | tinyobj::index_t idx = shapes[s].mesh.indices[index_offset + v]; 109 | tinyobj::real_t vx = attrib.vertices[3 * size_t(idx.vertex_index) + 0]; 110 | tinyobj::real_t vy = attrib.vertices[3 * size_t(idx.vertex_index) + 1]; 111 | tinyobj::real_t vz = attrib.vertices[3 * size_t(idx.vertex_index) + 2]; 112 | 113 | if (v == 0) 114 | tri.v1 = glm::vec4(vx, vy, vz, 0.0); 115 | else if(v == 1) 116 | tri.v2 = glm::vec4(vx, vy, vz, 0.0); 117 | else 118 | tri.v3 = glm::vec4(vx, vy, vz, 0.0); 119 | 120 | // Check if `normal_index` is zero or positive. negative = no normal data 121 | if (idx.normal_index >= 0) { 122 | tinyobj::real_t nx = attrib.normals[3 * size_t(idx.normal_index) + 0]; 123 | tinyobj::real_t ny = attrib.normals[3 * size_t(idx.normal_index) + 1]; 124 | tinyobj::real_t nz = attrib.normals[3 * size_t(idx.normal_index) + 2]; 125 | } 126 | 127 | // Check if `texcoord_index` is zero or positive. negative = no texcoord data 128 | if (idx.texcoord_index >= 0) { 129 | tinyobj::real_t tx = attrib.texcoords[2 * size_t(idx.texcoord_index) + 0]; 130 | tinyobj::real_t ty = attrib.texcoords[2 * size_t(idx.texcoord_index) + 1]; 131 | 132 | if (v == 0) 133 | tri.uv1 = glm::vec2(tx, ty); 134 | else if (v == 1) 135 | tri.uv2 = glm::vec2(tx, ty); 136 | else 137 | tri.uv3 = glm::vec2(tx, ty); 138 | } 139 | 140 | tri.data = glm::vec2(0); 141 | 142 | } 143 | index_offset += fv; 144 | 145 | // per-face material 146 | shapes[s].mesh.material_ids[f]; 147 | 148 | triangles.push_back(tri); 149 | } 150 | } 151 | 152 | return triangles; 153 | } 154 | 155 | nerv::material* nerv::genRandomMaterial(int numberOfMat) 156 | { 157 | srand(static_cast (time(0))); 158 | 159 | material* matArr = new material[numberOfMat]; 160 | for (int i = 0; i < numberOfMat-1;i++) 161 | { 162 | matArr[i].color.x = randomFloat(); 163 | matArr[i].color.y = randomFloat(); 164 | matArr[i].color.z = randomFloat(); 165 | matArr[i].color.w = randomFloat(2.0, 3.0); 166 | matArr[i].metallic = 0.0; 167 | matArr[i].refractionIndex = randomFloat(1.2, 2.0); 168 | matArr[i].roughness = 0.0; 169 | matArr[i].transmission = 0.0; 170 | } 171 | 172 | matArr[numberOfMat - 1].color.x = randomFloat(); 173 | matArr[numberOfMat - 1].color.y = randomFloat(); 174 | matArr[numberOfMat - 1].color.z = randomFloat(); 175 | matArr[numberOfMat - 1].color.w = 1.0; 176 | matArr[numberOfMat - 1].metallic = 0.0; 177 | matArr[numberOfMat - 1].refractionIndex = randomFloat(1.2, 2.0); 178 | matArr[numberOfMat - 1].roughness = 1.0; 179 | matArr[numberOfMat - 1].transmission = 0.0; 180 | 181 | return matArr; 182 | } 183 | 184 | nerv::sphere* nerv::genRandomSphere(int numberOfSphere, int numberOfMat) 185 | { 186 | srand(static_cast (time(0))); 187 | sphere* sphereArr = new sphere[numberOfSphere]; 188 | 189 | //display the sphere in a circle 190 | for (int i = 0; i < numberOfSphere-20; i++) 191 | { 192 | float angle = i * 3.14159265359 * 2.0 / (numberOfSphere-20.0); 193 | sphereArr[i].pos.x = glm::cos(angle) * 5; 194 | sphereArr[i].pos.y = 0.4; 195 | sphereArr[i].pos.z = glm::sin(angle) * 5; 196 | sphereArr[i].pos.w = 0.2; 197 | sphereArr[i].mat = glm::vec4(rand() / (RAND_MAX / numberOfMat)); 198 | } 199 | 200 | for (int i = numberOfSphere - 20; i < numberOfSphere; i++) 201 | { 202 | float angle = i * 3.14159265359 * 2.0 / 20; 203 | sphereArr[i].pos.x = glm::cos(angle) * 3; 204 | sphereArr[i].pos.y = 0.0; 205 | sphereArr[i].pos.z = glm::sin(angle) * 3; 206 | sphereArr[i].pos.w = 0.4; 207 | sphereArr[i].mat = glm::vec4(numberOfMat); 208 | } 209 | 210 | return sphereArr; 211 | } 212 | 213 | void nerv::sendInfo(camera* cam, renderData* render, GLFWwindow* win) 214 | { 215 | cam->sendCameraInfo(cam); 216 | 217 | int width; 218 | int height; 219 | 220 | glfwGetFramebufferSize(win, &width, &height); 221 | 222 | glUniform2i(31, width, height); 223 | glUniform1iv(33, 1, &(render->isMoving)); 224 | int bm = render->darkmode; 225 | glUniform1iv(35, 1, &bm); 226 | glUniform1iv(36, 1, &(render->maxBounce)); 227 | 228 | glUniform1f(34, glfwGetTime()); 229 | } 230 | -------------------------------------------------------------------------------- /src/data.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | 4 | #include 5 | 6 | #include "primitive.h" 7 | #include "window.h" 8 | #include "camera.h" 9 | #include "commun.h" 10 | 11 | #include 12 | 13 | namespace nerv 14 | { 15 | struct renderData { 16 | int spp; 17 | int maxBounce; 18 | int isMoving; 19 | float renderTime; 20 | bool darkmode; 21 | bool reload = false; 22 | }; 23 | 24 | struct texture { 25 | GLuint id; 26 | int width; 27 | int height; 28 | int nbChannel; 29 | }; 30 | 31 | struct material { 32 | glm::vec4 color; 33 | float roughness; 34 | float metallic; 35 | float refractionIndex; 36 | float transmission; 37 | }; 38 | 39 | //create a buffer with a given size, a data pointer, and the id reference 40 | //we will have to use in the shader to call him 41 | size_t createBuffer(int size, void* data, int id, int bufferType); 42 | 43 | //texture stuff 44 | texture loadImage(const char* path); 45 | 46 | //load .ob file 47 | std::vector loadObj(const char* objPath, const char* matPath = "./"); 48 | 49 | //scene generation 50 | material* genRandomMaterial(int numberOfMat); 51 | sphere * genRandomSphere(int numberOfSphere, int numberOfMat); 52 | 53 | //scene info 54 | void sendInfo(camera* cam, renderData* render, GLFWwindow* win); 55 | 56 | } -------------------------------------------------------------------------------- /src/primitive.cpp: -------------------------------------------------------------------------------- 1 | #include "primitive.h" 2 | 3 | bool nerv::sphere::boundingBox(nerv::AABB * out) 4 | { 5 | out->min = glm::vec3(pos) - glm::vec3(pos.w); 6 | out->max = glm::vec3(pos) + glm::vec3(pos.w); 7 | return true; 8 | } 9 | 10 | bool nerv::triangle::boundingBox(nerv::AABB * out) 11 | { 12 | out->min = glm::min(v1.xyz(), glm::min(v2.xyz(), v3.xyz())); 13 | out->max = glm::max(v1.xyz(), glm::max(v2.xyz(), v3.xyz())); 14 | 15 | return true; 16 | } 17 | -------------------------------------------------------------------------------- /src/primitive.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #define GLM_SWIZZLE 3 | #include 4 | 5 | namespace nerv 6 | { 7 | struct AABB { 8 | glm::vec3 min; 9 | glm::vec3 max; 10 | }; 11 | 12 | struct primitive 13 | { 14 | virtual bool boundingBox(AABB* out) { return true; }; 15 | }; 16 | 17 | struct triangle 18 | { 19 | glm::vec4 v1; 20 | glm::vec4 v2; 21 | glm::vec4 v3; 22 | glm::vec2 uv1; 23 | glm::vec2 uv2; 24 | glm::vec2 uv3; 25 | glm::vec2 data; 26 | 27 | bool boundingBox(AABB* out); 28 | }; 29 | 30 | // for the pos vec4 the w componant is the raduis 31 | struct sphere 32 | { 33 | glm::vec4 pos; 34 | glm::vec4 mat; 35 | 36 | bool boundingBox(AABB* out); 37 | 38 | }; 39 | } -------------------------------------------------------------------------------- /src/shader.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | #include "shader.h" 6 | #include "commun.h" 7 | 8 | size_t nerv::shader::createComputeProgram(size_t computeShader) 9 | { 10 | size_t id = glCreateProgram(); 11 | 12 | glAttachShader(id, computeShader); 13 | glLinkProgram(id); 14 | 15 | programInfo(id); 16 | 17 | glDeleteShader(computeShader); 18 | 19 | return id; 20 | } 21 | 22 | size_t nerv::shader::createMainProgram(size_t vertShader, size_t fragShader) 23 | { 24 | logger.info("SHADER", "Creating shader program"); 25 | size_t id = glCreateProgram(); 26 | 27 | glAttachShader(id, vertShader); 28 | glAttachShader(id, fragShader); 29 | glLinkProgram(id); 30 | 31 | programInfo(id); 32 | 33 | logger.info("SHADER", "Cleaning shader instance"); 34 | glDeleteShader(fragShader); 35 | glDeleteShader(vertShader); 36 | 37 | isCompute = false; 38 | 39 | return id; 40 | } 41 | 42 | //since this program is only for raytracing there is no need of a proper 43 | //rather way to bind vertices so the is the only function that will be use to bind 44 | //a full quad to the gpu that will serv as a canvas for rendering 45 | void nerv::shader::bindFullquad() 46 | { 47 | 48 | logger.info("QUAD BINDING", "size is : " + std::to_string(indices.size())); 49 | 50 | float vertices[] = { 51 | 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, // top right 52 | 1.0f, -1.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, // bottom right 53 | -1.0f, -1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, // bottom left 54 | -1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f // top left 55 | }; 56 | unsigned int indices[] = { // note that we start from 0! 57 | 0, 1, 3, // first Triangle 58 | 1, 2, 3 // second Triangle 59 | }; 60 | glGenVertexArrays(1, &VAO); 61 | glGenBuffers(1, &VBO); 62 | glGenBuffers(1, &EBO); 63 | // bind the Vertex Array Object first, then bind and set vertex buffer(s), and then configure vertex attributes(s). 64 | glBindVertexArray(VAO); 65 | 66 | glBindBuffer(GL_ARRAY_BUFFER, VBO); 67 | glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); 68 | 69 | glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO); 70 | glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW); 71 | 72 | glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)0); 73 | glEnableVertexAttribArray(0); 74 | glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)(3 * sizeof(float))); 75 | glEnableVertexAttribArray(1); 76 | glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)(6 * sizeof(float))); 77 | glEnableVertexAttribArray(2); 78 | 79 | // note that this is allowed, the call to glVertexAttribPointer registered VBO as the vertex attribute's bound vertex buffer object so afterwards we can safely unbind 80 | glBindBuffer(GL_ARRAY_BUFFER, 0); 81 | 82 | // remember: do NOT unbind the EBO while a VAO is active as the bound element buffer object IS stored in the VAO; keep the EBO bound. 83 | //glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); 84 | 85 | // You can unbind the VAO afterwards so other VAO calls won't accidentally modify this VAO, but this rarely happens. Modifying other 86 | // VAOs requires a call to glBindVertexArray anyways so we generally don't unbind VAOs (nor VBOs) when it's not directly necessary. 87 | glBindVertexArray(0); 88 | 89 | } 90 | 91 | //render the quad to display the result of the fragement shader 92 | void nerv::shader::showQuad() 93 | { 94 | glBindVertexArray(VAO); 95 | glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0); 96 | } 97 | 98 | size_t nerv::shader::createShader(std::string path, int type) 99 | { 100 | //create a shader type 101 | logger.info("SHADER", "Creating shader type"); 102 | size_t shdr = glCreateShader(type); 103 | 104 | //look for shader file and import header 105 | logger.info("SHADER", "reading shader file at " + path); 106 | std::string file = nerv::read(path); 107 | while (importInclude(file,path)); 108 | 109 | const char* fileChar = file.c_str(); 110 | 111 | //load and compile shader 112 | glShaderSource(shdr, 1, &fileChar, NULL); 113 | glCompileShader(shdr); 114 | 115 | int success; 116 | char infoLog[512]; 117 | glGetShaderiv(shdr, GL_COMPILE_STATUS, &success); 118 | if (!success) 119 | { 120 | glGetShaderInfoLog(shdr, 512, NULL, infoLog); 121 | logger.error("SHADER", "Shader did not compile : \n" + std::string(infoLog)); 122 | 123 | } 124 | else 125 | { 126 | logger.info("SHADER", "Shader loaded and compiled proprely"); 127 | } 128 | 129 | return shdr; 130 | } 131 | 132 | bool nerv::shader::importInclude(std::string& data, std::string filepath) 133 | { 134 | //look for include into the file 135 | size_t start = data.find("#include"); 136 | 137 | std::size_t found = filepath.find_last_of("/\\"); 138 | std::string path = filepath.substr(0, found+1); 139 | 140 | //if there is some open the file attached to it then 141 | //replace the include header with the file contente 142 | if (start != std::string::npos) 143 | { 144 | size_t end = data.find('\n', start); 145 | std::string include = data.substr(start, end - start); 146 | data.erase(start, end - start); 147 | 148 | include.erase(0, include.find('"') + 1); 149 | include.erase(include.find('"'), include.size() + 1); 150 | logger.info("INCLUDE", path + include); 151 | 152 | std::string included = nerv::read(path + include); 153 | 154 | //remove shader comment //? are just for glsl extension 155 | size_t tmpPos = included.find("//?"); 156 | while (tmpPos != std::string::npos) 157 | { 158 | size_t tmpEnd = included.find('\n', tmpPos); 159 | included.erase(tmpPos, tmpEnd - tmpPos); 160 | tmpPos = included.find("//?"); 161 | } 162 | 163 | data.insert(start, included); 164 | return true; 165 | } 166 | return false; 167 | } 168 | 169 | void nerv::shader::programInfo(size_t id) 170 | { 171 | int success; 172 | char infoLog[512]; 173 | glGetProgramiv(id, GL_COMPILE_STATUS, &success); 174 | if (!success) 175 | { 176 | glGetProgramInfoLog(id, 512, NULL, infoLog); 177 | std::cout << std::string(infoLog) << std::endl; 178 | } 179 | 180 | } 181 | 182 | void nerv::shader::activateImage(texture* img, char* name, int textureNumber) 183 | { 184 | glActiveTexture(GL_TEXTURE0 + textureNumber); 185 | glBindTexture(GL_TEXTURE_2D, img->id); 186 | setInt(name, textureNumber); 187 | } 188 | 189 | nerv::shader::shader(std::string path) 190 | { 191 | 192 | filePath.push_back(path); 193 | 194 | logger.info("SHADER", "Creating compute shader"); 195 | size_t computeShader = createShader(path, GL_COMPUTE_SHADER); 196 | 197 | id = createComputeProgram(computeShader); 198 | 199 | isCompute = true; 200 | } 201 | 202 | nerv::shader::shader(std::string frag, std::string vert) 203 | { 204 | filePath.push_back(frag); 205 | filePath.push_back(vert); 206 | 207 | logger.info("SHADER", "Creating frag and vertex shaders"); 208 | size_t fragShader = createShader(frag, GL_FRAGMENT_SHADER); 209 | size_t vertShader = createShader(vert, GL_VERTEX_SHADER); 210 | 211 | id = createMainProgram(vertShader, fragShader); 212 | 213 | logger.info("SHADER", "Binding full quad"); 214 | bindFullquad(); 215 | } 216 | 217 | void nerv::shader::use() 218 | { 219 | if (isCompute) 220 | { 221 | 222 | } 223 | else 224 | { 225 | glUseProgram(id); 226 | glBindVertexArray(VAO); 227 | glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0); 228 | } 229 | } 230 | 231 | void nerv::shader::reload() 232 | { 233 | logger.warning("SHADER", "Reloading shader"); 234 | glDeleteProgram(id); 235 | if (isCompute) 236 | { 237 | size_t compute = createShader(filePath[0],GL_COMPUTE_SHADER); 238 | id = createComputeProgram(compute); 239 | } 240 | else 241 | { 242 | size_t frag = createShader(filePath[0], GL_FRAGMENT_SHADER); 243 | size_t vert = createShader(filePath[1], GL_VERTEX_SHADER); 244 | id = createMainProgram(frag,vert); 245 | 246 | bindFullquad(); 247 | } 248 | } 249 | -------------------------------------------------------------------------------- /src/shader.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include 4 | #include 5 | 6 | #define GLM_FORCE_MESSAGES // Or defined when building (e.g. -DGLM_FORCE_SWIZZLE) 7 | #include 8 | 9 | #include "data.h" 10 | 11 | namespace nerv 12 | { 13 | static inline std::vector vertices = { 14 | 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, // top right 15 | 1.0f, -1.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, // bottom right 16 | -1.0f, -1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, // bottom left 17 | -1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f // top left 18 | }; 19 | 20 | static inline std::vector indices = { // note that we start from 0! 21 | 0, 1, 3, // first triangle 22 | 1, 2, 3 // second triangle 23 | }; 24 | 25 | class shader { 26 | private: 27 | 28 | //stuff for rendering the quad 29 | GLuint VBO; 30 | GLuint VAO; 31 | GLuint EBO; 32 | 33 | std::vector filePath; 34 | 35 | //only for vert+frag shader 36 | void bindFullquad(); 37 | void showQuad(); 38 | 39 | public: 40 | //shader id 41 | size_t id; 42 | 43 | //choose between vert+frag or compute 44 | bool isCompute; 45 | 46 | //given a path and a shader type you can load a create a shader 47 | size_t createShader(std::string path, int type); 48 | 49 | size_t createComputeProgram(size_t computeShader); 50 | size_t createMainProgram(size_t vertShader, size_t fragShader); 51 | 52 | //import include for a shader file 53 | bool importInclude(std::string& data, std::string filepath); 54 | 55 | //ouput shader error when compiling 56 | void programInfo(size_t id); 57 | 58 | //juste MANY MANY inline function for adding stuff to the shader 59 | inline void setInt(std::string name, int value) { glUniform1i(glGetUniformLocation(id, name.c_str()), value); } 60 | inline void setFloat(std::string name, float value) { glUniform1f(glGetUniformLocation(id, name.c_str()), value); } 61 | inline void setVec2(std::string name, float x, float y) { glUniform2f(glGetUniformLocation(id, name.c_str()), x, y); } 62 | inline void setVec3(std::string name, glm::vec3 value) { glUniform3fv(glGetUniformLocation(id, name.c_str()), 1, &value[0]); } 63 | inline void setVec3(std::string name, float x, float y, float z) { glUniform3f(glGetUniformLocation(id, name.c_str()), x, y, z); } 64 | inline void setVec4(std::string name, glm::vec4 value) { glUniform4fv(glGetUniformLocation(id, name.c_str()), 1, &value[0]); } 65 | inline void setVec4(std::string name, float x, float y, float z, float w) { glUniform4f(glGetUniformLocation(id, name.c_str()), x, y, z, w); } 66 | inline void setMat3(std::string name, glm::mat3 value) { glUniformMatrix3fv(glGetUniformLocation(id, name.c_str()), 1, GL_FALSE, &value[0][0]); } 67 | inline void setMat4(std::string name, glm::mat4 value) { glUniformMatrix4fv(glGetUniformLocation(id, name.c_str()), 1, GL_FALSE, &value[0][0]); } 68 | 69 | void activateImage(texture* img, char* name, int textureNumber); 70 | 71 | //create a compute shader 72 | shader(std::string path); 73 | 74 | //create a normal pipeline shader 75 | shader(std::string frag, std::string vert); 76 | 77 | void use(); 78 | void reload(); 79 | }; 80 | } 81 | -------------------------------------------------------------------------------- /src/ui.cpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "ui.h" 3 | #include "glm/gtx/string_cast.hpp" 4 | #include "logarsh.h" 5 | 6 | #include 7 | 8 | #if defined(_MSC_VER) && (_MSC_VER >= 1900) && !defined(IMGUI_DISABLE_WIN32_FUNCTIONS) 9 | #pragma comment(lib, "legacy_stdio_definitions") 10 | #endif 11 | 12 | void nerv::createUI(GLFWwindow* win) 13 | { 14 | // Setup Dear ImGui context 15 | IMGUI_CHECKVERSION(); 16 | ImGui::CreateContext(); 17 | 18 | // Setup Dear ImGui style 19 | ImGui::StyleColorsDark(); 20 | 21 | ImGui_ImplGlfw_InitForOpenGL(win, true); 22 | ImGui_ImplOpenGL3_Init("#version 450 core"); 23 | } 24 | 25 | void nerv::displayUI(GLFWwindow* win, renderData* info, camera * cam) 26 | { 27 | if (nerv::gUsingMenu) 28 | info->isMoving = false; 29 | 30 | if(info->reload) 31 | info->isMoving = true; 32 | 33 | // Start the Dear ImGui frame 34 | ImGui_ImplOpenGL3_NewFrame(); 35 | ImGui_ImplGlfw_NewFrame(); 36 | ImGui::NewFrame(); 37 | 38 | if (ImGui::Begin("info")) 39 | { 40 | ImGui::Text("Camera info"); 41 | ImGui::Separator(); 42 | ImGui::Text(("Samples: " + std::to_string(info->spp)).c_str()); 43 | ImGui::Text(("Position: " + glm::to_string(cam->position)).c_str()); 44 | ImGui::Text(("Pitch: " + std::to_string(cam->pitch) + "\nYaw: " + std::to_string(cam->yaw)+"\n\n").c_str()); 45 | 46 | ImGui::Text("Rendering info"); 47 | ImGui::Separator(); 48 | info->spp += 1; 49 | ImGui::Text(("Time between frame: \n" + std::to_string(glfwGetTime() - cam->LastFrameTime)).c_str()); 50 | ImGui::Text(("FPS: \n" + std::to_string(1/(glfwGetTime() -cam->LastFrameTime))).c_str()); 51 | } 52 | ImGui::End(); 53 | 54 | if (ImGui::Begin("config")) 55 | { 56 | ImGui::Text("Camera"); 57 | ImGui::Separator(); 58 | info->isMoving += ImGui::SliderFloat("FOV", &(cam->fov), 0.0001, 180); 59 | info->isMoving += ImGui::SliderFloat("Aperture", &(cam->aperture), 0.0001, 1.0); 60 | info->isMoving += ImGui::SliderFloat("focus Distance", &(cam->focusDistance), 0.0001, 20); 61 | ImGui::Separator(); 62 | ImGui::Text("Rendering"); 63 | ImGui::Separator(); 64 | info->isMoving += ImGui::SliderInt("Number of bounces", &(info->maxBounce), 0, 10); 65 | ImGui::Separator(); 66 | ImGui::Text("Scene"); 67 | ImGui::Separator(); 68 | 69 | info->isMoving += ImGui::Checkbox("dark room mode", &(info->darkmode)); 70 | 71 | } 72 | ImGui::End(); 73 | 74 | if (ImGui::Begin("Shader")) 75 | { 76 | ImGui::Text("Shader files"); 77 | ImGui::Separator(); 78 | info->reload = ImGui::Button("Reaload Shader"); 79 | info->isMoving += info->reload; 80 | } 81 | ImGui::End(); 82 | 83 | ImGui::Render(); 84 | ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData()); 85 | 86 | if (info->isMoving) 87 | info->spp = 1; 88 | } 89 | 90 | void nerv::closeUI() 91 | { 92 | ImGui_ImplOpenGL3_Shutdown(); 93 | ImGui_ImplGlfw_Shutdown(); 94 | ImGui::DestroyContext(); 95 | } 96 | -------------------------------------------------------------------------------- /src/ui.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "data.h" 3 | #include "camera.h" 4 | 5 | #include 6 | 7 | #include 8 | #include 9 | #include 10 | 11 | 12 | 13 | namespace nerv 14 | { 15 | void createUI(GLFWwindow * win); 16 | void displayUI(GLFWwindow* win, renderData* info, camera* cam); 17 | void closeUI(); 18 | } 19 | -------------------------------------------------------------------------------- /src/window.cpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "glad/glad.h" 3 | #include "window.h" 4 | #include 5 | 6 | /* 7 | to explain of the configuration file work for the window 8 | inside the winConf vector data is alligner like that 9 | 10 | 0: width 11 | 1: height 12 | 2: Fullscreen 13 | 3: openGL major version 14 | 4: openGL minor version 15 | */ 16 | GLFWwindow * nerv::createWindow(nerv::config* conf) 17 | { 18 | //read config file 19 | int sector = nerv::findConfigSubsector(conf, "window"); 20 | std::vector winConf = nerv::readConfigSubsector(conf, sector); 21 | 22 | //set keybind global data 23 | sector = nerv::findConfigSubsector(conf, "key"); 24 | gWindowsKeybind = nerv::readConfigSubsector(conf, sector); 25 | gUsingMenu = false; 26 | 27 | if (!glfwInit()) 28 | exit(EXIT_FAILURE); 29 | 30 | //set the openGL version 31 | glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, winConf[3]); 32 | glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, winConf[4]); 33 | glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); 34 | 35 | //windows pointer that going to be returned 36 | GLFWwindow* win = nullptr; 37 | 38 | //check if fullscreen 39 | if (winConf[2]) 40 | win = glfwCreateWindow(winConf[0], winConf[1], "Nerv: Neutral Environement for Ray Visialisation", glfwGetPrimaryMonitor(), NULL); 41 | else 42 | win = glfwCreateWindow(winConf[0], winConf[1], "Nerv: Neutral Environement for Ray Visialisation", NULL, NULL); 43 | 44 | if (!win) 45 | { 46 | glfwTerminate(); 47 | exit(EXIT_FAILURE); 48 | } 49 | 50 | //setup window callback 51 | //TODO add size and framebuffer size callback 52 | glfwSetKeyCallback(win, windowKeyCallback); 53 | glfwSetFramebufferSizeCallback(win, windowframebufferSizeCallback); 54 | 55 | //make the windows the actual context 56 | glfwMakeContextCurrent(win); 57 | 58 | if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) 59 | exit(EXIT_FAILURE); 60 | 61 | //get windows framebuffer size and set the glviewport 62 | int width; 63 | int height; 64 | glfwGetFramebufferSize(win, &width, &height); 65 | 66 | glViewport(0, 0, width, height); 67 | 68 | glfwSetInputMode(win, GLFW_CURSOR, GLFW_CURSOR_DISABLED); 69 | glfwSwapInterval(1); 70 | 71 | return win; 72 | } 73 | 74 | 75 | /* 76 | this use a global buffer that hold evey keybind set in the config file 77 | this is setup on the glfw key value spreadsheet 78 | 79 | 0: forward 80 | 1: backward 81 | 2: left 82 | 3: right 83 | 4: up 84 | 5: down 85 | 6: freeMouse 86 | 7: closeWindow 87 | */ 88 | void nerv::windowKeyCallback(GLFWwindow* window, int key, int scancode, int action, int mods) 89 | { 90 | if (key == gWindowsKeybind[7] && action == GLFW_PRESS) 91 | { 92 | glfwSetWindowShouldClose(window, GLFW_TRUE); 93 | } 94 | if (key == gWindowsKeybind[6] && action == GLFW_RELEASE) 95 | { 96 | if (!gUsingMenu) 97 | { 98 | glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_NORMAL); 99 | gUsingMenu = true; 100 | } 101 | else 102 | { 103 | glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_DISABLED); 104 | gUsingMenu = false; 105 | } 106 | } 107 | } 108 | 109 | void nerv::windowframebufferSizeCallback(GLFWwindow* window, int width, int height) 110 | { 111 | glUniform2i(31, width, height); 112 | glViewport(0, 0, width, height); 113 | } 114 | 115 | void nerv::windowSizeCallback(GLFWwindow* window, int width, int height) 116 | { 117 | glfwSetWindowSize(window, width, height); 118 | } 119 | void nerv::windowCloseCallback(GLFWwindow* window) 120 | { 121 | 122 | } 123 | -------------------------------------------------------------------------------- /src/window.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "config.h" 3 | 4 | #include 5 | #include 6 | 7 | 8 | namespace nerv { 9 | //create a window with from a given config file 10 | GLFWwindow * createWindow(nerv::config* conf); 11 | 12 | //gobal vector that hold keybind see windowKeyCallback for more info 13 | inline std::vector gWindowsKeybind; 14 | inline bool gUsingMenu; 15 | 16 | //window callback function 17 | void windowSizeCallback(GLFWwindow* window, int width, int height); 18 | void windowKeyCallback(GLFWwindow* window, int key, int scancode, int action, int mods); 19 | void windowCloseCallback(GLFWwindow* window); 20 | void windowframebufferSizeCallback(GLFWwindow* window, int width, int height); 21 | } 22 | --------------------------------------------------------------------------------