commit 28286395d0e1d30ce00e5fb3af4b14d9e5ce33b2 Author: DawidPietrykowski Date: Sat Aug 7 23:14:51 2021 +0200 first commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..dcb442d --- /dev/null +++ b/.gitignore @@ -0,0 +1,14 @@ +.vscode/.browse.c_cpp.db* +.vscode/c_cpp_properties.json +.vscode/launch.json +.vscode/ipch +.vscode +lib +include +test +packages +.vs +bin +obj +build +makeP.bat \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..3ef609e --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,162 @@ +cmake_minimum_required(VERSION 3.10) + +# So library linking is more sane. +cmake_policy(SET CMP0003 NEW) + +# So syntax problems are errors. +cmake_policy(SET CMP0010 NEW) + +# Input directories must have CMakeLists.txt +cmake_policy(SET CMP0014 NEW) + +# Compile definitions. +cmake_policy(SET CMP0043 NEW) + +# Use ROOT variables in find_package. +cmake_policy(SET CMP0074 NEW) + +# Convert relative paths to absolute in target_sources() +cmake_policy(SET CMP0076 NEW) + +# Copy files from source directory to destination directory, substituting any +# variables. Create destination directory if it does not exist. + +macro(configure_files srcDir destDir) + message(STATUS "Configuring directory ${destDir}") + make_directory(${destDir}) + + file(GLOB templateFiles RELATIVE ${srcDir} ${srcDir}/*) + foreach(templateFile ${templateFiles}) + set(srcTemplatePath ${srcDir}/${templateFile}) + if(NOT IS_DIRECTORY ${srcTemplatePath}) + message(STATUS "Configuring file ${templateFile}") + configure_file( + ${srcTemplatePath} + ${destDir}/${templateFile} + @ONLY) + endif(NOT IS_DIRECTORY ${srcTemplatePath}) + endforeach(templateFile) +endmacro(configure_files) + +# Initialize project +project(GPURayTracer) + +# Add executable +add_executable(${PROJECT_NAME}) + +set(default_build_type "Release") +set(CMAKE_BINARY_DIR ${CMAKE_BINARY_DIR}/bin) + +set_target_properties(${PROJECT_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) + +# Find GLFW + +set(GLFW_BUILD_DOCS OFF CACHE BOOL "" FORCE) +set(GLFW_BUILD_TESTS OFF CACHE BOOL "" FORCE) +set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE) + +find_path(GLFW_INCLUDE_DIR GLFW/glfw3.h +HINTS +${CMAKE_CURRENT_SOURCE_DIR}/include +${CMAKE_CURRENT_SOURCE_DIR}/lib +${GLFW_ROOT} +${GLFW_ROOT}/include) + +if(GLFW_INCLUDE_DIR) +message(STATUS "GLFW_INCLUDE_DIR: ${GLFW_INCLUDE_DIR}") +else() +message(FATAL_ERROR "glfw3.h not found") +endif() + +find_path(GLFW_LIB_DIR glfw3.lib +HINTS +${CMAKE_CURRENT_SOURCE_DIR}/include +${CMAKE_CURRENT_SOURCE_DIR}/lib +${GLFW_ROOT}/lib +${GLFW_ROOT}/lib-vc2019 +${GLFW_ROOT}/lib-vc2017 +${GLFW_ROOT}/lib-vc2015) + +if(GLFW_LIB_DIR) +message(STATUS "GLFW_LIB_DIR: ${GLFW_LIB_DIR}") +else() +message(FATAL_ERROR "glfw3.lib not found") +endif() + +# Find GLEW +find_package(GLEW REQUIRED) + +if(GLEW_FOUND) +set(GLEW_INCLUDE_DIR ${GLEW_INCLUDE_DIRS}) +get_filename_component(GLEW_LIBRARIES ${GLEW_LIBRARIES} DIRECTORY) +message(STATUS "GLEW_INCLUDE_DIR: ${GLEW_INCLUDE_DIR}") +message(STATUS "GLEW_LIBRARIES: ${GLEW_LIBRARIES}") +else() +message(FATAL_ERROR "GLEW not found") +endif() + +# Find OpenGL +if(NOT WIN32) + find_package(OpenGL REQUIRED) +endif() + +# Find stb_image +find_path(stb_image_INCLUDE_DIR stb_image.h +HINTS +${CMAKE_CURRENT_SOURCE_DIR}/include +${CMAKE_CURRENT_SOURCE_DIR}/include/stb +${CMAKE_CURRENT_SOURCE_DIR}/lib +${stb_image_ROOT}) + +if(stb_image_INCLUDE_DIR) +message(STATUS "stb_image_INCLUDE_DIR: ${stb_image_INCLUDE_DIR}") +else() +message(FATAL_ERROR "stb_image not found") +endif() + +# Find stb_image + +find_path(ComputeEngine_LIB_DIR ComputeEngine.lib +HINTS +${CMAKE_CURRENT_SOURCE_DIR}/include +${CMAKE_CURRENT_SOURCE_DIR}/lib +${ComputeEngine_ROOT} +${ComputeEngine_ROOT}/lib +${ComputeEngine_ROOT}/bin +${ComputeEngine_ROOT}/bin/x64/Release) + +if(ComputeEngine_LIB_DIR) +message(STATUS "ComputeEngine_LIB_DIR: ${ComputeEngine_LIB_DIR}") +else() +message(FATAL_ERROR "ComputeEngine.lib not found") +endif() + + +find_path(ComputeEngine_INCLUDE_DIR ComputeEngine.h +HINTS +${CMAKE_CURRENT_SOURCE_DIR}/include +${CMAKE_CURRENT_SOURCE_DIR}/lib +${ComputeEngine_ROOT} +${ComputeEngine_ROOT}/src) + +if(ComputeEngine_INCLUDE_DIR) +message(STATUS "ComputeEngine_INCLUDE_DIR: ${ComputeEngine_INCLUDE_DIR}") +else() +message(FATAL_ERROR "ComputeEngine not found") +endif() + +# Add source +add_subdirectory(src) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src +${GLFW_INCLUDE_DIR} +${OPENGL_INCLUDE_DIR} +${stb_image_INCLUDE_DIR} +${ComputeEngine_INCLUDE_DIR} +${GLEW_INCLUDE_DIR}) +target_link_directories(${PROJECT_NAME} PUBLIC ${GLFW_LIB_DIR} ${GLEW_LIBRARIES} ${ComputeEngine_LIB_DIR}) +target_link_libraries(${PROJECT_NAME} "glfw3.lib" "opengl32.lib" "glew32s.lib" "ComputeEngine.lib") + +# Copy shaders, assets and configs for binaries to access +file(COPY shaders DESTINATION ${CMAKE_BINARY_DIR}/Release) +file(COPY assets DESTINATION ${CMAKE_BINARY_DIR}/Release) +file(COPY configs DESTINATION ${CMAKE_BINARY_DIR}/Release) \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..d6adc5a --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021 Dawid Pietrykowski + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..9e21481 --- /dev/null +++ b/README.md @@ -0,0 +1,79 @@ +# GPU Ray Tracer +GPU Ray Tracing application based on my OpenGL Compute Engine. +

+ +

+ +## Dependencies + +* OpenGL +* GLFW +* GLEW +* [stb_image](https://github.com/nothings/stb) +* [OpenGL Compute Engine](https://github.com/DawidPietrykowski/ComputeEngine) + +## Build + +Specify these root directories for dependencies in [make.bat](make.bat) script: +* GLFW_ROOT +* GLEW_ROOT +* stb_image_ROOT +* ComputeEngine_ROOT + +Run [make.bat](make.bat) script. + +## Config files + +Each scene/configuration is described in a config file. + +Example scenes are located in [/configs](configs) directory. + +All available parameters are specified in [config_template.txt](config_template.txt). + +## Usage + +Pass chosen config file to the generated executable as an argument in command line. + +If no argument given, *config.txt* is picked. + +## Features + +* Wavefront (.obj) file import +* PNG, JPG, HDR texture import +* Object can be an imported triangle mesh, sphere or infinite plane +* Each scene is saved in a separate file +* Specular and diffuse reflections +* Physics based refractions +* Camera movement +* Screenshot saving + +## Example images +Mesh | Refraction +:-------------------------:|:-------------------------: +![](screenshots/fox2.png) | ![](screenshots/refraction1.png) +Multiple meshes 1 | Multiple meshes 2 +![](screenshots/objects1.png) | ![](screenshots/objects4.jpg) +Solar system 1 | Solar system 2 +![](screenshots/solar_system1.png) | ![](screenshots/solar_system2.png) + +## Keys +Camera + +* UP - SPACE +* DOWN - CTRL +* LEFT - A +* RIGHT - D +* FORWARD - W +* BACKWARD - S + +Window + +* Screenshot - L +* Disable input to window - P +* Close application - ESC + +## License and copyright + +© Dawid Pietrykowski + +Licensed under the [MIT LICENSE](LICENSE) \ No newline at end of file diff --git a/assets/objects/Tri1.obj b/assets/objects/Tri1.obj new file mode 100644 index 0000000..82c8ab3 --- /dev/null +++ b/assets/objects/Tri1.obj @@ -0,0 +1,14 @@ +# Blender v2.93.1 OBJ File: '' +# www.blender.org +mtllib Tri1.mtl +o Triangle1_Plane.001 +v 0.000000 0.250000 0.250000 +v -0.000000 -0.250000 0.250000 +v -0.000000 -0.250000 -0.250000 +vt 0.000000 0.000000 +vt 0.000000 0.000000 +vt 0.000000 0.000000 +vn 1.0000 -0.0000 0.0000 +usemtl None +s off +f 2/1/1 3/2/1 1/3/1 diff --git a/assets/objects/Tri2.obj b/assets/objects/Tri2.obj new file mode 100644 index 0000000..65db343 --- /dev/null +++ b/assets/objects/Tri2.obj @@ -0,0 +1,14 @@ +# Blender v2.93.1 OBJ File: '' +# www.blender.org +mtllib Tri2.mtl +o Triangle1_Plane.001 +v 0.000000 0.866000 0.000000 +v -0.000000 0.000000 0.500000 +v -0.000000 0.000000 -0.500000 +vt 0.000000 0.000000 +vt 0.000000 0.000000 +vt 0.000000 0.000000 +vn 1.0000 -0.0000 0.0000 +usemtl None +s off +f 2/1/1 3/2/1 1/3/1 diff --git a/assets/objects/bunny.obj b/assets/objects/bunny.obj new file mode 100644 index 0000000..a4734b9 --- /dev/null +++ b/assets/objects/bunny.obj @@ -0,0 +1,749 @@ +# Aspose.3D Wavefront OBJ Exporter +# Copyright 2004-2020 Aspose Pty Ltd. +# File created: 03/29/2021 23:03:24 + + +# +# object obj_49383600 +# + +v 29.2269916534423828 18.7071514129638672 44.5394935607910156 +v 46.1599884033203125 16.62591552734375 49.9615364074707032 +v 36.51894378662109376 26.35740280151367188 43.72159194946289056 +v 46.75090789794921872 -33.6832923889160156 10.30902957916259764 +v 55.25984191894531248 -29.120697021484375 14.60501098632812496 +v 55.13576507568359376 -33.8189773559570312 21.71150970458984376 +v 31.11716461181640624 26.49944305419921872 112.43421173095703128 +v 23.36201286315917968 20.39640235900878904 106.93875885009765632 +v 29.54286956787109376 11.76572322845458992 111.69308471679687504 +v 13.9773006439208984 -17.52171897888183592 65.43387603759765624 +v 12.46042060852050784 -27.63136100769042968 52.31146621704101564 +v 27.16110801696777344 -20.2105083465576172 64.58981323242187504 +v 21.05088043212890625 14.74404239654541008 31.4851055145263672 +v 5.5918617248535156 20.20020103454589844 48.56942749023437504 +v 56.67658233642578128 18.93350028991699216 42.7540321350097656 +v 63.93592834472656256 15.73615455627441408 34.6951332092285156 +v -19.51201629638671872 -24.39798164367675784 57.55654144287109376 +v -22.7219352722167968 -26.36110877990722656 64.22136688232421876 +v -22.55702209472656248 -7.86387681961059568 60.11608505249023438 +v 63.09252166748046876 13.91029834747314448 22.04300689697265625 +v 74.1036834716796875 -2.43334007263183592 25.02628326416015625 +v 65.3927001953125 1.68511331081390384 12.97910213470458992 +v 8.38037967681884768 43.98431015014648432 107.66382598876953128 +v 18.30934715270996092 45.19732666015625 97.1142120361328125 +v 6.27607679367065428 42.75445175170898432 90.71604156494140624 +v 56.4393882751464844 12.56831359863281248 14.20601367950439452 +v 49.96049880981445312 21.4942588806152344 29.36673736572265624 +v 7.37312126159667968 -20.27310562133789064 19.88604927062988288 +v 10.06119537353515625 -10.79148197174072272 10.21739006042480468 +v 7.33784532546997072 -24.84254455566406256 15.42577457427978512 +v 38.37430191040039064 19.97419738769531248 16.78899765014648432 +v 28.56501770019531248 26.42728805541992184 32.5672569274902344 +v -1.81486070156097408 -7.4848670959472656 11.85942077636718752 +v -0.45687121152877808 -12.88178730010986336 5.25388288497924804 +v 10.39310741424560544 6.1247873306274414 14.84242916107177728 +v 31.86298942565917968 17.09134864807128906 15.07627010345458984 +v 13.46739578247070312 17.5025672912597656 8.85838127136230464 +v 4.80457162857055664 10.327667236328125 78.9310302734375 +v 9.65761470794677736 7.29352474212646484 79.93582153320312496 +v 11.32273197174072264 10.6953716278076172 68.51003265380859376 +v 82.99677276611328128 -9.7580680847167968 31.68515968322753904 +v 82.0118255615234375 -22.4488468170166016 25.6991024017333984 +v 84.232940673828125 -10.80918884277343744 23.27418136596679688 +v 16.21977233886718752 41.00417709350585937 112.51364135742187504 +v 3.3307161331176758 19.61721611022949216 82.53744506835937504 +v 4.80430507659912112 14.35305404663085936 89.171173095703125 +v -23.88985443115234368 -7.02867889404296875 67.72207641601562496 +v -17.01632499694824218 6.63105201721191408 62.73796463012695312 +v 10.39754581451416016 -3.8880867958068848 89.70954132080078128 +v 22.6168804168701172 2.45894670486450192 96.78727722167968752 +v 7.05195331573486328 -3.02997994422912597 92.85295867919921872 +v 19.87436485290527344 -37.05016326904296875 7.22531938552856444 +v 31.45262718200683592 -34.74391937255859376 15.3894691467285156 +v 17.84795188903808592 -29.94757270812988288 17.25342369079589844 +v 28.90240287780761712 20.60258674621582032 94.55020904541015624 +v 36.36320877075195312 19.8498458862304688 93.3807373046875 +v 59.22303771972656248 11.8868484497070312 63.99115753173828128 +v 68.24211883544921876 9.4947519302368164 51.54703521728515624 +v 57.81429290771484368 13.20491218566894532 53.83342361450195312 +v 77.16011810302734376 -20.24839019775390624 40.03556060791015625 +v 64.277557373046875 -29.07714462280273438 17.08965492248535156 +v 75.23549652099609376 -20.46164321899414064 30.35824203491210936 +v 38.195709228515625 23.46821212768554688 110.77934265136718752 +v 35.36323165893554688 30.64352035522460936 105.76884460449218752 +v 55.15216064453125 -35.40131378173828128 50.349212646484375 +v 71.84775543212890624 -25.79500007629394528 51.51260757446289064 +v 62.42802810668945312 -28.38229179382324216 60.18896865844726564 +v 76.14128875732421876 -2.21626663208007812 55.11595535278320312 +v 77.44384002685546872 -9.29251861572265624 31.786386489868164 +v -20.51168060302734376 -9.21454811096191408 46.44171905517578128 +v -15.61965370178222656 -19.2349529266357422 41.25363540649414064 +v -15.29505920410156248 -17.33992576599121092 55.17271804809570312 +v 48.75199890136718752 -10.750253677368164 75.2489013671875 +v 63.7695426940917968 -6.07431173324584961 69.47257232666015624 +v 50.79566955566406256 1.50849759578704832 72.232696533203125 +v -16.08183479309082031 1.18278908729553224 36.27231216430664064 +v -7.13561248779296876 -15.08703708648681641 23.83534812927246096 +v -10.10804557800292968 -20.98357963562011712 31.13195610046386718 +v 13.18477058410644532 0.51076304912567136 81.565673828125 +v 16.88176727294921872 -3.67467927932739256 71.50720977783203128 +v -7.09630823135375976 11.37934875488281248 82.82804107666015632 +v 4.5982027053833008 36.35845565795898436 84.12895965576171876 +v -17.36277961730957032 -2.177473783493042 54.5558433532714844 +v -5.4625592231750488 11.13649368286132812 58.63687133789062496 +v -8.19248962402343752 14.45539283752441408 44.9015007019042968 +v -2.56485056877136232 12.45848274230957032 77.94854736328124992 +v 1.88036775588989264 37.06636810302734375 110.21144104003906248 +v -2.58205103874206544 3.2919635772705078 90.29957580566406248 +v 9.67969989776611328 4.9975509643554688 100.12470245361328124 +v -4.20537090301513672 -8.04032707214355469 93.7403640747070312 +v 6.3861947059631348 8.4257755279541016 90.64358520507812496 +v -21.59369850158691408 -5.9087843894958496 86.37941741943359376 +v -14.11741065979003906 -16.906991958618164 88.40599822998046872 +v -20.01825714111328125 -24.49141311645507816 77.26279449462890624 +v -19.34169197082519532 -1.29073989391326904 78.16192626953125 +v 74.177459716796875 6.97171211242675776 41.44295501708984376 +v 3.63041520118713376 -19.40182685852050784 88.53870391845703128 +v -6.77209520339965824 -27.36722183227539064 83.07039642333984375 +v -7.55354213714599608 1.5064057111740112 24.98490905761718752 +v 16.29630851745605468 -30.71138000488281248 28.90166664123535152 +v 8.90513324737548832 5.376802921295166 5.27490663528442384 +v 54.83198547363281248 12.99079322814941408 5.35187101364135744 +v 54.9233512878417968 -0.2649933695793152 5.37623500823974608 +v 22.39579963684082032 18.55037307739257816 5.31186628341674804 +v 47.88055801391601568 -23.29201889038085936 72.03797149658203125 +v 42.55121994018554688 -31.09136199951171876 64.35157775878906248 +v -6.452786922454834 -22.76462936401367184 5.37584447860717776 +v -4.46216583251953128 33.056182861328125 103.48020935058593752 +v 32.65083694458007816 16.57406425476074216 59.56192779541015624 +v 6.2392578125 4.27880477905273436 21.56959152221679688 +v -4.71177959442138672 -24.59897804260253904 55.313018798828125 +v -1.69332873821258544 -30.4149131774902344 44.65390396118164064 +v 74.37795257568359376 -16.98300933837890624 5.28086519241333008 +v 67.26598358154296876 -25.76189041137695312 5.33583116531372072 +v -5.43409252166748048 1.44832193851470944 7.63063430786132816 +v 67.75669097900390624 -19.78534507751464848 64.53250122070312496 +v 42.71334838867187504 -41.42763137817382816 30.45937919616699216 +v 62.88567733764648432 -34.11768722534179688 37.38273239135742184 +v 49.20783233642578124 -39.96623229980468752 41.97236633300781248 +v 27.72405433654785152 -39.77682113647460944 41.86899566650390624 +v 31.18092536926269532 -41.30659103393554688 27.11434364318847656 +v 39.49838638305664064 -40.30412292480468752 46.21828842163085936 +v 29.23694992065429688 1.37228035926818848 68.70236968994140624 +v -9.31655120849609376 8.58915328979492184 87.90459442138671872 +v 1.37167084217071536 -29.63838195800781248 8.03566932678222656 +v -4.24593162536621092 23.64100456237792968 94.46986389160156248 +v -14.4831504821777344 -32.90485763549804688 70.88102722167968752 +v 19.48527145385742184 38.6300697326660156 93.62115478515625 +v 17.3737812042236328 15.59567546844482424 62.4346351623535156 +v 43.60511398315429688 11.60811328887939456 63.7271766662597656 +v 21.24066543579101564 36.32899475097656248 104.2266845703125 +v 5.31533336639404296 -16.9998817443847656 80.26005554199218752 +v -5.81819772720336912 -33.93497085571289056 62.8038368225097656 +v 1.50082623958587648 -25.9176101684570312 65.0045013427734375 +v 70.4715576171875 -5.5913705825805664 5.29483366012573244 +v 23.54933738708496096 -31.61586570739746096 47.89533233642578128 +v -1.42583394050598144 -28.69783210754394528 35.92781066894531248 +v 41.233245849609375 26.83197402954101568 32.63880538940429688 +v 79.97744750976562496 -3.08799314498901367 21.75872993469238288 +v 30.0410614013671875 30.60115051269531248 103.61256408691406248 +v 46.4701499938964844 -32.18011856079101562 5.31205368041992188 +v 2.11345338821411132 16.71648406982421872 32.44476318359375 +v 12.69772148132324216 -28.18157005310058592 5.31037855148315428 +v 6.41978120803833008 -6.827970027923584 13.85188674926757808 +v 3.26982116699218752 34.31559371948242188 94.0829010009765625 +v 10.60813045501708984 28.95355415344238288 101.51660919189453128 +v -2.15479731559753418 20.62360763549804688 100.33632659912109376 +v 35.53003692626953128 14.81942272186279296 95.24540710449218752 +# 148 vertices + +vn -0.24970725178718568 0.335138738155365 0.90847581624984736 +vn 0.58663380146026608 -0.68023526668548584 -0.43947783112525936 +vn -0.58970361948013304 0.02240115590393543 0.8073090314865112 +vn -0.11968009173870086 -0.77974206209182736 0.61455595493316648 +vn 0.00984428916126489 0.95510029792785648 -0.29611912369728088 +vn 0.3422042727470398 0.9374650120735168 -0.06368373334407806 +vn -0.88608634471893312 -0.09288705885410308 -0.45411783456802368 +vn 0.78809839487075808 0.45536118745803832 -0.41418239474296568 +vn -0.17316585779190064 0.9836288690567016 -0.04987861961126328 +vn 0.28597408533096312 0.87417888641357424 -0.3924666941165924 +vn -0.9808505177497864 0.1398676335811615 -0.1355334222316742 +vn 0.17641238868236542 0.944634199142456 -0.27666741609573364 +vn -0.13296101987361908 -0.7807365655899048 0.61055040359497072 +vn -0.26642125844955444 0.50407081842422488 0.82154262065887456 +vn 0.45560252666473392 0.8328297138214112 0.31435805559158324 +vn 0.97492736577987664 -0.15222430229187012 0.16230946779251098 +vn 0.18393364548683168 0.94179677963256832 0.28140234947204588 +vn 0.980362355709076 0.18354213237762452 -0.07212463766336441 +vn -0.90259510278701776 0.3811984956264496 -0.20002451539039612 +vn 0.19521434605121612 -0.87338674068450928 0.44619157910346984 +vn -0.21468737721443176 -0.81695955991744992 0.53524422645568848 +vn -0.02623104117810726 0.75605422258377072 -0.65398311614990232 +vn 0.34847211837768556 0.93447768688201904 0.07292895019054413 +vn 0.70180815458297728 -0.70147013664245608 -0.1241169273853302 +vn 0.9511099457740784 0.26676183938980104 -0.15565338730812072 +vn 0.43107223510742184 -0.41208776831626896 0.80272060632705696 +vn 0.46852850914001464 -0.8453678488731384 0.25658187270164488 +vn 0.99857264757156368 0.01312204729765653 0.05177278071641922 +vn -0.87739181518554688 -0.47222936153411864 0.08475296199321747 +vn 0.30397418141365052 0.17952677607536316 0.93561202287673952 +vn -0.87742161750793456 -0.1293361485004425 -0.46195617318153384 +vn 0.70160865783691408 0.59344148635864256 0.394426703453064 +vn 0.86883020401000976 0.48049768805503848 0.11939853429794312 +vn -0.8860017657279968 0.42451477050781248 -0.18651574850082396 +vn -0.46557700634002688 0.61207479238510128 -0.6392202377319336 +vn -0.4331026375293732 0.85269522666931152 0.29211801290512084 +vn 0.23017500340938568 0.3837095499038696 -0.89430779218673712 +vn -0.27761799097061156 0.5507288575172424 0.78716325759887696 +vn -0.50597679615020752 -0.4822068810462952 0.71516710519790648 +vn -0.05731432139873505 0.29756078124046324 0.95298093557357792 +vn -0.15161794424057006 0.1999972015619278 0.9679943919181824 +vn -0.39843684434890744 -0.10290705412626266 0.91140455007553104 +vn -0.91902154684066768 0.01152918674051761 0.39403861761093136 +vn 0.97970312833786016 0.20036180317401884 -0.00607372634112834 +vn -0.07604511082172394 -0.49492880702018736 0.86559957265853888 +vn 0.58766359090805056 0.55032050609588624 -0.59312635660171512 +vn -0.61296755075454712 0.6532816290855408 -0.444402813911438 +vn -0.25731432437896728 0.84149378538131712 0.47505536675453184 +vn -0.69050753116607664 -0.70993500947952272 -0.13853384554386138 +vn -0.94031602144241328 0.31791672110557556 0.12138663232326508 +vn 0.00091938686091452 -0.00183164933696389 -0.9999979138374328 +vn -0.91666120290756224 0.39955899119377136 0.00921220518648624 +vn 0.38958337903022768 0.35762888193130492 0.84872043132781984 +vn -0.42257112264633176 -0.62938845157623288 0.65215325355529784 +vn -0.35814094543457032 -0.20813685655593872 0.91017258167266848 +vn 0.96752774715423584 0.23525057733058928 -0.09245149046182632 +vn 0.23099730908870696 -0.7584441900253296 0.60942810773849488 +vn 0.00077152898302301 -0.00208726129494607 -0.99999749660491936 +vn -0.67242550849914552 0.70947641134262088 0.2109196037054062 +vn 0.08263169974088669 0.98913156986236576 0.12161709368228912 +vn -0.4773918688297272 0.8574798107147216 -0.19189944863319396 +vn -0.64278203248977664 -0.73420298099517824 0.21858009696006776 +vn -0.43309852480888368 0.8729092478752136 -0.22462211549282072 +vn 0.70491415262222288 -0.57367825508117672 -0.41712024807929992 +vn 0.65345120429992672 0.36738818883895872 0.66183644533157352 +vn 0.3835110664367676 0.83584380149841312 0.39279058575630184 +vn -0.18719570338726044 0.09710923582315444 -0.97751092910766608 +vn -0.04110484942793846 0.98158979415893552 0.18652568757534028 +vn 0.98395121097564704 0.0064542256295681 -0.17832091450691224 +vn -0.35631072521209716 -0.52095669507980344 0.77565890550613408 +vn 0.75926911830902096 -0.01362873055040836 0.65063405036926272 +vn 0.3662022650241852 -0.9262694120407104 -0.08899912238121033 +vn -0.07596495002508163 -0.99346333742141728 0.08520513772964478 +vn -0.62271571159362792 0.64145410060882568 0.44806453585624696 +vn -0.867759108543396 0.49605607986450192 0.03037312813103199 +vn -0.24098789691925048 0.83659124374389648 -0.49197551608085632 +vn -0.15761986374855042 0.26063117384910584 0.95248484611511232 +vn -0.8934364318847656 -0.1040610894560814 0.43696984648704528 +vn -0.74617767333984368 0.51857739686965944 -0.4174881875514984 +vn 0.42130696773529056 0.6251288056373596 0.65704977512359616 +vn -0.37906581163406376 0.39054381847381592 -0.83891874551773072 +vn -0.76252144575119024 0.6304311752319336 0.14531882107257844 +vn -0.58096396923065184 -0.38351902365684512 0.71790951490402224 +vn -0.90442204475402832 0.38492888212203976 -0.18398508429527284 +vn -0.97930699586868288 0.05213161930441856 0.19555065035820008 +vn -0.03246266394853592 -0.78993684053421024 0.61232829093933104 +vn -0.23338073492050172 -0.60974746942520144 0.75745719671249392 +vn -0.40711835026741024 -0.70672720670700072 0.57861149311065672 +vn 0.29023453593254088 0.70350641012191776 0.64872384071350096 +vn 0.24933953583240508 0.94970089197158816 0.18946781754493712 +vn -0.93680673837661744 -0.3394310772418976 0.08473329246044159 +vn 0.78614675998687744 -0.38708937168121336 -0.48180401325225832 +vn -0.21969813108444212 0.85461348295211792 0.47049820423126224 +vn -0.4548523724079132 0.28636524081230164 0.84327000379562384 +vn -0.1351923793554306 0.58017039299011232 0.80319696664810176 +vn 0.84922689199447632 -0.46912801265716552 -0.24234803020954132 +vn 0.6859333515167236 -0.6897874474525452 0.2317083328962326 +vn 0.81231909990310672 -0.36861407756805416 0.45195287466049192 +vn -0.72827202081680304 0.68292677402496336 0.05684136226773262 +vn 0.69593769311904904 -0.57742089033126832 0.42691430449485776 +vn 0.08928497135639191 -0.93556761741638176 -0.34167444705963136 +vn -0.83724951744079584 0.38946789503097536 -0.38383334875106808 +vn 0.74938112497329712 0.59438335895538328 0.2917814254760742 +vn -0.00062140071531757 -0.00193380715791136 -0.9999979138374328 +vn 0.26474756002426148 0.78145855665206912 -0.56500548124313352 +vn 0.69879382848739624 -0.71498209238052368 -0.022086001932621 +vn -0.07554682344198227 -0.88416182994842528 0.46103197336196896 +vn 0.08319604396820068 0.98910063505172736 0.12148407846689224 +vn -0.47051095962524416 -0.67786937952041624 0.56490051746368408 +vn -0.31242719292640688 -0.759678602218628 -0.57033121585845944 +vn -0.4428110122680664 0.87765204906463616 -0.18342643976211548 +vn -0.03207950294017791 0.99906057119369504 0.02913457900285721 +vn 0.24092940986156464 0.66491419076919552 -0.70699512958526608 +vn 0.845348596572876 0.47518694400787352 0.2440965324640274 +vn -0.25282615423202516 0.11301334202289582 0.96088862419128416 +vn 0.34230560064315796 0.82477170228958128 0.45008721947669984 +vn -0.75951063632965088 0.48111817240715024 0.43780001997947696 +vn 0.13204924762248992 -0.85053431987762448 0.50907212495803832 +vn -0.71592551469802856 -0.6547850966453552 0.2422954887151718 +vn 0.3695416748523712 -0.90742516517639168 -0.20004631578922272 +vn 0.51897203922271728 -0.78812813758850096 0.33094111084938048 +vn 0.20764878392219544 -0.8857771158218384 0.41506728529930112 +vn -0.04760785400867462 0.67377614974975584 -0.73740029335021968 +vn -0.08264333754777908 0.5271016359329224 0.84577417373657232 +vn -0.47727379202842712 -0.6667965650558472 0.57235658168792728 +vn 0.11665602028369904 -0.08298873901367188 -0.98969906568527216 +vn -0.7406159043312072 0.63651543855667112 0.21525846421718596 +vn -0.59942573308944704 -0.78168958425521856 -0.17219233512878418 +vn 0.95688569545745856 -0.16917262971401214 0.23611515760421752 +vn 0.00732587231323123 -0.12825435400009156 0.99171423912048336 +vn 0.86832356452941888 0.49156215786933896 0.06618776917457581 +vn -0.76541084051132208 -0.58674436807632448 0.26434314250946044 +vn 0.23154971003532408 0.46257615089416504 0.85580843687057488 +vn -0.0003464994370006025 0.00482736714184284 -0.999988317489624 +vn 0.03126725181937217 0.66377341747283936 -0.74727988243103024 +vn -0.31111782789230348 -0.94751060009002688 0.0736844390630722 +vn -0.26918122172355652 0.9625107645988464 -0.03338463231921196 +vn -0.11666978895664216 -0.96342885494232176 0.241232231259346 +vn -0.01139813940972089 0.50898200273513792 -0.86070168018341072 +vn -0.52416664361953736 0.09105326980352402 0.84673410654068 +vn 0.19841088354587556 -0.0703740194439888 0.97758919000625616 +vn -0.25919866561889648 0.96544104814529424 -0.02719704993069172 +vn -0.43537938594818112 -0.82428520917892464 -0.36193740367889408 +vn -0.18235620856285096 0.88287919759750368 0.43274769186973568 +vn -0.58329147100448608 -0.810556709766388 -0.05262040719389915 +vn 0.66281384229660032 -0.70260530710220336 0.25888913869857788 +vn -0.4590415060520172 0.77249658107757568 0.43878236413002016 +vn 0.94158095121383664 0.29038530588150024 -0.17059224843978882 +vn 0.1920674741268158 -0.87005656957626336 0.45399516820907592 +vn 0.07280475646257401 0.71784144639968872 0.69238942861557008 +vn 0.18146096169948576 0.98329883813858032 0.01397569105029106 +vn -0.44449236989021304 -0.89380341768264768 0.05951415374875069 +vn 0.88266384601593024 -0.2511926293373108 -0.39724907279014584 +vn -0.81446379423141472 -0.28465747833251952 -0.50558757781982424 +vn -0.3900039196014404 -0.13602347671985626 0.91071099042892464 +vn -0.02743688412010669 -0.23214401304721832 -0.97229439020156864 +vn -0.00270320149138569 0.00739135965704917 -0.9999690055847168 +vn -0.96895503997802736 0.03772541135549545 -0.24434180557727812 +vn -0.80084294080734256 0.482166200876236 0.35519900918006896 +vn -0.54156059026718136 0.76763302087783808 -0.34271225333213808 +vn -0.33642020821571352 0.31739115715026856 0.8866139650344848 +vn -0.06564720720052719 -0.81724977493286128 0.57253229618072512 +vn 0.18778356909751892 0.94455975294113152 0.26934033632278444 +vn 0.07425961643457413 -0.6908647418022156 0.71916025876998904 +vn -0.02873853221535682 -0.95765948295593264 -0.28646546602249144 +vn -0.42025744915008544 -0.63216543197631832 0.6509612202644348 +vn -0.24677959084510804 0.33114317059516908 0.91073817014694208 +vn 0.63567203283309936 -0.76634061336517328 -0.0929684340953827 +vn 0.42679980397224424 0.89061766862869264 -0.156978040933609 +vn 0.07198487967252731 -0.99373155832290656 0.08553241193294525 +vn -0.21225672960281372 -0.8563271164894104 0.47079825401306152 +vn -0.01990937069058418 0.991133451461792 0.13137024641036988 +vn -0.65347522497177128 0.62485998868942264 -0.4272237420082092 +vn 0.181496724486351 -0.9831812381744384 0.02033745683729648 +vn 0.91251486539840704 -0.4032281935214996 0.0687287226319313 +vn -0.70801609754562376 0.47971197962760928 -0.5182563662528992 +vn 0.00323506281711161 -0.0005073354113847 -0.99999463558197024 +vn 0.61500161886215208 -0.62446051836013792 0.48147901892662048 +vn -0.18677607178688048 -0.96281766891479488 -0.19518424570560456 +vn -0.84726375341415408 0.29374650120735168 -0.44255745410919192 +vn 0.29467985033988952 -0.95493042469024656 0.035660270601511 +vn -0.4542710185050964 0.89012598991394048 -0.03624364361166954 +vn 0.1536216139793396 -0.82550781965255744 -0.5430812239646912 +vn 0.1178147867321968 0.24622704088687896 0.96202492713928224 +vn 0.3805832862854004 -0.25408482551574708 0.88915538787841792 +vn 0.2119954824447632 -0.88903737068176272 0.40579614043235776 +vn 0.54523766040802 0.82186877727508544 0.16506853699684144 +vn -0.87479120492935184 -0.19817112386226656 -0.4421182572841644 +vn 0.51406896114349368 -0.74190211296081536 -0.43048155307769776 +vn 0.40594604611396792 -0.20300176739692688 0.89106571674346928 +vn 0.07256699353456497 0.99423390626907344 -0.07894936949014664 +vn 0.96768462657928464 -0.1671919971704483 -0.18876777589321136 +vn -0.56235808134078976 -0.81748104095458992 0.1244109719991684 +vn -0.3534061312675476 0.92720389366149904 -0.12408474087715148 +vn 0.96662914752960208 0.23146969079971312 -0.10977175831794738 +vn 0.11324802786111832 -0.98250836133956912 0.14782492816448212 +vn 0.730815589427948 0.59084439277648928 -0.3417769968509674 +vn -0.72052550315856936 0.36794048547744752 -0.587760865688324 +vn -0.79797774553298944 0.02162783592939376 -0.6022987365722656 +vn -0.86098223924636848 -0.11725813150405884 -0.49493446946144104 +vn 0.34074115753173828 -0.71537107229232792 0.61003249883651736 +vn 0.314597487449646 -0.2071406841278076 0.92634826898574832 +vn 0.58933055400848392 0.03212351724505424 -0.8072530627250672 +vn 0.83304929733276368 0.53696709871292112 -0.13302306830883026 +vn -0.92414301633834832 0.36888316273689272 0.09942293167114258 +vn 0.8962576985359192 -0.22189226746559144 0.3840389549732208 +vn -0.50519466400146488 0.3843364715576172 0.77269905805587776 +vn 0.0470973514020443 0.42943313717842104 -0.90186971426010128 +vn 0.37397915124893192 -0.5923548936843872 0.713621199131012 +vn 0.69862163066864016 -0.49630698561668392 -0.51537090539932248 +vn -0.7558361887931824 0.58611941337585448 0.2918487787246704 +vn -0.30359488725662232 0.56810718774795536 -0.7649080753326416 +vn 0.24735680222511292 0.74033153057098384 -0.62507903575897216 +vn 0.8039842247962952 -0.5946462154388428 -0.00229078996926546 +vn -0.90941148996353152 0.134738489985466 0.39346697926521304 +vn 0.02006429806351661 0.98665112257003792 -0.16160748898983002 +vn -0.4049139618873596 -0.6234914660453796 -0.66880720853805544 +vn -0.77831488847732544 -0.575738787651062 0.25050109624862672 +vn 0.65230089426040648 -0.75646907091140752 -0.04751938953995705 +vn 0.55365586280822752 -0.79709297418594368 -0.24105605483055116 +vn -0.94793128967285152 -0.23128956556320192 0.21893236041069032 +vn 0.44380423426628112 0.01548610720783472 -0.89598995447158816 +vn -0.00649344967678189 -0.00100055860821157 -0.99997842311859136 +vn -0.02935789711773395 -0.99744534492492672 0.0651223435997963 +vn -0.66109728813171384 -0.12028507888317108 -0.74059563875198368 +vn -0.14275053143501282 -0.49430289864540104 -0.85748875141143792 +vn -0.92662185430526736 0.3654223680496216 0.08853521943092346 +vn 0.53284692764282224 0.04001355543732643 -0.8452650904655456 +vn -0.10722923278808594 -0.72367829084396368 0.68175631761550904 +vn 0.46183589100837704 0.46508270502090456 -0.75525206327438352 +vn 0.79232209920883184 0.3368428945541382 -0.50868707895278928 +vn -0.25137388706207276 0.06059076637029648 -0.96599167585372928 +vn 0.70324552059173584 -0.69976836442947384 -0.12557868659496308 +vn -0.57037681341171264 -0.40104922652244568 0.7168192267417908 +vn 0.29595935344696044 -0.20618622004985808 0.93268179893493648 +vn -0.35042396187782288 -0.81379395723342896 -0.46361887454986576 +vn 0.0893765464425087 0.96938210725784304 -0.2287142425775528 +vn 0.2189742773771286 0.86373382806777952 0.45388776063919064 +vn -0.02437883056700229 0.63375842571258544 0.7731467485427856 +vn 0.57484298944473264 0.76977801322937008 0.27748396992683412 +vn -0.829281747341156 0.42418590188026432 -0.36381044983863832 +vn -0.42911335825920104 0.06272477656602859 0.90107011795043952 +vn 0.41679540276527408 0.48391243815422056 -0.76948702335357664 +vn -0.58530229330062864 -0.80025374889373776 -0.1304420828819275 +vn -0.69929701089859008 -0.36175790429115296 0.6165345907211304 +vn -0.33860161900520324 -0.84582865238189696 -0.412216991186142 +vn 0.19018015265464784 -0.91245865821838384 0.3622853457927704 +vn 0.58625453710556032 0.7969778180122376 0.14536863565444946 +vn -0.76684629917144768 0.52661973237991336 -0.36690381169319152 +vn 0.3967168033123016 -0.89283728599548336 -0.21320721507072448 +vn 0.6390816569328308 -0.70578795671463016 -0.30567634105682372 +vn 0.81943345069885248 -0.52335655689239504 0.23372355103492736 +vn -0.02236813306808471 -0.39762631058692936 0.91727477312088016 +vn 0.68345886468887328 -0.68132919073104856 0.26205825805664064 +vn 0.662276029586792 0.71120834350585936 -0.23573967814445496 +vn -0.94917905330657952 -0.28425881266593932 -0.13511516153812408 +vn -0.24385102093219756 0.05513159558176994 -0.9682443737983704 +vn 0.92163252830505376 -0.21699032187461852 0.32172766327857972 +vn -0.59916043281555176 -0.29900810122489928 0.74269843101501472 +vn 0.30421969294548036 -0.68268746137619016 0.6643705368041992 +vn -0.14878547191619874 -0.23548351228237152 -0.9604219794273376 +vn 0.30264484882354736 0.8722368478775024 -0.38419911265373232 +vn -0.10183964669704438 -0.86706489324569696 -0.48767530918121336 +vn -0.07060958445072174 -0.45508888363838192 0.88764202594757088 +vn -0.34092089533805848 -0.74231290817260736 -0.57684004306793216 +vn 0.47806212306022648 -0.85514181852340704 0.20047219097614288 +vn -0.53284490108489992 0.03276726603507995 -0.84557825326919552 +vn 0.43560233712196352 -0.8834867477416992 0.17234212160110474 +vn 0.80032420158386224 0.2750980854034424 -0.53273093700408936 +vn -0.37371090054512024 0.92690175771713264 -0.03454373031854629 +vn 0.37024173140525816 0.92837828397750848 0.03216942772269249 +vn -0.00130573567003011 0.94870293140411376 0.31616625189781188 +vn 0.3672155141830444 -0.72098428010940544 0.58765166997909544 +vn -0.12668929994106292 -0.61159676313400272 -0.78096044063568112 +vn -0.99764347076416016 -0.04934253171086311 0.04767455905675888 +vn 0.07933630794286728 0.73581790924072272 0.67251598834991456 +vn 0.16893370449543 0.98548865318298336 -0.01653703302145004 +vn 0.51867145299911496 0.85223740339279168 0.06834724545478821 +vn -0.869807243347168 0.47973987460136416 0.11526080220937728 +vn 0.5568217635154724 -0.7862743735313416 -0.26780992746353148 +vn -0.58765739202499392 -0.78793954849243168 -0.18387508392333984 +vn 0.17885938286781312 -0.93345445394515984 0.31092146039009096 +vn 0.24281634390354156 -0.49061292409896848 0.83686268329620368 +vn 0.00254566385410726 0.0210823006927967 -0.99977451562881472 +vn 0.11186173558235168 0.88735210895538336 0.44731780886650088 +vn 0.35582318902015688 -0.89400541782379152 -0.27229419350624084 +vn 0.28187409043312072 -0.54387426376342776 0.79040986299514768 +vn -0.72130668163299568 0.5902274250984192 0.3624200224876404 +vn 0.07440707087516785 -0.9645628929138184 -0.25314417481422424 +vn 0.8855117559432984 0.39393779635429384 0.24633708596229552 +vn 0.6433589458465576 -0.35749533772468568 -0.67696845531463624 +vn 0.98037433624267584 -0.18629010021686552 -0.06451502442359924 +# 292 vertex normals + +g obj_49383600 +s 1 +f 1//1 2//1 3//1 +f 4//2 5//2 6//2 +f 7//3 8//3 9//3 +f 10//4 11//4 12//4 +f 1//5 13//5 14//5 +f 15//6 16//6 3//6 +f 17//7 18//7 19//7 +f 20//8 21//8 22//8 +f 23//9 24//9 25//9 +f 26//10 27//10 20//10 +f 28//11 29//11 30//11 +f 27//12 31//12 32//12 +f 33//13 34//13 29//13 +f 35//14 36//14 37//14 +f 38//15 39//15 40//15 +f 41//16 42//16 43//16 +f 44//17 24//17 23//17 +f 38//18 45//18 46//18 +f 47//19 48//19 19//19 +f 49//20 50//20 51//20 +f 52//21 53//21 54//21 +f 55//22 56//22 39//22 +f 57//23 58//23 59//23 +f 60//24 61//24 62//24 +f 63//25 56//25 64//25 +f 62//26 42//26 41//26 +f 65//27 66//27 67//27 +f 68//28 60//28 69//28 +f 70//29 71//29 72//29 +f 73//30 74//30 75//30 +f 76//31 77//31 78//31 +f 57//32 68//32 58//32 +f 79//33 80//33 39//33 +f 81//34 25//34 82//34 +f 83//35 48//35 84//35 +f 14//36 85//36 84//36 +f 45//37 38//37 86//37 +f 87//38 44//38 23//38 +f 88//39 51//39 89//39 +f 90//40 51//40 88//40 +f 46//41 88//41 91//41 +f 92//42 93//42 90//42 +f 47//43 94//43 95//43 +f 68//44 69//44 96//44 +f 97//45 93//45 98//45 +f 20//46 22//46 26//46 +f 76//47 85//47 99//47 +f 40//48 14//48 84//48 +f 100//49 28//49 54//49 +f 101//50 35//50 37//50 +f 102//51 103//51 104//51 +f 83//52 76//52 70//52 +f 75//53 74//53 57//53 +f 98//54 93//54 94//54 +f 105//55 73//55 12//55 +f 91//56 38//56 46//56 +f 106//57 67//57 105//57 +f 104//58 103//58 107//58 +f 23//59 108//59 87//59 +f 109//60 2//60 1//60 +f 13//61 36//61 110//61 +f 111//62 71//62 112//62 +f 91//63 55//63 39//63 +f 113//64 42//64 114//64 +f 68//65 57//65 74//65 +f 59//66 58//66 15//66 +f 115//67 101//67 34//67 +f 104//68 37//68 36//68 +f 102//69 26//69 103//69 +f 106//70 105//70 12//70 +f 68//71 74//71 116//71 +f 117//72 118//72 119//72 +f 120//73 121//73 122//73 +f 3//74 32//74 1//74 +f 83//75 85//75 76//75 +f 36//76 32//76 31//76 +f 123//77 73//77 75//77 +f 70//78 72//78 83//78 +f 32//79 36//79 13//79 +f 7//80 63//80 64//80 +f 37//81 104//81 101//81 +f 124//82 95//82 92//82 +f 125//83 30//83 107//83 +f 126//84 81//84 124//84 +f 18//85 94//85 19//85 +f 111//86 11//86 10//86 +f 51//87 9//87 89//87 +f 94//88 127//88 98//88 +f 15//89 3//89 2//89 +f 86//90 38//90 40//90 +f 34//91 33//91 115//91 +f 46//92 45//92 128//92 +f 40//93 129//93 14//93 +f 107//94 29//94 34//94 +f 130//95 123//95 75//95 +f 128//96 131//96 46//96 +f 132//97 133//97 134//97 +f 79//98 10//98 80//98 +f 124//99 81//99 95//99 +f 132//100 10//100 49//100 +f 121//101 4//101 117//101 +f 48//102 83//102 19//102 +f 68//103 96//103 58//103 +f 114//104 107//104 135//104 +f 103//105 22//105 135//105 +f 66//106 118//106 60//106 +f 11//107 111//107 112//107 +f 14//108 109//108 1//108 +f 12//109 136//109 106//109 +f 137//110 28//110 100//110 +f 8//111 55//111 91//111 +f 138//112 32//112 3//112 +f 24//113 82//113 25//113 +f 44//114 131//114 24//114 +f 124//115 92//115 88//115 +f 41//116 139//116 21//116 +f 89//117 8//117 91//117 +f 65//118 67//118 122//118 +f 94//119 18//119 127//119 +f 6//120 61//120 118//120 +f 132//121 134//121 10//121 +f 67//122 106//122 122//122 +f 56//123 55//123 140//123 +f 109//124 123//124 130//124 +f 106//125 136//125 120//125 +f 34//126 104//126 107//126 +f 81//127 48//127 95//127 +f 137//128 112//128 78//128 +f 49//129 10//129 79//129 +f 62//130 41//130 69//130 +f 41//131 43//131 139//131 +f 136//132 100//132 120//132 +f 123//133 109//133 40//133 +f 141//134 107//134 114//134 +f 142//135 13//135 110//135 +f 100//136 136//136 11//136 +f 101//137 115//137 35//137 +f 114//138 42//138 62//138 +f 138//139 27//139 32//139 +f 8//140 89//140 9//140 +f 63//141 7//141 9//141 +f 86//142 84//142 81//142 +f 17//143 133//143 127//143 +f 7//144 64//144 140//144 +f 121//145 120//145 100//145 +f 132//146 98//146 133//146 +f 89//147 91//147 88//147 +f 96//148 69//148 21//148 +f 50//149 9//149 51//149 +f 21//150 69//150 41//150 +f 26//151 102//151 36//151 +f 143//152 54//152 30//152 +f 42//153 113//153 43//153 +f 28//154 144//154 29//154 +f 73//155 123//155 12//155 +f 52//156 143//156 141//156 +f 103//157 135//157 107//157 +f 92//158 95//158 94//158 +f 1//159 32//159 13//159 +f 108//160 23//160 145//160 +f 92//161 90//161 88//161 +f 11//162 136//162 12//162 +f 109//163 59//163 2//163 +f 146//164 44//164 87//164 +f 141//165 4//165 53//165 +f 54//166 28//166 30//166 +f 115//167 33//167 144//167 +f 98//168 132//168 97//168 +f 16//169 20//169 27//169 +f 122//170 117//170 119//170 +f 106//171 120//171 122//171 +f 57//172 59//172 130//172 +f 142//173 99//173 85//173 +f 52//174 141//174 53//174 +f 132//175 49//175 97//175 +f 108//176 145//176 126//176 +f 101//177 104//177 34//177 +f 116//178 67//178 66//178 +f 137//179 100//179 112//179 +f 110//180 35//180 144//180 +f 5//181 141//181 114//181 +f 35//182 110//182 36//182 +f 6//183 5//183 61//183 +f 40//184 80//184 123//184 +f 116//185 73//185 105//185 +f 30//186 125//186 143//186 +f 16//187 15//187 58//187 +f 70//188 78//188 71//188 +f 111//189 10//189 134//189 +f 73//190 116//190 74//190 +f 86//191 40//191 84//191 +f 60//192 62//192 69//192 +f 72//193 71//193 111//193 +f 14//194 142//194 85//194 +f 131//195 128//195 24//195 +f 100//196 11//196 112//196 +f 21//197 16//197 96//197 +f 82//198 86//198 81//198 +f 76//199 99//199 77//199 +f 70//200 76//200 78//200 +f 146//201 131//201 44//201 +f 49//202 90//202 97//202 +f 45//203 86//203 82//203 +f 21//204 20//204 16//204 +f 145//205 25//205 81//205 +f 116//206 66//206 68//206 +f 29//207 107//207 30//207 +f 31//208 26//208 36//208 +f 67//209 116//209 105//209 +f 111//210 134//210 133//210 +f 84//211 85//211 83//211 +f 99//212 142//212 110//212 +f 140//213 64//213 56//213 +f 50//214 63//214 9//214 +f 147//215 126//215 124//215 +f 139//216 135//216 21//216 +f 78//217 77//217 28//217 +f 54//218 143//218 52//218 +f 114//219 62//219 61//219 +f 49//220 79//220 50//220 +f 108//221 126//221 147//221 +f 56//222 79//222 39//222 +f 113//223 114//223 135//223 +f 122//224 121//224 117//224 +f 72//225 19//225 83//225 +f 125//226 107//226 143//226 +f 23//227 25//227 145//227 +f 82//228 128//228 45//228 +f 29//229 144//229 33//229 +f 26//230 22//230 103//230 +f 139//231 43//231 135//231 +f 99//232 110//232 77//232 +f 60//233 118//233 61//233 +f 147//234 124//234 88//234 +f 123//235 80//235 12//235 +f 54//236 53//236 121//236 +f 142//237 14//237 13//237 +f 130//238 59//238 109//238 +f 75//239 57//239 130//239 +f 3//240 27//240 138//240 +f 55//241 8//241 140//241 +f 115//242 144//242 35//242 +f 128//243 82//243 24//243 +f 121//244 100//244 54//244 +f 92//245 94//245 93//245 +f 18//246 17//246 127//246 +f 65//247 122//247 119//247 +f 16//248 58//248 96//248 +f 145//249 81//249 126//249 +f 118//250 117//250 6//250 +f 50//251 79//251 148//251 +f 88//252 46//252 146//252 +f 80//253 10//253 12//253 +f 148//254 63//254 50//254 +f 21//255 135//255 22//255 +f 94//256 47//256 19//256 +f 110//257 28//257 77//257 +f 66//258 60//258 68//258 +f 147//259 87//259 108//259 +f 46//260 131//260 146//260 +f 111//261 17//261 72//261 +f 27//262 26//262 31//262 +f 121//263 53//263 4//263 +f 90//264 93//264 97//264 +f 78//265 28//265 137//265 +f 65//266 118//266 66//266 +f 17//267 19//267 72//267 +f 65//268 119//268 118//268 +f 43//269 113//269 135//269 +f 81//270 84//270 48//270 +f 16//271 27//271 3//271 +f 109//272 14//272 129//272 +f 51//273 90//273 49//273 +f 111//274 133//274 17//274 +f 144//275 28//275 110//275 +f 129//276 40//276 109//276 +f 36//277 102//277 104//277 +f 91//278 39//278 38//278 +f 95//279 48//279 47//279 +f 4//280 141//280 5//280 +f 71//281 78//281 112//281 +f 133//282 98//282 127//282 +f 147//283 88//283 146//283 +f 143//284 107//284 141//284 +f 59//285 15//285 2//285 +f 4//286 6//286 117//286 +f 147//287 146//287 87//287 +f 140//288 8//288 7//288 +f 5//289 114//289 61//289 +f 39//290 80//290 40//290 +f 148//291 79//291 56//291 +f 63//292 148//292 56//292 +#292 polygons + diff --git a/assets/objects/bunny1.obj b/assets/objects/bunny1.obj new file mode 100644 index 0000000..d66c249 --- /dev/null +++ b/assets/objects/bunny1.obj @@ -0,0 +1,738 @@ +# Blender v2.92.0 OBJ File: '' +# www.blender.org +mtllib bunny1.mtl +o Bunny-LowPoly.001 +v 0.174007 3.357922 -2.306242 +v 1.622921 3.821872 -2.128155 +v 0.797961 3.287936 -2.960854 +v 1.673485 0.428907 2.176677 +v 2.401573 0.796504 1.786267 +v 2.390956 1.404589 2.188287 +v 0.335745 9.167501 -2.973008 +v -0.327844 8.697269 -2.450786 +v 0.201036 9.104085 -1.712281 +v -1.130870 5.145801 0.793772 +v -1.260666 4.022950 1.658828 +v -0.002765 5.073577 1.023844 +v -0.525602 2.240891 -1.967128 +v -1.848391 3.702753 -2.433998 +v 2.522799 3.205144 -2.325610 +v 3.143963 2.515565 -2.052021 +v -3.996466 4.471757 1.382156 +v -4.271131 5.042050 1.550136 +v -4.257020 4.690771 -0.032626 +v 3.071795 1.432954 -1.895787 +v 4.013993 1.688226 -0.497303 +v 3.268616 0.657379 -0.849709 +v -1.609784 8.759312 -4.469144 +v -0.760188 7.856608 -4.572939 +v -1.789844 7.309132 -4.363908 +v 2.502503 0.762363 -1.780957 +v 1.948122 2.059628 -2.544727 +v -1.695973 1.248389 1.029201 +v -1.465961 0.421066 0.217882 +v -1.698992 0.866734 1.420196 +v 0.956720 0.983382 -2.414660 +v 0.117364 2.333488 -2.966834 +v -2.482165 0.561570 -0.065057 +v -2.365966 -0.003649 0.396744 +v -1.437560 0.816819 -1.229600 +v 0.399563 0.836828 -2.167981 +v -1.174501 0.304779 -2.203168 +v -1.915757 6.300719 -1.589230 +v -1.500495 6.386696 -1.329606 +v -1.358015 5.409020 -1.620694 +v 4.774952 2.258009 0.129455 +v 4.690672 1.745797 1.215373 +v 4.880728 1.538303 0.219397 +v -0.938987 9.174298 -4.214142 +v -2.041871 6.609310 -2.384113 +v -1.915780 7.176942 -1.933672 +v -4.371067 5.341597 -0.104091 +v -3.782916 4.915119 -1.272920 +v -1.437181 7.223009 -0.372824 +v -0.391603 7.828633 -0.915924 +v -1.723454 7.491983 -0.446250 +v -0.626273 0.165042 2.464771 +v 0.364450 0.863628 2.267432 +v -0.799668 1.023122 1.857020 +v 0.146233 7.637212 -2.468429 +v 0.784636 7.537144 -2.404019 +v 2.740694 5.022351 -1.722645 +v 3.512434 3.957539 -1.517960 +v 2.620151 4.153180 -1.835429 +v 4.275524 2.972532 1.027086 +v 3.173196 1.009109 1.782540 +v 4.110839 2.144468 1.045333 +v 0.941438 9.025899 -2.713633 +v 0.699070 8.597163 -3.327606 +v 2.392359 3.855045 2.323683 +v 3.820959 3.954593 1.501695 +v 3.014936 4.697008 1.723083 +v 4.188345 4.262923 -0.515877 +v 4.299801 2.266671 0.089620 +v -4.082005 3.520690 0.082948 +v -3.663407 3.076759 0.940369 +v -3.635632 4.267780 0.778216 +v 1.844713 5.985648 0.214354 +v 3.129726 5.491382 -0.185754 +v 2.019585 5.727559 -0.834596 +v -3.702954 2.650520 -0.806726 +v -2.937449 1.586320 0.585442 +v -3.191792 2.210673 1.089994 +v -1.198685 6.526158 -0.749222 +v -0.882342 5.665481 -0.391085 +v -2.934086 6.634176 -1.679220 +v -1.933416 6.745492 -3.816619 +v -3.812562 4.214995 -0.519197 +v -2.794290 4.564198 -1.658439 +v -3.027883 3.388898 -1.942429 +v -2.546340 6.216650 -1.771559 +v -2.165974 8.977304 -3.877193 +v -2.547812 7.273496 -0.987203 +v -1.498605 8.114208 -1.133146 +v -2.686715 7.567915 -0.017527 +v -1.780422 7.302932 -1.426490 +v -4.174591 6.938058 -0.199918 +v -3.534863 7.111468 0.741171 +v -4.039784 6.157972 1.390151 +v -3.981892 6.234908 -0.595072 +v 4.020306 3.092959 -1.302070 +v -2.016227 7.122823 0.954648 +v -2.906343 6.654913 1.636226 +v -2.973210 1.684685 -0.834417 +v -0.932438 2.019833 1.922377 +v -1.564883 -0.001850 -1.165597 +v 2.364962 0.004736 -1.817107 +v 2.372780 0.006821 -0.682843 +v -0.410520 0.001313 -2.292826 +v 1.770146 5.710897 1.287521 +v 1.314128 5.053192 1.954891 +v -2.879021 0.006787 1.242394 +v -2.708689 8.401330 -3.534052 +v 0.466977 4.643353 -2.123719 +v -1.792995 1.392445 -1.071644 +v -2.730047 4.279785 1.399355 +v -2.471766 3.367712 1.897010 +v 4.037461 -0.001340 0.747675 +v 3.428908 0.003363 1.498862 +v -2.791854 0.199724 -0.829447 +v 3.470897 5.068673 0.987464 +v 1.328001 2.153122 2.839340 +v 3.054096 2.745536 2.213846 +v 1.883718 3.138259 2.714292 +v 0.045405 3.129414 2.698084 +v 0.341201 1.866896 2.828983 +v 1.052905 3.501572 2.743204 +v 0.174860 5.425478 -0.822940 +v -3.124066 7.068564 -1.440470 +v -2.209502 0.234382 1.830564 +v -2.690186 7.630337 -2.728419 +v -3.566159 5.611900 2.110068 +v -0.659567 7.557715 -4.010995 +v -0.840242 4.889163 -2.040000 +v 1.404307 4.999763 -1.698795 +v -0.509362 8.465204 -3.814098 +v -1.872053 6.414440 0.749119 +v -2.824721 4.920755 2.198212 +v -2.198450 5.109061 1.512187 +v 3.703201 -0.000145 -0.227078 +v -0.311815 3.645073 1.999772 +v -2.448877 2.621042 1.750083 +v 1.201352 2.339610 -3.001462 +v 4.516596 1.408629 -0.441286 +v 0.243665 8.412656 -3.323981 +v 1.649461 0.001329 2.048054 +v -2.146029 2.323006 -2.135905 +v -1.240360 0.001186 1.705908 +v -1.777548 0.732061 -0.121266 +v -2.047082 7.597226 -3.641816 +v -1.419161 8.233310 -3.183000 +v -2.511253 8.132317 -2.470228 +v 0.713343 7.696699 -1.973578 +vn -0.2497 0.9085 -0.3351 +vn 0.5866 -0.4395 0.6802 +vn -0.5897 0.8073 -0.0224 +vn -0.1197 0.6146 0.7797 +vn 0.0098 -0.2961 -0.9551 +vn 0.3422 -0.0637 -0.9375 +vn -0.8861 -0.4541 0.0929 +vn 0.7881 -0.4142 -0.4554 +vn -0.1732 -0.0499 -0.9836 +vn 0.2860 -0.3925 -0.8742 +vn -0.9809 -0.1355 -0.1399 +vn 0.1764 -0.2767 -0.9446 +vn -0.1330 0.6106 0.7807 +vn -0.2664 0.8215 -0.5041 +vn 0.4556 0.3144 -0.8328 +vn 0.9749 0.1623 0.1522 +vn 0.1839 0.2814 -0.9418 +vn 0.9804 -0.0721 -0.1835 +vn -0.9026 -0.2000 -0.3812 +vn 0.1952 0.4462 0.8734 +vn -0.2147 0.5352 0.8170 +vn -0.0262 -0.6540 -0.7561 +vn 0.3485 0.0729 -0.9345 +vn 0.7018 -0.1241 0.7015 +vn 0.9511 -0.1557 -0.2668 +vn 0.4311 0.8027 0.4121 +vn 0.4685 0.2566 0.8454 +vn 0.9986 0.0518 -0.0131 +vn -0.8774 0.0848 0.4722 +vn 0.3040 0.9356 -0.1795 +vn -0.8774 -0.4620 0.1293 +vn 0.7016 0.3944 -0.5934 +vn 0.8688 0.1194 -0.4805 +vn -0.8860 -0.1865 -0.4245 +vn -0.4656 -0.6392 -0.6121 +vn -0.4331 0.2921 -0.8527 +vn 0.2302 -0.8943 -0.3837 +vn -0.2776 0.7872 -0.5507 +vn -0.5060 0.7152 0.4822 +vn -0.0573 0.9530 -0.2976 +vn -0.1516 0.9680 -0.2000 +vn -0.3984 0.9114 0.1029 +vn -0.9190 0.3940 -0.0115 +vn 0.9797 -0.0061 -0.2004 +vn -0.0760 0.8656 0.4949 +vn 0.5877 -0.5931 -0.5503 +vn -0.6130 -0.4444 -0.6533 +vn -0.2573 0.4751 -0.8415 +vn -0.6905 -0.1385 0.7099 +vn -0.9403 0.1214 -0.3179 +vn 0.0009 -1.0000 0.0018 +vn -0.9167 0.0092 -0.3996 +vn 0.3896 0.8487 -0.3576 +vn -0.4226 0.6522 0.6294 +vn -0.3581 0.9102 0.2081 +vn 0.9675 -0.0925 -0.2353 +vn 0.2310 0.6094 0.7584 +vn 0.0008 -1.0000 0.0021 +vn -0.6724 0.2109 -0.7095 +vn 0.0826 0.1216 -0.9891 +vn -0.4774 -0.1919 -0.8575 +vn -0.6428 0.2186 0.7342 +vn -0.4331 -0.2246 -0.8729 +vn 0.7049 -0.4171 0.5737 +vn 0.6535 0.6618 -0.3674 +vn 0.3835 0.3928 -0.8358 +vn -0.1872 -0.9775 -0.0971 +vn -0.0411 0.1865 -0.9816 +vn 0.9840 -0.1783 -0.0065 +vn -0.3563 0.7757 0.5210 +vn 0.7593 0.6506 0.0136 +vn 0.3662 -0.0890 0.9263 +vn -0.0760 0.0852 0.9935 +vn -0.6227 0.4481 -0.6415 +vn -0.8678 0.0304 -0.4961 +vn -0.2410 -0.4920 -0.8366 +vn -0.1576 0.9525 -0.2606 +vn -0.8934 0.4370 0.1041 +vn -0.7462 -0.4175 -0.5186 +vn 0.4213 0.6570 -0.6251 +vn -0.3791 -0.8389 -0.3905 +vn -0.7625 0.1453 -0.6304 +vn -0.5810 0.7179 0.3835 +vn -0.9044 -0.1840 -0.3849 +vn -0.9793 0.1956 -0.0521 +vn -0.0325 0.6123 0.7899 +vn -0.2334 0.7575 0.6097 +vn -0.4071 0.5786 0.7067 +vn 0.2902 0.6487 -0.7035 +vn 0.2493 0.1895 -0.9497 +vn -0.9368 0.0847 0.3394 +vn 0.7861 -0.4818 0.3871 +vn -0.2197 0.4705 -0.8546 +vn -0.4549 0.8433 -0.2864 +vn -0.1352 0.8032 -0.5802 +vn 0.8492 -0.2423 0.4691 +vn 0.6859 0.2317 0.6898 +vn 0.8123 0.4520 0.3686 +vn -0.7283 0.0568 -0.6829 +vn 0.6959 0.4269 0.5774 +vn 0.0893 -0.3417 0.9356 +vn -0.8372 -0.3838 -0.3895 +vn 0.7494 0.2918 -0.5944 +vn -0.0006 -1.0000 0.0019 +vn 0.2647 -0.5650 -0.7815 +vn 0.6988 -0.0221 0.7150 +vn -0.0755 0.4610 0.8842 +vn 0.0832 0.1215 -0.9891 +vn -0.4705 0.5649 0.6779 +vn -0.3124 -0.5703 0.7597 +vn -0.4428 -0.1834 -0.8777 +vn -0.0321 0.0291 -0.9991 +vn 0.2409 -0.7070 -0.6649 +vn 0.8453 0.2441 -0.4752 +vn -0.2528 0.9609 -0.1130 +vn 0.3423 0.4501 -0.8248 +vn -0.7595 0.4378 -0.4811 +vn 0.1320 0.5091 0.8505 +vn -0.7159 0.2423 0.6548 +vn 0.3695 -0.2000 0.9074 +vn 0.5190 0.3309 0.7881 +vn 0.2076 0.4151 0.8858 +vn -0.0476 -0.7374 -0.6738 +vn -0.0826 0.8458 -0.5271 +vn -0.4773 0.5724 0.6668 +vn 0.1167 -0.9897 0.0830 +vn -0.7406 0.2153 -0.6365 +vn -0.5994 -0.1722 0.7817 +vn 0.9569 0.2361 0.1692 +vn 0.0073 0.9917 0.1283 +vn 0.8683 0.0662 -0.4916 +vn -0.7654 0.2643 0.5867 +vn 0.2315 0.8558 -0.4626 +vn -0.0003 -1.0000 -0.0048 +vn 0.0313 -0.7473 -0.6638 +vn -0.3111 0.0737 0.9475 +vn -0.2692 -0.0334 -0.9625 +vn -0.1167 0.2412 0.9634 +vn -0.0114 -0.8607 -0.5090 +vn -0.5242 0.8467 -0.0911 +vn 0.1984 0.9776 0.0704 +vn -0.2592 -0.0272 -0.9654 +vn -0.4354 -0.3619 0.8243 +vn -0.1824 0.4327 -0.8829 +vn -0.5833 -0.0526 0.8106 +vn 0.6628 0.2589 0.7026 +vn -0.4590 0.4388 -0.7725 +vn 0.9416 -0.1706 -0.2904 +vn 0.1921 0.4540 0.8701 +vn 0.0728 0.6924 -0.7178 +vn 0.1815 0.0140 -0.9833 +vn -0.4445 0.0595 0.8938 +vn 0.8827 -0.3972 0.2512 +vn -0.8145 -0.5056 0.2847 +vn -0.3900 0.9107 0.1360 +vn -0.0274 -0.9723 0.2321 +vn -0.0027 -1.0000 -0.0074 +vn -0.9690 -0.2443 -0.0377 +vn -0.8008 0.3552 -0.4822 +vn -0.5416 -0.3427 -0.7676 +vn -0.3364 0.8866 -0.3174 +vn -0.0656 0.5725 0.8172 +vn 0.1878 0.2693 -0.9446 +vn 0.0743 0.7192 0.6909 +vn -0.0287 -0.2865 0.9577 +vn -0.4203 0.6510 0.6322 +vn -0.2468 0.9107 -0.3311 +vn 0.6357 -0.0930 0.7663 +vn 0.4268 -0.1570 -0.8906 +vn 0.0720 0.0855 0.9937 +vn -0.2123 0.4708 0.8563 +vn -0.0199 0.1314 -0.9911 +vn -0.6535 -0.4272 -0.6249 +vn 0.1815 0.0203 0.9832 +vn 0.9125 0.0687 0.4032 +vn -0.7080 -0.5183 -0.4797 +vn 0.0032 -1.0000 0.0005 +vn 0.6150 0.4815 0.6245 +vn -0.1868 -0.1952 0.9628 +vn -0.8473 -0.4426 -0.2937 +vn 0.2947 0.0357 0.9549 +vn -0.4543 -0.0362 -0.8901 +vn 0.1536 -0.5431 0.8255 +vn 0.1178 0.9620 -0.2462 +vn 0.3806 0.8892 0.2541 +vn 0.2120 0.4058 0.8890 +vn 0.5452 0.1651 -0.8219 +vn -0.8748 -0.4421 0.1982 +vn 0.5141 -0.4305 0.7419 +vn 0.4059 0.8911 0.2030 +vn 0.0726 -0.0789 -0.9942 +vn 0.9677 -0.1888 0.1672 +vn -0.5624 0.1244 0.8175 +vn -0.3534 -0.1241 -0.9272 +vn 0.9666 -0.1098 -0.2315 +vn 0.1132 0.1478 0.9825 +vn 0.7308 -0.3418 -0.5908 +vn -0.7205 -0.5878 -0.3679 +vn -0.7980 -0.6023 -0.0216 +vn -0.8610 -0.4949 0.1173 +vn 0.3407 0.6100 0.7154 +vn 0.3146 0.9263 0.2071 +vn 0.5893 -0.8073 -0.0321 +vn 0.8330 -0.1330 -0.5370 +vn -0.9241 0.0994 -0.3689 +vn 0.8963 0.3840 0.2219 +vn -0.5052 0.7727 -0.3843 +vn 0.0471 -0.9019 -0.4294 +vn 0.3740 0.7136 0.5924 +vn 0.6986 -0.5154 0.4963 +vn -0.7558 0.2918 -0.5861 +vn -0.3036 -0.7649 -0.5681 +vn 0.2474 -0.6251 -0.7403 +vn 0.8040 -0.0023 0.5946 +vn -0.9094 0.3935 -0.1347 +vn 0.0201 -0.1616 -0.9867 +vn -0.4049 -0.6688 0.6235 +vn -0.7783 0.2505 0.5757 +vn 0.6523 -0.0475 0.7565 +vn 0.5537 -0.2411 0.7971 +vn -0.9479 0.2189 0.2313 +vn 0.4438 -0.8960 -0.0155 +vn -0.0065 -1.0000 0.0010 +vn -0.0294 0.0651 0.9974 +vn -0.6611 -0.7406 0.1203 +vn -0.1428 -0.8575 0.4943 +vn -0.9266 0.0885 -0.3654 +vn 0.5328 -0.8453 -0.0400 +vn -0.1072 0.6818 0.7237 +vn 0.4618 -0.7553 -0.4651 +vn 0.7923 -0.5087 -0.3368 +vn -0.2514 -0.9660 -0.0606 +vn 0.7032 -0.1256 0.6998 +vn -0.5704 0.7168 0.4010 +vn 0.2960 0.9327 0.2062 +vn -0.3504 -0.4636 0.8138 +vn 0.0894 -0.2287 -0.9694 +vn 0.2190 0.4539 -0.8637 +vn -0.0244 0.7731 -0.6338 +vn 0.5748 0.2775 -0.7698 +vn -0.8293 -0.3638 -0.4242 +vn -0.4291 0.9011 -0.0627 +vn 0.4168 -0.7695 -0.4839 +vn -0.5853 -0.1304 0.8003 +vn -0.6993 0.6165 0.3618 +vn -0.3386 -0.4122 0.8458 +vn 0.1902 0.3623 0.9125 +vn 0.5863 0.1454 -0.7970 +vn -0.7668 -0.3669 -0.5266 +vn 0.3967 -0.2132 0.8928 +vn 0.6391 -0.3057 0.7058 +vn 0.8194 0.2337 0.5234 +vn -0.0224 0.9173 0.3976 +vn 0.6835 0.2621 0.6813 +vn 0.6623 -0.2357 -0.7112 +vn -0.9492 -0.1351 0.2843 +vn -0.2439 -0.9682 -0.0551 +vn 0.9216 0.3217 0.2170 +vn -0.5992 0.7427 0.2990 +vn 0.3042 0.6644 0.6827 +vn -0.1488 -0.9604 0.2355 +vn 0.3026 -0.3842 -0.8722 +vn -0.1018 -0.4877 0.8671 +vn -0.0706 0.8876 0.4551 +vn -0.3409 -0.5768 0.7423 +vn 0.4781 0.2005 0.8551 +vn -0.5328 -0.8456 -0.0328 +vn 0.4356 0.1723 0.8835 +vn 0.8003 -0.5327 -0.2751 +vn -0.3737 -0.0345 -0.9269 +vn 0.3702 0.0322 -0.9284 +vn -0.0013 0.3162 -0.9487 +vn 0.3672 0.5877 0.7210 +vn -0.1267 -0.7810 0.6116 +vn -0.9976 0.0477 0.0493 +vn 0.0793 0.6725 -0.7358 +vn 0.1689 -0.0165 -0.9855 +vn 0.5187 0.0683 -0.8522 +vn -0.8698 0.1153 -0.4797 +vn 0.5568 -0.2678 0.7863 +vn -0.5877 -0.1839 0.7879 +vn 0.1789 0.3109 0.9335 +vn 0.2428 0.8369 0.4906 +vn 0.0025 -0.9998 -0.0211 +vn 0.1119 0.4473 -0.8874 +vn 0.3558 -0.2723 0.8940 +vn 0.2819 0.7904 0.5439 +vn -0.7213 0.3624 -0.5902 +vn 0.0744 -0.2531 0.9646 +vn 0.8855 0.2463 -0.3939 +vn 0.6434 -0.6770 0.3575 +vn 0.9804 -0.0645 0.1863 +usemtl None +s off +f 1//1 2//1 3//1 +f 4//2 5//2 6//2 +f 7//3 8//3 9//3 +f 10//4 11//4 12//4 +f 1//5 13//5 14//5 +f 15//6 16//6 3//6 +f 17//7 18//7 19//7 +f 20//8 21//8 22//8 +f 23//9 24//9 25//9 +f 26//10 27//10 20//10 +f 28//11 29//11 30//11 +f 27//12 31//12 32//12 +f 33//13 34//13 29//13 +f 35//14 36//14 37//14 +f 38//15 39//15 40//15 +f 41//16 42//16 43//16 +f 44//17 24//17 23//17 +f 38//18 45//18 46//18 +f 47//19 48//19 19//19 +f 49//20 50//20 51//20 +f 52//21 53//21 54//21 +f 55//22 56//22 39//22 +f 57//23 58//23 59//23 +f 60//24 61//24 62//24 +f 63//25 56//25 64//25 +f 62//26 42//26 41//26 +f 65//27 66//27 67//27 +f 68//28 60//28 69//28 +f 70//29 71//29 72//29 +f 73//30 74//30 75//30 +f 76//31 77//31 78//31 +f 57//32 68//32 58//32 +f 79//33 80//33 39//33 +f 81//34 25//34 82//34 +f 83//35 48//35 84//35 +f 14//36 85//36 84//36 +f 45//37 38//37 86//37 +f 87//38 44//38 23//38 +f 88//39 51//39 89//39 +f 90//40 51//40 88//40 +f 46//41 88//41 91//41 +f 92//42 93//42 90//42 +f 47//43 94//43 95//43 +f 68//44 69//44 96//44 +f 97//45 93//45 98//45 +f 20//46 22//46 26//46 +f 76//47 85//47 99//47 +f 40//48 14//48 84//48 +f 100//49 28//49 54//49 +f 101//50 35//50 37//50 +f 102//51 103//51 104//51 +f 83//52 76//52 70//52 +f 75//53 74//53 57//53 +f 98//54 93//54 94//54 +f 105//55 73//55 12//55 +f 91//56 38//56 46//56 +f 106//57 67//57 105//57 +f 104//58 103//58 107//58 +f 23//59 108//59 87//59 +f 109//60 2//60 1//60 +f 13//61 36//61 110//61 +f 111//62 71//62 112//62 +f 91//63 55//63 39//63 +f 113//64 42//64 114//64 +f 68//65 57//65 74//65 +f 59//66 58//66 15//66 +f 115//67 101//67 34//67 +f 104//68 37//68 36//68 +f 102//69 26//69 103//69 +f 106//70 105//70 12//70 +f 68//71 74//71 116//71 +f 117//72 118//72 119//72 +f 120//73 121//73 122//73 +f 3//74 32//74 1//74 +f 83//75 85//75 76//75 +f 36//76 32//76 31//76 +f 123//77 73//77 75//77 +f 70//78 72//78 83//78 +f 32//79 36//79 13//79 +f 7//80 63//80 64//80 +f 37//81 104//81 101//81 +f 124//82 95//82 92//82 +f 125//83 30//83 107//83 +f 126//84 81//84 124//84 +f 18//85 94//85 19//85 +f 111//86 11//86 10//86 +f 51//87 9//87 89//87 +f 94//88 127//88 98//88 +f 15//89 3//89 2//89 +f 86//90 38//90 40//90 +f 34//91 33//91 115//91 +f 46//92 45//92 128//92 +f 40//93 129//93 14//93 +f 107//94 29//94 34//94 +f 130//95 123//95 75//95 +f 128//96 131//96 46//96 +f 132//97 133//97 134//97 +f 79//98 10//98 80//98 +f 124//99 81//99 95//99 +f 132//100 10//100 49//100 +f 121//101 4//101 117//101 +f 48//102 83//102 19//102 +f 68//103 96//103 58//103 +f 114//104 107//104 135//104 +f 103//105 22//105 135//105 +f 66//106 118//106 60//106 +f 11//107 111//107 112//107 +f 14//108 109//108 1//108 +f 12//109 136//109 106//109 +f 137//110 28//110 100//110 +f 8//111 55//111 91//111 +f 138//112 32//112 3//112 +f 24//113 82//113 25//113 +f 44//114 131//114 24//114 +f 124//115 92//115 88//115 +f 41//116 139//116 21//116 +f 89//117 8//117 91//117 +f 65//118 67//118 122//118 +f 94//119 18//119 127//119 +f 6//120 61//120 118//120 +f 132//121 134//121 10//121 +f 67//122 106//122 122//122 +f 56//123 55//123 140//123 +f 109//124 123//124 130//124 +f 106//125 136//125 120//125 +f 34//126 104//126 107//126 +f 81//127 48//127 95//127 +f 137//128 112//128 78//128 +f 49//129 10//129 79//129 +f 62//130 41//130 69//130 +f 41//131 43//131 139//131 +f 136//132 100//132 120//132 +f 123//133 109//133 40//133 +f 141//134 107//134 114//134 +f 142//135 13//135 110//135 +f 100//136 136//136 11//136 +f 101//137 115//137 35//137 +f 114//138 42//138 62//138 +f 138//139 27//139 32//139 +f 8//140 89//140 9//140 +f 63//141 7//141 9//141 +f 86//142 84//142 81//142 +f 17//143 133//143 127//143 +f 7//144 64//144 140//144 +f 121//145 120//145 100//145 +f 132//146 98//146 133//146 +f 89//147 91//147 88//147 +f 96//148 69//148 21//148 +f 50//149 9//149 51//149 +f 21//150 69//150 41//150 +f 26//151 102//151 36//151 +f 143//152 54//152 30//152 +f 42//153 113//153 43//153 +f 28//154 144//154 29//154 +f 73//155 123//155 12//155 +f 52//156 143//156 141//156 +f 103//157 135//157 107//157 +f 92//158 95//158 94//158 +f 1//159 32//159 13//159 +f 108//160 23//160 145//160 +f 92//161 90//161 88//161 +f 11//162 136//162 12//162 +f 109//163 59//163 2//163 +f 146//164 44//164 87//164 +f 141//165 4//165 53//165 +f 54//166 28//166 30//166 +f 115//167 33//167 144//167 +f 98//168 132//168 97//168 +f 16//169 20//169 27//169 +f 122//170 117//170 119//170 +f 106//171 120//171 122//171 +f 57//172 59//172 130//172 +f 142//173 99//173 85//173 +f 52//174 141//174 53//174 +f 132//175 49//175 97//175 +f 108//176 145//176 126//176 +f 101//177 104//177 34//177 +f 116//178 67//178 66//178 +f 137//179 100//179 112//179 +f 110//180 35//180 144//180 +f 5//181 141//181 114//181 +f 35//182 110//182 36//182 +f 6//183 5//183 61//183 +f 40//184 80//184 123//184 +f 116//185 73//185 105//185 +f 30//186 125//186 143//186 +f 16//187 15//187 58//187 +f 70//188 78//188 71//188 +f 111//189 10//189 134//189 +f 73//190 116//190 74//190 +f 86//191 40//191 84//191 +f 60//192 62//192 69//192 +f 72//193 71//193 111//193 +f 14//194 142//194 85//194 +f 131//195 128//195 24//195 +f 100//196 11//196 112//196 +f 21//197 16//197 96//197 +f 82//198 86//198 81//198 +f 76//199 99//199 77//199 +f 70//200 76//200 78//200 +f 146//201 131//201 44//201 +f 49//202 90//202 97//202 +f 45//203 86//203 82//203 +f 21//204 20//204 16//204 +f 145//205 25//205 81//205 +f 116//206 66//206 68//206 +f 29//207 107//207 30//207 +f 31//208 26//208 36//208 +f 67//209 116//209 105//209 +f 111//210 134//210 133//210 +f 84//211 85//211 83//211 +f 99//212 142//212 110//212 +f 140//213 64//213 56//213 +f 50//214 63//214 9//214 +f 147//215 126//215 124//215 +f 139//216 135//216 21//216 +f 78//217 77//217 28//217 +f 54//218 143//218 52//218 +f 114//219 62//219 61//219 +f 49//220 79//220 50//220 +f 108//221 126//221 147//221 +f 56//222 79//222 39//222 +f 113//223 114//223 135//223 +f 122//224 121//224 117//224 +f 72//225 19//225 83//225 +f 125//226 107//226 143//226 +f 23//227 25//227 145//227 +f 82//228 128//228 45//228 +f 29//229 144//229 33//229 +f 26//230 22//230 103//230 +f 139//231 43//231 135//231 +f 99//232 110//232 77//232 +f 60//233 118//233 61//233 +f 147//234 124//234 88//234 +f 123//235 80//235 12//235 +f 54//236 53//236 121//236 +f 142//237 14//237 13//237 +f 130//238 59//238 109//238 +f 75//239 57//239 130//239 +f 3//240 27//240 138//240 +f 55//241 8//241 140//241 +f 115//242 144//242 35//242 +f 128//243 82//243 24//243 +f 121//244 100//244 54//244 +f 92//245 94//245 93//245 +f 18//246 17//246 127//246 +f 65//247 122//247 119//247 +f 16//248 58//248 96//248 +f 145//249 81//249 126//249 +f 118//250 117//250 6//250 +f 50//251 79//251 148//251 +f 88//252 46//252 146//252 +f 80//253 10//253 12//253 +f 148//254 63//254 50//254 +f 21//255 135//255 22//255 +f 94//256 47//256 19//256 +f 110//257 28//257 77//257 +f 66//258 60//258 68//258 +f 147//259 87//259 108//259 +f 46//260 131//260 146//260 +f 111//261 17//261 72//261 +f 27//262 26//262 31//262 +f 121//263 53//263 4//263 +f 90//264 93//264 97//264 +f 78//265 28//265 137//265 +f 65//266 118//266 66//266 +f 17//267 19//267 72//267 +f 65//268 119//268 118//268 +f 43//269 113//269 135//269 +f 81//270 84//270 48//270 +f 16//271 27//271 3//271 +f 109//272 14//272 129//272 +f 51//273 90//273 49//273 +f 111//274 133//274 17//274 +f 144//275 28//275 110//275 +f 129//276 40//276 109//276 +f 36//277 102//277 104//277 +f 91//278 39//278 38//278 +f 95//279 48//279 47//279 +f 4//280 141//280 5//280 +f 71//281 78//281 112//281 +f 133//282 98//282 127//282 +f 147//283 88//283 146//283 +f 143//284 107//284 141//284 +f 59//285 15//285 2//285 +f 4//286 6//286 117//286 +f 147//287 146//287 87//287 +f 140//288 8//288 7//288 +f 5//289 114//289 61//289 +f 39//290 80//290 40//290 +f 148//291 79//291 56//291 +f 63//292 148//292 56//292 diff --git a/assets/objects/bunny2.obj b/assets/objects/bunny2.obj new file mode 100644 index 0000000..963a7fb --- /dev/null +++ b/assets/objects/bunny2.obj @@ -0,0 +1,1115 @@ +# Blender v2.92.0 OBJ File: '' +# www.blender.org +mtllib bunny2.mtl +o bunny_big +v -0.615033 1.454237 -0.542636 +v -0.701984 1.533360 -0.336508 +v -0.631191 1.398543 -0.119018 +v -0.623901 1.508899 -0.463361 +v -0.697271 1.615531 -0.502696 +v -0.724216 1.439681 -0.361884 +v -0.771077 1.263504 0.045715 +v -0.718355 1.176701 0.022570 +v -0.630342 1.183125 0.029926 +v -0.613867 1.224122 0.060940 +v -0.506851 1.177270 0.112905 +v -0.913124 1.129998 0.248429 +v -0.761835 1.325752 0.349522 +v -0.609513 1.279083 0.485167 +v -0.913618 1.280728 0.262934 +v -0.673643 1.351880 -0.489363 +v -0.807931 1.542630 -0.392212 +v -0.735443 1.471331 -0.142316 +v -0.759446 1.308857 0.099562 +v -0.733620 1.270367 -0.335777 +v -0.188410 0.644951 -0.320853 +v -0.332126 0.225235 -0.026285 +v -0.445648 0.178614 -0.038346 +v -0.116791 0.038350 -0.189638 +v 0.150125 0.041083 -0.168942 +v -0.390396 0.505096 -0.120853 +v -0.051192 0.529077 -0.326122 +v 0.059954 0.661587 -0.270238 +v -0.331357 0.495833 -0.262252 +v -0.053068 0.197711 -0.264350 +v 0.130105 0.032897 -0.089026 +v 0.451004 0.052817 0.139263 +v 0.211290 0.030283 0.037773 +v 0.221923 0.343385 -0.227643 +v 0.095140 0.435763 -0.282563 +v -0.077382 0.731407 -0.179927 +v 0.189746 0.664690 -0.188231 +v 0.338168 0.868323 -0.008285 +v 0.296328 0.882928 0.423575 +v 0.263539 0.984998 0.290085 +v 0.134403 0.961881 -0.043882 +v 0.201774 1.019247 0.103580 +v 0.066375 1.059097 0.178625 +v -0.034824 0.855453 -0.132011 +v -0.281343 0.607165 -0.296382 +v -0.049986 1.000148 0.009924 +v 0.146659 0.995704 0.400490 +v 0.249819 0.776890 0.512939 +v -0.032417 0.673045 0.662771 +v -0.379570 0.559113 0.543018 +v -0.459002 0.407521 0.516742 +v -0.875524 0.833970 0.281728 +v -0.900775 1.125618 0.390622 +v -0.938905 0.939703 0.409177 +v -0.921945 0.677934 0.318649 +v -0.890564 0.547197 0.282242 +v -0.815853 1.037035 0.662909 +v -0.749982 1.198810 0.587987 +v -0.775215 0.813685 0.470864 +v -0.943143 0.902676 0.532117 +v -0.854853 1.239526 0.483037 +v -0.907304 1.211077 0.396690 +v -0.876670 0.990686 0.079163 +v -0.256394 1.003232 0.211486 +v -0.358058 0.824584 -0.119908 +v -0.304030 0.943577 -0.016514 +v -0.223392 0.833084 -0.139069 +v -0.423359 0.981257 -0.031049 +v -0.489735 1.034193 0.057394 +v -0.410418 1.035078 0.241679 +v -0.823728 0.489303 0.392962 +v -0.523465 0.257241 0.257232 +v -0.719706 0.043413 0.014416 +v -0.527481 0.035842 0.146127 +v -0.634958 0.035901 0.295441 +v -0.626555 0.086989 0.294048 +v -0.763422 0.066008 0.164940 +v -0.138733 0.676299 0.631389 +v -0.235443 0.671688 0.559464 +v -0.370120 0.798501 0.498299 +v -0.703595 0.705876 0.534985 +v -0.484413 0.706047 0.554664 +v -0.250410 0.899771 0.431100 +v 0.010577 0.727702 0.540706 +v 0.021410 0.878444 0.518686 +v 0.370988 0.895456 0.112297 +v 0.408885 0.843546 0.326091 +v 0.166359 0.596825 0.639969 +v 0.118659 0.105990 0.533392 +v -0.243223 0.032135 0.567837 +v 0.161583 0.024562 0.397728 +v -0.019257 0.067252 0.254289 +v 0.163093 0.254553 0.605574 +v 0.257941 0.266237 0.549742 +v 0.502945 0.397110 0.300339 +v 0.194758 0.024045 0.500375 +v 0.375674 0.189642 0.402176 +v -0.308494 0.084599 -0.115082 +v -0.477125 0.078886 -0.169051 +v -0.511155 0.040275 -0.063122 +v -0.503527 0.370754 -0.051735 +v -0.654713 0.353427 0.032350 +v -0.577442 0.523429 -0.127277 +v -0.878565 0.633299 0.054465 +v -0.689355 0.913168 0.001842 +v -0.549007 0.731512 -0.137845 +v -0.445126 0.639856 -0.148004 +v -0.646631 0.757011 -0.089556 +v -0.591625 0.297924 0.091727 +v -0.562123 0.191455 0.028384 +v -0.389744 0.041684 -0.248139 +v 0.470557 0.121140 0.356410 +v 0.284188 0.028580 0.296092 +v 0.592969 0.410648 0.292391 +v 0.673232 0.329044 0.172903 +v 0.589110 0.340991 0.032765 +v 0.498840 0.189389 -0.018483 +v 0.593176 0.176094 0.088463 +v -0.248493 0.070690 0.199511 +v -0.301312 0.074187 0.433521 +v -0.606615 0.194934 0.155372 +v -0.687640 0.040962 0.480556 +v -0.667516 0.130173 0.401352 +v -0.517103 0.158768 0.273097 +v -0.250406 0.040611 0.651245 +v -0.254956 0.253152 0.454447 +v -0.205583 0.533867 0.673436 +v 0.284973 0.611089 0.565133 +v 0.110056 0.470267 0.659872 +v 0.023572 0.302064 0.662861 +v 0.044028 0.193435 0.630687 +v -0.166769 0.183816 0.576584 +v 0.417072 0.358369 0.447230 +v 0.414932 0.684857 -0.053741 +v 0.405523 0.565768 -0.121852 +v 0.311953 0.475616 -0.179966 +v -0.283629 0.308149 -0.231454 +v -0.291432 0.195520 -0.193507 +v -0.154134 1.547519 -0.093151 +v -0.488018 1.244263 0.057677 +v -0.057397 1.492900 -0.227888 +v -0.075352 1.386788 -0.054848 +v -0.123305 1.651237 -0.152382 +v -0.167500 1.437249 -0.115783 +v -0.348130 1.531156 0.000186 +v -0.200571 0.372543 -0.325596 +v 0.041261 0.313386 -0.275017 +v 0.185154 0.206966 -0.229768 +v -0.148175 0.131450 -0.215657 +v -0.342135 0.630440 -0.176439 +v 0.262595 0.168728 -0.154228 +v -0.361590 0.155004 -0.224613 +v 0.070577 0.868795 -0.137327 +v -0.371424 1.445618 -0.038102 +v -0.500433 1.290998 0.239925 +v -0.375051 1.367088 0.112680 +v -0.264767 1.554103 0.054497 +v -0.693472 1.050792 0.646693 +v -0.804782 0.850936 0.597157 +v -0.650512 0.837203 0.494294 +v -0.589383 0.972578 0.563302 +v -0.463830 1.047380 0.402142 +v -0.604301 1.300985 0.132092 +v -0.566696 1.322448 0.229124 +v 0.213724 0.763854 -0.141852 +v -0.375116 0.036975 -0.136386 +v -0.778120 0.686258 -0.047739 +v -0.736190 0.527595 -0.076924 +v 0.319599 0.289641 -0.143242 +v 0.068406 0.081045 -0.054556 +v -0.412755 0.061959 -0.001756 +v -0.473375 1.198793 0.165678 +v 0.457932 0.451083 -0.019988 +v 0.515385 0.427481 0.126293 +v 0.391657 0.231955 -0.031018 +v -0.845006 0.859213 0.110781 +v -0.215700 1.350240 0.086002 +v -0.832522 1.176175 0.111595 +v -0.813171 0.465669 0.065108 +v -0.815586 0.416991 0.228075 +v -0.722218 0.326232 0.239854 +v -0.695918 1.324876 0.122799 +v 0.404374 0.066437 0.048975 +v -0.950515 0.903194 0.247138 +v -0.046999 1.024593 0.349177 +v -0.723175 0.155063 0.140312 +v -0.726000 0.072000 0.047300 +v -0.726500 0.076500 0.053000 +v -0.725766 0.074901 0.050642 +v 0.022141 0.023058 0.126023 +v -0.920305 0.664445 0.203817 +v -0.543152 1.146462 0.421015 +v 0.497545 0.691744 0.105053 +v 0.498218 0.610433 0.302843 +v -0.321070 0.037064 0.221052 +v -0.348329 0.034090 0.373390 +v 0.630171 0.195764 0.250591 +v -0.352239 0.963397 0.381445 +v 0.436532 0.618616 0.435731 +v 0.544949 0.249487 0.392129 +v -0.360239 0.185554 0.486006 +v -0.690644 0.410730 0.466509 +v -0.540550 1.276634 0.443312 +v 0.097570 0.077530 0.396886 +v -0.503823 0.219449 0.459633 +v -0.330073 0.112390 0.593796 +v -0.174118 0.775308 0.532865 +v -0.495841 0.889487 0.450196 +v -0.790418 0.616531 0.494175 +v -0.293611 0.533327 0.522120 +v -0.635941 0.542307 0.568975 +v -0.916292 0.943910 0.583681 +v -0.208995 0.161372 0.630065 +v -0.671992 0.880963 0.647436 +v -0.386180 0.041049 0.533305 +v -0.500044 0.586948 0.576737 +v -0.592416 0.157276 0.559292 +v 0.358749 0.507445 0.523297 +v -0.144876 0.311184 0.627422 +v -0.027857 0.427422 0.681119 +vt 0.218537 0.773257 +vt 0.147377 0.735783 +vt 0.243384 0.720308 +vt 0.587762 0.846448 +vt 0.630573 0.927821 +vt 0.347729 0.775428 +vt 0.119291 0.667748 +vt 0.827163 0.808086 +vt 0.288073 0.152807 +vt 0.324021 0.325136 +vt 0.175517 0.228819 +vt 0.270253 0.505873 +vt 0.283007 0.532058 +vt 0.284734 0.555029 +vt 0.183723 0.431150 +vt 0.267359 0.464059 +vt 0.264046 0.501133 +vt 0.132659 0.581883 +vt 0.085608 0.336430 +vt 0.261559 0.726326 +vt 0.297208 0.687587 +vt 0.380400 0.640049 +vt 0.212046 0.651515 +vt 0.246347 0.532380 +vt 0.260759 0.687298 +vt 0.033393 0.649783 +vt 0.312820 0.583483 +vt 0.232987 0.878780 +vt 0.468981 0.357153 +vt 0.451832 0.318285 +vt 0.458804 0.358847 +vt 0.399315 0.262511 +vt 0.458600 0.216917 +vt 0.424428 0.200009 +vt 0.470181 0.254146 +vt 0.470624 0.211536 +vt 0.427055 0.301947 +vt 0.510294 0.367556 +vt 0.551660 0.400226 +vt 0.589805 0.376970 +vt 0.549625 0.332686 +vt 0.497323 0.283047 +vt 0.552245 0.224532 +vt 0.585049 0.260462 +vt 0.631161 0.167671 +vt 0.673377 0.154706 +vt 0.621932 0.154105 +vt 0.731183 0.224981 +vt 0.743683 0.168960 +vt 0.615430 0.143434 +vt 0.676185 0.205721 +vt 0.687656 0.314717 +vt 0.644521 0.380007 +vt 0.725821 0.341895 +vt 0.569814 0.440091 +vt 0.607883 0.446949 +vt 0.651508 0.407978 +vt 0.710545 0.441427 +vt 0.636497 0.471566 +vt 0.710147 0.465465 +vt 0.671655 0.484099 +vt 0.625586 0.489910 +vt 0.574896 0.483089 +vt 0.453812 0.251109 +vt 0.444557 0.307753 +vt 0.397506 0.299376 +vt 0.439518 0.424616 +vt 0.413975 0.363164 +vt 0.267141 0.350697 +vt 0.277959 0.352127 +vt 0.283618 0.404227 +vt 0.261113 0.435433 +vt 0.283868 0.500578 +vt 0.275616 0.434465 +vt 0.335734 0.392022 +vt 0.305500 0.268667 +vt 0.315203 0.283107 +vt 0.284569 0.307710 +vt 0.295984 0.289371 +vt 0.274789 0.350734 +vt 0.286675 0.427028 +vt 0.299658 0.430561 +vt 0.312900 0.531712 +vt 0.337629 0.458385 +vt 0.331998 0.405832 +vt 0.330125 0.319779 +vt 0.350247 0.517422 +vt 0.286904 0.424209 +vt 0.312842 0.418511 +vt 0.467299 0.455992 +vt 0.500026 0.463546 +vt 0.598717 0.473616 +vt 0.671184 0.461567 +vt 0.497351 0.429234 +vt 0.400797 0.425292 +vt 0.370167 0.255765 +vt 0.339668 0.173152 +vt 0.332915 0.147922 +vt 0.324182 0.147628 +vt 0.378334 0.201289 +vt 0.379598 0.155149 +vt 0.373464 0.135128 +vt 0.377048 0.189711 +vt 0.370523 0.349695 +vt 0.522449 0.298818 +vt 0.543674 0.339642 +vt 0.489084 0.302622 +vt 0.522818 0.425781 +vt 0.569740 0.378712 +vt 0.633861 0.366770 +vt 0.585587 0.336150 +vt 0.626217 0.331074 +vt 0.728250 0.424573 +vt 0.737089 0.444067 +vt 0.760713 0.416196 +vt 0.773184 0.374024 +vt 0.679374 0.272319 +vt 0.736669 0.330382 +vt 0.688943 0.315877 +vt 0.719612 0.379506 +vt 0.758145 0.182182 +vt 0.728676 0.209704 +vt 0.694439 0.199449 +vt 0.796620 0.263498 +vt 0.828285 0.265341 +vt 0.794685 0.280008 +vt 0.703518 0.132258 +vt 0.666252 0.131191 +vt 0.718344 0.140116 +vt 0.438440 0.195447 +vt 0.405173 0.171896 +vt 0.365488 0.324690 +vt 0.313555 0.316048 +vt 0.340877 0.397144 +vt 0.344637 0.258519 +vt 0.298766 0.373019 +vt 0.375484 0.390998 +vt 0.467076 0.166771 +vt 0.604973 0.164363 +vt 0.505883 0.149985 +vt 0.720892 0.143691 +vt 0.666307 0.131057 +vt 0.788602 0.170760 +vt 0.749004 0.150706 +vt 0.835477 0.201117 +vt 0.764004 0.157495 +vt 0.755654 0.298607 +vt 0.702197 0.249973 +vt 0.815783 0.202667 +vt 0.843416 0.248935 +vt 0.774430 0.211484 +vt 0.651868 0.142214 +vt 0.604561 0.149731 +vt 0.520931 0.141763 +vt 0.618285 0.144668 +vt 0.515836 0.139708 +vt 0.541095 0.122233 +vt 0.545229 0.124547 +vt 0.406172 0.213674 +vt 0.377094 0.231223 +vt 0.342895 0.237361 +vt 0.412951 0.183625 +vt 0.377466 0.154704 +vt 0.381434 0.128090 +vt 0.409628 0.153958 +vt 0.412771 0.125834 +vt 0.480160 0.128932 +vt 0.485133 0.126905 +vt 0.634187 0.255096 +vt 0.580992 0.215011 +vt 0.648604 0.212649 +vt 0.654962 0.178026 +vt 0.572991 0.174293 +vt 0.782241 0.336531 +vt 0.759177 0.294014 +vt 0.772951 0.244904 +vt 0.659602 0.274101 +vt 0.430849 0.165814 +vt 0.518327 0.198940 +vt 0.605147 0.307014 +vt 0.789476 0.325855 +vt 0.690502 0.280373 +vt 0.754328 0.133025 +vt 0.694468 0.498659 +vt 0.602842 0.044992 +vt 0.375668 0.208719 +vt 0.720096 0.695986 +vt 0.716168 0.560727 +vt 0.919694 0.432584 +vt 0.569772 0.272833 +vt 0.633624 0.544935 +vt 0.573990 0.527387 +vt 0.647316 0.483337 +vt 0.641585 0.226860 +vt 0.531107 0.162661 +vt 0.740530 0.382810 +vt 0.445863 0.155701 +vt 0.500440 0.666417 +vt 0.437997 0.557021 +vt 0.390273 0.535057 +vt 0.404164 0.496892 +vt 0.491080 0.368608 +vt 0.430981 0.446602 +vt 0.382454 0.395376 +vt 0.382500 0.410595 +vt 0.433942 0.422915 +vt 0.409186 0.439948 +vt 0.421137 0.407375 +vt 0.417920 0.398618 +vt 0.342468 0.570161 +vt 0.397510 0.152756 +vt 0.439241 0.156296 +vt 0.410804 0.137628 +vt 0.928553 0.672483 +vt 0.809074 0.257225 +vt 0.628663 0.415495 +vt 0.483173 0.136263 +vt 0.441400 0.798100 +vt 0.441100 0.793600 +vt 0.441677 0.795508 +vt 0.794254 0.343045 +vt 0.407487 0.475634 +vt 0.502494 0.144862 +vt 0.495200 0.138200 +vt 0.819488 0.211828 +vt 0.478408 0.445842 +vt 0.487256 0.390111 +vt 0.489942 0.175493 +vt 0.564879 0.288723 +vt 0.523353 0.202591 +vt 0.437716 0.182861 +vt 0.449053 0.350985 +vt 0.373691 0.466722 +vt 0.672519 0.154207 +vt 0.555940 0.154439 +vt 0.512596 0.143591 +vt 0.471825 0.138846 +vn 0.9493 0.3098 0.0530 +vn 0.5949 -0.2137 -0.7748 +vn -0.1159 0.8512 -0.5118 +vn 0.7150 0.3599 -0.5994 +vn 0.5978 -0.1903 -0.7787 +vn 0.8044 0.5380 0.2518 +vn -0.0026 -0.6422 -0.7665 +vn 0.7867 -0.1233 -0.6049 +vn 0.3493 0.6474 -0.6774 +vn -0.9749 0.1105 -0.1933 +vn -0.9443 0.2469 0.2176 +vn -0.8020 0.5815 -0.1369 +vn -0.4591 -0.3920 -0.7972 +vn -0.7248 -0.0122 -0.6889 +vn -0.7617 0.2309 -0.6055 +vn -0.5591 -0.7221 -0.4075 +vn 0.3102 0.8891 0.3366 +vn -0.0985 0.8962 0.4326 +vn 0.1277 0.9900 0.0592 +vn -0.8643 -0.3181 -0.3896 +vn -0.9734 -0.0111 -0.2288 +vn -0.8893 0.3408 -0.3051 +vn -0.6763 0.7363 0.0217 +vn -0.5579 0.4069 -0.7233 +vn -0.7814 -0.0665 -0.6205 +vn -0.5022 0.2940 -0.8133 +vn -0.2889 -0.3982 -0.8706 +vn -0.5775 0.2770 -0.7680 +vn -0.4613 0.4085 -0.7877 +vn -0.7982 -0.2255 -0.5586 +vn -0.5372 0.3438 -0.7702 +vn -0.5228 -0.2678 -0.8093 +vn -0.1923 0.5649 -0.8024 +vn -0.0126 0.6130 -0.7900 +vn 0.2979 0.5734 -0.7632 +vn 0.1713 0.0419 -0.9843 +vn -0.2471 -0.2182 -0.9441 +vn 0.0680 -0.4758 -0.8769 +vn 0.1920 -0.1660 -0.9672 +vn 0.3163 -0.7612 -0.5662 +vn 0.2368 -0.9476 -0.2143 +vn -0.0688 -0.9976 -0.0094 +vn 0.5027 -0.2746 -0.8197 +vn 0.2674 -0.7553 -0.5984 +vn -0.6372 -0.7549 -0.1552 +vn 0.6754 -0.4575 -0.5784 +vn 0.5527 0.0050 -0.8333 +vn 0.3490 0.3923 -0.8510 +vn 0.6899 0.0914 -0.7181 +vn -0.0231 0.5169 -0.8557 +vn 0.0374 0.4273 -0.9033 +vn 0.3167 0.4073 -0.8566 +vn 0.5940 0.5848 -0.5524 +vn 0.2033 0.7519 -0.6272 +vn 0.5056 0.8399 0.1971 +vn 0.3668 0.8996 -0.2372 +vn 0.0567 0.9969 -0.0552 +vn -0.0875 0.8762 -0.4739 +vn -0.1751 -0.3652 0.9143 +vn 0.0983 -0.0292 0.9947 +vn -0.2554 -0.2203 0.9414 +vn -0.0901 0.4309 -0.8979 +vn -0.1201 -0.0231 -0.9925 +vn -0.9882 -0.0215 -0.1519 +vn -0.9523 0.0220 0.3045 +vn -0.9556 -0.2640 0.1306 +vn -0.9303 -0.3409 -0.1356 +vn -0.9995 0.0313 -0.0008 +vn -0.9654 -0.2573 0.0429 +vn -0.5994 -0.4854 0.6364 +vn -0.7687 -0.6394 0.0141 +vn -0.7600 -0.4668 0.4522 +vn -0.9156 -0.3789 0.1346 +vn -0.7540 -0.5351 -0.3810 +vn -0.8875 -0.0696 -0.4555 +vn -0.8763 -0.4317 0.2136 +vn -0.7644 -0.0706 0.6409 +vn -0.5600 0.6703 0.4870 +vn -0.3604 0.1551 0.9198 +vn -0.2579 -0.7643 0.5910 +vn -0.6653 -0.1082 0.7387 +vn -0.0768 0.6317 0.7714 +vn -0.8103 -0.0440 -0.5844 +vn -0.3246 0.2598 -0.9095 +vn 0.0809 0.8264 -0.5572 +vn 0.0041 0.9980 0.0630 +vn -0.1347 0.9041 0.4056 +vn 0.2230 0.8111 0.5407 +vn -0.1019 0.4917 -0.8648 +vn 0.0652 0.7444 -0.6646 +vn -0.4189 -0.6704 0.6124 +vn -0.6951 0.7161 0.0635 +vn -0.6689 -0.4062 -0.6226 +vn -0.9246 -0.2713 0.2673 +vn -0.6573 0.3235 -0.6806 +vn -0.8419 0.5358 0.0647 +vn -0.6030 -0.7932 0.0847 +vn -0.6931 0.6622 0.2848 +vn -0.3052 0.1974 0.9316 +vn -0.3303 -0.1793 0.9267 +vn -0.3451 0.3884 0.8544 +vn 0.1345 -0.0870 0.9871 +vn -0.0893 0.6954 0.7131 +vn -0.1814 0.3760 0.9087 +vn 0.0964 0.5563 0.8254 +vn -0.3078 0.7283 0.6122 +vn 0.0621 0.5929 0.8029 +vn 0.4945 0.5607 0.6641 +vn 0.7255 0.6684 -0.1640 +vn 0.7862 0.5361 0.3075 +vn 0.9407 0.2857 -0.1830 +vn 0.3049 -0.0466 0.9512 +vn 0.6222 0.2005 0.7567 +vn 0.3413 0.2424 0.9081 +vn 0.2917 0.5137 0.8069 +vn 0.4483 -0.3808 0.8087 +vn 0.5363 -0.3417 0.7718 +vn 0.4461 -0.2940 0.8453 +vn 0.6170 0.4494 0.6460 +vn 0.4811 0.7375 0.4739 +vn 0.8332 0.4566 -0.3119 +vn 0.3899 -0.6882 0.6118 +vn -0.1350 -0.9904 -0.0303 +vn 0.2569 -0.9490 0.1828 +vn -0.3036 0.5838 -0.7530 +vn -0.8544 0.0610 -0.5159 +vn -0.2072 -0.2805 -0.9372 +vn -0.4996 -0.3019 -0.8119 +vn -0.3775 0.2650 -0.8873 +vn -0.4221 -0.7434 -0.5189 +vn -0.5840 0.1718 -0.7934 +vn -0.2272 0.2030 -0.9525 +vn 0.0935 -0.8286 0.5519 +vn -0.4002 -0.9013 0.1660 +vn 0.1515 -0.9876 -0.0419 +vn 0.3586 -0.6884 0.6305 +vn 0.4124 -0.9078 -0.0762 +vn 0.8445 -0.4646 0.2665 +vn 0.8646 -0.1114 -0.4900 +vn 0.6900 -0.1906 -0.6982 +vn 0.7556 -0.5238 -0.3933 +vn 0.9646 0.2514 -0.0793 +vn 0.3622 -0.3046 -0.8809 +vn -0.4528 -0.8690 -0.1994 +vn -0.1973 -0.9775 0.0741 +vn 0.5019 -0.8218 -0.2698 +vn -0.0091 -0.9987 -0.0498 +vn -0.1519 -0.5199 0.8406 +vn -0.8348 -0.3965 0.3820 +vn -0.7815 -0.5296 -0.3299 +vn -0.5419 -0.8370 0.0758 +vn -0.8189 0.5301 0.2200 +vn -0.8262 0.5419 -0.1538 +vn -0.7794 -0.5022 0.3745 +vn -0.3809 0.3986 0.8343 +vn 0.2759 -0.9612 -0.0005 +vn -0.2679 -0.7377 0.6197 +vn 0.0113 -0.0991 0.9950 +vn -0.4813 -0.2855 0.8287 +vn 0.0967 -0.1697 0.9807 +vn 0.0679 -0.5173 0.8531 +vn -0.1549 0.4873 0.8594 +vn 0.7795 0.1795 0.6002 +vn 0.6046 0.0114 0.7964 +vn 0.7706 -0.1992 0.6054 +vn 0.4586 -0.0842 -0.8846 +vn -0.2836 -0.5286 -0.8001 +vn 0.0067 -0.2870 -0.9579 +vn 0.3130 -0.0348 -0.9491 +vn 0.5310 -0.0953 -0.8420 +vn 0.8356 -0.5066 0.2123 +vn -0.3134 -0.5348 -0.7847 +vn 0.2382 0.9236 -0.3003 +vn -0.0654 -0.4994 -0.8639 +vn 0.8586 -0.5113 0.0378 +vn -0.5061 0.1850 -0.8424 +vn 0.6449 0.1355 0.7521 +vn -0.5976 0.7538 -0.2733 +vn 0.3242 0.5839 0.7442 +vn 0.5852 0.2427 0.7737 +vn 0.3686 -0.2667 -0.8905 +vn 0.0735 -0.7828 -0.6179 +vn 0.7169 0.3509 -0.6024 +vn 0.1045 -0.9789 0.1757 +vn -0.1481 0.8169 -0.5574 +vn -0.0024 0.9706 0.2408 +vn 0.3555 0.6894 0.6311 +vn 0.6798 0.4844 0.5507 +vn 0.5882 0.2975 0.7520 +vn 0.8586 0.2518 0.4466 +vn 0.2277 -0.2595 0.9385 +vn 0.3799 -0.5205 0.7647 +vn 0.3917 0.2990 0.8702 +vn 0.7425 -0.0428 0.6685 +vn 0.5416 0.8256 0.1580 +vn 0.6833 0.3894 0.6176 +vn -0.1566 0.9676 0.1979 +vn -0.4615 -0.7417 -0.4867 +vn 0.1791 -0.9838 0.0117 +vn 0.0222 -0.9992 -0.0323 +vn 0.5204 0.4282 -0.7388 +vn 0.0623 0.4402 0.8957 +vn 0.2584 -0.9648 -0.0483 +vn -0.9931 0.0959 0.0667 +vn -0.9912 0.1058 0.0791 +vn -0.9917 0.1128 0.0620 +vn 0.9608 0.1405 0.2389 +vn 0.8229 0.2284 0.5203 +vn 0.4252 0.0365 0.9044 +vn 0.0838 0.8112 0.5787 +vn 0.0467 0.4437 0.8950 +vn -0.1576 0.3525 0.9224 +vn -0.5350 0.0396 0.8439 +vn -0.3192 0.1591 0.9342 +vn -0.6061 0.6250 0.4920 +vn 0.1093 0.2793 0.9540 +vn 0.4048 0.2315 0.8846 +vn 0.3395 -0.3013 0.8910 +vn -0.0066 0.5487 0.8360 +vn -0.6402 0.3033 0.7058 +usemtl Default_OBJ +s 1 +f 4/1/1 1/2/2 5/3/3 +f 10/4/4 9/5/5 4/1/1 +f 3/6/6 10/4/4 4/1/1 +f 1/2/2 16/7/7 5/3/3 +f 9/5/5 10/4/4 11/8/8 +f 11/9/8 69/10/9 9/11/5 +f 12/12/10 62/13/11 15/14/12 +f 8/15/13 63/16/14 178/17/15 +f 8/15/13 20/18/16 9/19/5 +f 3/6/6 4/1/1 2/20/17 +f 3/6/6 18/21/18 182/22/19 +f 5/3/3 16/7/7 6/23/20 +f 20/18/16 7/24/21 6/23/20 +f 6/23/20 16/7/7 20/18/16 +f 6/23/20 17/25/22 5/3/3 +f 1/2/2 4/26/1 16/7/7 +f 2/20/17 4/1/1 5/3/3 +f 2/20/17 5/3/3 17/25/22 +f 17/25/22 6/23/20 7/24/21 +f 17/25/22 7/24/21 19/27/23 +f 18/21/18 17/25/22 19/27/23 +f 20/18/16 16/7/7 9/19/5 +f 18/21/18 3/6/6 2/20/17 +f 9/5/5 16/28/7 4/1/1 +f 2/20/17 17/25/22 18/21/18 +f 45/29/24 29/30/25 150/31/26 +f 101/32/27 22/33/28 23/34/29 +f 22/33/28 137/35/30 138/36/31 +f 22/33/28 101/32/27 26/37/32 +f 21/38/33 36/39/34 28/40/35 +f 27/41/36 146/42/37 21/38/33 +f 146/42/37 29/30/25 45/29/24 +f 27/41/36 21/38/33 28/40/35 +f 30/43/38 146/42/37 147/44/39 +f 25/45/40 33/46/41 31/47/42 +f 33/46/41 175/48/43 183/49/44 +f 33/46/41 190/50/45 31/47/42 +f 25/45/40 151/51/46 33/46/41 +f 136/52/47 37/53/48 135/54/49 +f 44/55/50 153/56/51 165/57/52 +f 36/39/34 165/57/52 37/53/48 +f 36/39/34 37/53/48 28/40/35 +f 165/57/52 153/56/51 38/58/53 +f 153/56/51 41/59/54 38/58/53 +f 40/60/55 42/61/56 43/62/57 +f 43/62/57 42/61/56 46/63/58 +f 41/59/54 153/56/51 44/55/50 +f 51/64/59 216/65/60 211/66/61 +f 65/67/62 150/31/26 107/68/63 +f 191/69/64 55/70/65 52/71/66 +f 184/72/67 53/73/68 12/12/10 +f 53/73/68 184/72/67 54/74/69 +f 54/74/69 52/71/66 59/75/70 +f 180/76/71 71/77/72 56/78/73 +f 191/69/64 56/78/73 55/70/65 +f 191/69/64 179/79/74 56/78/73 +f 191/69/64 104/80/75 179/79/74 +f 179/79/74 180/76/71 56/78/73 +f 60/81/76 212/82/77 53/73/68 +f 60/81/76 53/73/68 54/74/69 +f 61/83/78 212/82/77 57/84/79 +f 159/85/80 60/81/76 59/75/70 +f 59/75/70 55/70/65 209/86/81 +f 56/78/73 209/86/81 55/70/65 +f 52/71/66 54/74/69 184/72/67 +f 15/14/12 62/13/11 61/83/78 +f 62/13/11 12/12/10 53/73/68 +f 62/13/11 53/73/68 212/82/77 +f 57/84/79 58/87/82 61/83/78 +f 52/71/66 176/88/83 191/69/64 +f 191/69/64 176/88/83 104/80/75 +f 63/16/14 176/88/83 184/72/67 +f 63/16/14 8/15/13 105/89/84 +f 105/89/84 8/15/13 9/11/5 +f 46/63/58 66/90/85 64/91/86 +f 43/62/57 185/92/87 47/93/88 +f 67/94/89 66/90/85 46/63/58 +f 66/90/85 65/67/62 68/95/90 +f 69/10/9 68/95/90 105/89/84 +f 105/89/84 9/11/5 69/10/9 +f 71/77/72 180/76/71 202/96/91 +f 186/97/92 73/98/93 77/99/94 +f 73/98/93 186/97/92 110/100/95 +f 76/101/96 186/97/92 75/102/97 +f 75/102/97 186/97/92 77/99/94 +f 186/97/92 76/101/96 121/103/98 +f 211/66/61 81/104/99 209/86/81 +f 210/105/100 79/106/101 50/107/102 +f 209/86/81 81/104/99 59/75/70 +f 83/108/103 79/106/101 207/109/104 +f 84/110/105 79/106/101 78/111/106 +f 84/110/105 78/111/106 49/112/107 +f 41/59/54 46/63/58 42/61/56 +f 47/93/88 39/113/108 40/60/55 +f 38/58/53 42/61/56 86/114/109 +f 87/115/110 86/114/109 40/60/55 +f 87/115/110 40/60/55 39/113/108 +f 40/60/55 86/114/109 42/61/56 +f 86/114/109 87/115/110 193/116/111 +f 129/117/112 128/118/113 88/119/114 +f 49/112/107 88/119/114 84/110/105 +f 84/110/105 88/119/114 48/120/115 +f 97/121/116 94/122/117 93/123/118 +f 95/124/119 114/125/120 174/126/121 +f 96/127/122 91/128/123 113/129/124 +f 152/130/125 99/131/126 23/34/29 +f 103/132/127 168/133/128 108/134/129 +f 102/135/130 103/132/127 101/32/27 +f 103/132/127 102/135/130 168/133/128 +f 167/136/131 168/133/128 104/80/75 +f 101/32/27 103/132/127 26/37/32 +f 103/132/127 106/137/132 107/68/63 +f 106/137/132 65/67/62 107/68/63 +f 168/133/128 167/136/131 108/134/129 +f 168/133/128 102/135/130 179/79/74 +f 101/32/27 23/34/29 110/100/95 +f 98/138/133 170/139/134 119/140/135 +f 33/46/41 113/141/124 91/142/123 +f 33/46/41 91/142/123 190/50/45 +f 97/121/116 113/129/124 112/143/136 +f 32/144/137 197/145/138 112/143/136 +f 33/46/41 32/146/137 113/141/124 +f 173/147/139 175/48/43 169/148/140 +f 175/48/43 33/46/41 151/51/46 +f 32/144/137 118/149/141 197/145/138 +f 197/145/138 118/149/141 115/150/142 +f 118/149/141 183/49/44 117/151/143 +f 32/144/137 183/49/44 118/149/141 +f 91/142/123 204/152/144 92/153/145 +f 119/154/135 92/155/145 120/156/146 +f 120/156/146 204/152/144 90/157/147 +f 90/157/147 96/127/122 125/158/148 +f 121/103/98 72/159/149 109/160/150 +f 109/160/150 72/159/149 181/161/151 +f 121/103/98 124/162/152 72/159/149 +f 75/102/97 123/163/153 76/101/96 +f 121/103/98 76/101/96 124/162/152 +f 122/164/154 217/165/155 123/163/153 +f 122/164/154 75/166/97 196/167/156 +f 196/167/156 90/157/147 215/168/157 +f 90/157/147 196/167/156 120/156/146 +f 88/119/114 49/112/107 220/169/158 +f 220/169/158 219/170/159 130/171/160 +f 131/172/161 130/171/160 132/173/162 +f 130/171/160 219/170/159 132/173/162 +f 199/174/163 218/175/164 133/176/165 +f 136/52/47 173/147/139 169/148/140 +f 135/54/49 193/116/111 173/147/139 +f 136/52/47 169/148/140 34/177/166 +f 173/147/139 136/52/47 135/54/49 +f 174/126/121 173/147/139 193/116/111 +f 175/48/43 151/51/46 169/148/140 +f 111/178/167 152/130/125 149/179/168 +f 149/179/168 152/130/125 138/36/31 +f 137/35/30 146/42/37 138/36/31 +f 137/35/30 29/30/25 146/42/37 +f 21/38/33 146/42/37 45/29/24 +f 35/180/169 27/41/36 28/40/35 +f 28/40/35 37/53/48 136/52/47 +f 35/180/169 147/44/39 146/42/37 +f 27/41/36 35/180/169 146/42/37 +f 28/40/35 136/52/47 35/180/169 +f 141/181/170 142/182/171 144/183/172 +f 142/182/171 141/181/170 143/184/173 +f 140/185/174 142/182/171 172/186/175 +f 140/187/174 154/188/176 144/189/172 +f 142/182/171 177/190/177 172/186/175 +f 143/184/173 141/181/170 145/191/178 +f 143/184/173 157/192/179 139/193/180 +f 144/189/172 154/188/176 145/191/178 +f 141/181/170 144/189/172 145/191/178 +f 142/182/171 143/184/173 139/193/180 +f 34/177/166 147/44/39 35/180/169 +f 21/38/33 45/29/24 150/31/26 +f 36/39/34 21/38/33 150/31/26 +f 146/42/37 30/43/38 149/179/168 +f 146/42/37 149/179/168 138/36/31 +f 7/24/21 20/18/16 8/15/13 +f 30/43/38 147/44/39 148/194/181 +f 25/45/40 31/47/42 24/195/182 +f 24/195/182 111/178/167 149/179/168 +f 35/180/169 136/52/47 34/177/166 +f 24/195/182 149/179/168 25/45/40 +f 149/179/168 148/194/181 25/45/40 +f 147/44/39 34/177/166 148/194/181 +f 30/43/38 148/194/181 149/179/168 +f 148/194/181 151/51/46 25/45/40 +f 169/148/140 151/51/46 148/194/181 +f 169/148/140 148/194/181 34/177/166 +f 38/58/53 134/196/183 165/57/52 +f 107/68/63 150/31/26 26/37/32 +f 134/196/183 135/54/49 165/57/52 +f 134/196/183 38/58/53 193/116/111 +f 165/57/52 36/39/34 44/55/50 +f 36/39/34 150/31/26 67/94/89 +f 36/39/34 67/94/89 44/55/50 +f 99/131/126 152/130/125 111/178/167 +f 98/138/133 166/197/184 31/47/42 +f 166/197/184 24/195/182 31/47/42 +f 150/31/26 65/67/62 67/94/89 +f 154/188/176 163/198/185 145/191/178 +f 164/199/186 14/200/187 203/201/188 +f 157/192/179 143/184/173 145/191/178 +f 156/202/189 142/182/171 139/193/180 +f 11/9/8 172/186/175 162/203/190 +f 160/204/191 159/85/80 59/75/70 +f 160/204/191 59/75/70 81/104/99 +f 214/205/192 159/85/80 160/204/191 +f 208/206/193 161/207/194 160/204/191 +f 208/206/193 70/208/195 162/203/190 +f 57/84/79 159/85/80 214/205/192 +f 161/207/194 214/205/192 160/204/191 +f 155/209/196 172/186/175 177/190/177 +f 13/210/197 182/22/19 15/14/12 +f 182/22/19 163/198/185 10/4/4 +f 163/198/185 140/187/174 10/4/4 +f 163/198/185 164/199/186 145/191/178 +f 145/191/178 164/199/186 157/192/179 +f 163/198/185 154/188/176 140/187/174 +f 10/4/4 140/187/174 11/8/8 +f 157/192/179 164/199/186 155/209/196 +f 182/22/19 13/210/197 164/199/186 +f 100/211/198 111/178/167 166/197/184 +f 135/54/49 37/53/48 165/57/52 +f 137/35/30 22/33/28 26/37/32 +f 140/185/174 144/183/172 142/182/171 +f 111/178/167 24/195/182 166/197/184 +f 137/35/30 26/37/32 29/30/25 +f 150/31/26 29/30/25 26/37/32 +f 107/68/63 26/37/32 103/132/127 +f 105/89/84 108/134/129 167/136/131 +f 100/211/198 171/212/199 74/213/200 +f 111/178/167 100/211/198 99/131/126 +f 106/137/132 103/132/127 108/134/129 +f 68/95/90 65/67/62 106/137/132 +f 68/95/90 106/137/132 105/89/84 +f 105/89/84 106/137/132 108/134/129 +f 46/63/58 44/55/50 67/94/89 +f 152/130/125 23/34/29 138/36/31 +f 67/94/89 65/67/62 66/90/85 +f 100/211/198 23/34/29 99/131/126 +f 19/27/23 182/22/19 18/21/18 +f 156/202/189 139/193/180 157/192/179 +f 46/63/58 41/59/54 44/55/50 +f 19/27/23 7/24/21 178/17/15 +f 31/47/42 170/139/134 98/138/133 +f 22/33/28 138/36/31 23/34/29 +f 171/212/199 166/197/184 98/138/133 +f 166/197/184 171/212/199 100/211/198 +f 135/54/49 134/196/183 193/116/111 +f 68/95/90 64/91/86 66/90/85 +f 10/4/4 3/6/6 182/22/19 +f 176/88/83 167/136/131 104/80/75 +f 156/202/189 177/190/177 142/182/171 +f 172/214/175 11/8/8 140/187/174 +f 114/125/120 115/150/142 174/126/121 +f 174/126/121 115/150/142 116/215/201 +f 175/48/43 173/147/139 174/126/121 +f 104/80/75 168/133/128 179/79/74 +f 86/114/109 193/116/111 38/58/53 +f 73/98/93 23/34/29 100/211/198 +f 105/89/84 167/136/131 176/88/83 +f 41/59/54 42/61/56 38/58/53 +f 183/49/44 175/48/43 117/151/143 +f 185/92/87 85/216/202 47/93/88 +f 178/17/15 7/24/21 8/15/13 +f 171/212/199 98/138/133 119/140/135 +f 171/212/199 119/140/135 195/217/203 +f 170/139/134 31/47/42 190/50/45 +f 109/160/150 102/135/130 101/32/27 +f 64/91/86 68/95/90 69/10/9 +f 117/151/143 175/48/43 116/215/201 +f 176/88/83 63/16/14 105/89/84 +f 109/160/150 110/100/95 121/103/98 +f 179/79/74 181/161/151 180/76/71 +f 179/79/74 102/135/130 181/161/151 +f 181/161/151 102/135/130 109/160/150 +f 19/27/23 15/14/12 182/22/19 +f 110/100/95 23/34/29 73/98/93 +f 101/32/27 110/100/95 109/160/150 +f 64/91/86 69/10/9 70/208/195 +f 12/12/10 63/16/14 184/72/67 +f 63/16/14 12/12/10 178/17/15 +f 185/92/87 43/62/57 64/91/86 +f 64/91/86 43/62/57 46/63/58 +f 117/151/143 116/215/201 118/149/141 +f 118/149/141 116/215/201 115/150/142 +f 183/49/44 32/146/137 33/46/41 +f 73/98/93 74/213/200 75/102/97 +f 121/103/98 110/100/95 186/97/92 +f 15/14/12 178/17/15 12/12/10 +f 178/17/15 15/14/12 19/27/23 +f 155/209/196 177/190/177 156/202/189 +f 116/215/201 175/48/43 174/126/121 +f 70/208/195 69/10/9 11/9/8 +f 187/218/204 188/219/205 189/220/206 +f 187/218/204 189/220/206 188/219/205 +f 92/153/145 170/139/134 190/50/45 +f 156/202/189 157/192/179 155/209/196 +f 95/124/119 194/221/207 133/176/165 +f 94/122/117 97/121/116 133/176/165 +f 192/222/208 162/203/190 172/186/175 +f 155/209/196 164/199/186 203/201/188 +f 194/221/207 95/124/119 193/116/111 +f 174/126/121 193/116/111 95/124/119 +f 74/213/200 171/212/199 195/217/203 +f 75/102/97 77/99/94 73/98/93 +f 87/115/110 194/221/207 193/116/111 +f 11/9/8 162/203/190 70/208/195 +f 184/72/67 176/88/83 52/71/66 +f 43/62/57 47/93/88 40/60/55 +f 195/217/203 75/102/97 74/213/200 +f 119/140/135 120/223/146 195/217/203 +f 120/223/146 196/224/156 195/217/203 +f 119/140/135 170/139/134 92/153/145 +f 200/225/209 197/145/138 115/150/142 +f 112/143/136 113/129/124 32/144/137 +f 13/210/197 15/14/12 61/83/78 +f 83/108/103 185/92/87 64/91/86 +f 85/216/202 185/92/87 83/108/103 +f 70/208/195 198/226/210 64/91/86 +f 64/91/86 198/226/210 83/108/103 +f 79/106/101 83/108/103 80/227/211 +f 70/208/195 208/206/193 198/226/210 +f 198/226/210 80/227/211 83/108/103 +f 194/221/207 87/115/110 199/174/163 +f 218/175/164 199/174/163 48/120/115 +f 48/120/115 128/118/113 218/175/164 +f 92/153/145 190/50/45 91/142/123 +f 197/145/138 200/225/209 112/143/136 +f 115/150/142 114/125/120 200/225/209 +f 13/210/197 14/200/187 164/199/186 +f 199/174/163 133/176/165 194/221/207 +f 13/210/197 61/83/78 14/200/187 +f 50/107/102 51/64/59 201/228/212 +f 127/229/213 210/105/100 126/230/214 +f 219/170/159 127/229/213 126/230/214 +f 210/105/100 201/228/212 126/230/214 +f 72/159/149 124/162/152 205/231/215 +f 181/161/151 72/159/149 202/96/91 +f 180/76/71 181/161/151 202/96/91 +f 172/186/175 203/201/188 192/222/208 +f 52/71/66 55/70/65 59/75/70 +f 124/162/152 76/101/96 123/163/153 +f 95/124/119 200/225/209 114/125/120 +f 203/201/188 14/200/187 192/222/208 +f 205/231/215 124/162/152 123/163/153 +f 202/96/91 72/159/149 51/64/59 +f 87/115/110 39/113/108 199/174/163 +f 162/203/190 192/222/208 161/207/194 +f 122/164/154 123/163/153 75/102/97 +f 72/159/149 205/231/215 51/64/59 +f 215/168/157 90/157/147 125/158/148 +f 97/121/116 200/225/209 95/124/119 +f 97/121/116 95/124/119 133/176/165 +f 60/81/76 54/74/69 59/75/70 +f 71/77/72 209/86/81 56/78/73 +f 48/120/115 199/174/163 39/113/108 +f 112/143/136 200/225/209 97/121/116 +f 209/86/81 71/77/72 202/96/91 +f 207/109/104 85/216/202 83/108/103 +f 14/200/187 61/83/78 58/87/82 +f 85/216/202 39/113/108 47/93/88 +f 161/207/194 208/206/193 162/203/190 +f 160/204/191 82/232/216 208/206/193 +f 198/226/210 208/206/193 80/227/211 +f 62/13/11 212/82/77 61/83/78 +f 158/233/217 14/200/187 58/87/82 +f 14/200/187 158/233/217 192/222/208 +f 158/233/217 161/207/194 192/222/208 +f 92/155/145 204/152/144 120/156/146 +f 123/163/153 217/165/155 205/231/215 +f 211/66/61 209/86/81 202/96/91 +f 39/113/108 85/216/202 84/110/105 +f 89/234/218 97/121/116 93/123/118 +f 89/234/218 93/123/118 131/172/161 +f 97/121/116 96/127/122 113/129/124 +f 39/113/108 84/110/105 48/120/115 +f 51/64/59 211/66/61 202/96/91 +f 91/128/123 96/127/122 90/157/147 +f 91/128/123 90/157/147 204/152/144 +f 212/82/77 60/81/76 159/85/80 +f 159/85/80 57/84/79 212/82/77 +f 213/235/219 89/234/218 132/173/162 +f 126/230/214 132/173/162 219/170/159 +f 126/230/214 201/228/212 213/235/219 +f 213/235/219 201/228/212 206/236/220 +f 132/173/162 126/230/214 213/235/219 +f 207/109/104 84/110/105 85/216/202 +f 82/232/216 80/227/211 208/206/193 +f 82/232/216 160/204/191 81/104/99 +f 201/228/212 210/105/100 50/107/102 +f 82/232/216 50/107/102 80/227/211 +f 79/106/101 80/227/211 50/107/102 +f 51/64/59 205/231/215 201/228/212 +f 215/168/157 122/164/154 196/167/156 +f 82/232/216 81/104/99 216/65/60 +f 97/121/116 89/234/218 96/127/122 +f 217/165/155 201/228/212 205/231/215 +f 216/65/60 51/64/59 50/107/102 +f 57/84/79 214/205/192 158/233/217 +f 161/207/194 158/233/217 214/205/192 +f 127/229/213 78/111/106 79/106/101 +f 210/105/100 127/229/213 79/106/101 +f 215/168/157 206/236/220 201/228/212 +f 216/65/60 50/107/102 82/232/216 +f 88/119/114 128/118/113 48/120/115 +f 133/176/165 218/175/164 94/122/117 +f 94/122/117 218/175/164 128/118/113 +f 216/65/60 81/104/99 211/66/61 +f 94/122/117 128/118/113 129/117/112 +f 57/84/79 158/233/217 58/87/82 +f 89/234/218 131/172/161 132/173/162 +f 215/168/157 217/165/155 122/164/154 +f 201/228/212 217/165/155 215/168/157 +f 125/158/148 206/236/220 215/168/157 +f 213/235/219 206/236/220 125/158/148 +f 93/123/118 94/122/117 129/117/112 +f 220/169/158 129/117/112 88/119/114 +f 127/229/213 219/170/159 220/169/158 +f 89/234/218 213/235/219 96/127/122 +f 78/111/106 127/229/213 49/112/107 +f 49/112/107 127/229/213 220/169/158 +f 213/235/219 125/158/148 96/127/122 +f 131/172/161 93/123/118 130/171/160 +f 220/169/158 130/171/160 93/123/118 +f 195/217/203 196/237/156 75/102/97 +f 73/98/93 100/211/198 74/213/200 +f 163/198/185 182/22/19 164/199/186 +f 155/209/196 203/201/188 172/186/175 +f 79/106/101 84/110/105 207/109/104 +f 220/169/158 93/123/118 129/117/112 diff --git a/assets/objects/cT.obj b/assets/objects/cT.obj new file mode 100644 index 0000000..3569f7d --- /dev/null +++ b/assets/objects/cT.obj @@ -0,0 +1,53 @@ +# Blender v2.92.0 OBJ File: '' +# www.blender.org +mtllib cT.mtl +o Cube +v 1.000000 0.500000 -1.000000 +v 1.000000 -0.000031 -1.000000 +v 1.000000 0.500000 1.000000 +v 1.000000 -0.000031 1.000000 +v -1.000000 0.500000 -1.000000 +v -1.000000 -0.000031 -1.000000 +v -1.000000 0.500000 1.000000 +v -1.000000 -0.000031 1.000000 +v 0.000000 1.897358 0.000000 +vt 0.875000 0.500000 +vt 0.750000 0.625000 +vt 0.625000 0.500000 +vt 0.625000 0.750000 +vt 0.375000 1.000000 +vt 0.375000 0.750000 +vt 0.625000 0.000000 +vt 0.375000 0.250000 +vt 0.375000 0.000000 +vt 0.375000 0.500000 +vt 0.125000 0.750000 +vt 0.125000 0.500000 +vt 0.625000 0.250000 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vn 0.0000 0.5820 -0.8132 +vn 0.0000 0.0000 1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn -0.8132 0.5820 0.0000 +vn 0.0000 0.5820 0.8132 +vn 0.8132 0.5820 0.0000 +usemtl Material +s off +f 5/1/1 9/2/1 1/3/1 +f 3/4/2 8/5/2 4/6/2 +f 7/7/3 6/8/3 8/9/3 +f 2/10/4 8/11/4 6/12/4 +f 1/3/5 4/6/5 2/10/5 +f 5/13/6 2/10/6 6/8/6 +f 5/1/7 7/14/7 9/2/7 +f 3/4/2 7/15/2 8/5/2 +f 7/7/3 5/13/3 6/8/3 +f 2/10/4 4/6/4 8/11/4 +f 1/3/5 3/4/5 4/6/5 +f 5/13/6 1/3/6 2/10/6 +f 9/2/8 7/14/8 3/4/8 +f 1/3/9 9/2/9 3/4/9 diff --git a/assets/objects/cube.obj b/assets/objects/cube.obj new file mode 100644 index 0000000..206c4dc --- /dev/null +++ b/assets/objects/cube.obj @@ -0,0 +1,40 @@ +# Blender v2.92.0 OBJ File: '' +# www.blender.org +mtllib cube.mtl +o Cube +v 1.000000 1.000000 -1.000000 +v 1.000000 -1.000000 -1.000000 +v 1.000000 1.000000 1.000000 +v 1.000000 -1.000000 1.000000 +v -1.000000 1.000000 -1.000000 +v -1.000000 -1.000000 -1.000000 +v -1.000000 1.000000 1.000000 +v -1.000000 -1.000000 1.000000 +vt 0.625000 0.500000 +vt 0.875000 0.500000 +vt 0.875000 0.750000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.625000 1.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.625000 0.000000 +vt 0.625000 0.250000 +vt 0.375000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.500000 +vt 0.125000 0.750000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +usemtl Material +s off +f 1/1/1 5/2/1 7/3/1 3/4/1 +f 4/5/2 3/4/2 7/6/2 8/7/2 +f 8/8/3 7/9/3 5/10/3 6/11/3 +f 6/12/4 2/13/4 4/5/4 8/14/4 +f 2/13/5 1/1/5 3/4/5 4/5/5 +f 6/11/6 5/10/6 1/1/6 2/13/6 diff --git a/assets/objects/cubeT.obj b/assets/objects/cubeT.obj new file mode 100644 index 0000000..fc4f955 --- /dev/null +++ b/assets/objects/cubeT.obj @@ -0,0 +1,46 @@ +# Blender v2.92.0 OBJ File: '' +# www.blender.org +mtllib cubeT.mtl +o Cube +v 1.000000 1.000000 -1.000000 +v 1.000000 -1.000000 -1.000000 +v 1.000000 1.000000 1.000000 +v 1.000000 -1.000000 1.000000 +v -1.000000 1.000000 -1.000000 +v -1.000000 -1.000000 -1.000000 +v -1.000000 1.000000 1.000000 +v -1.000000 -1.000000 1.000000 +vt 0.875000 0.500000 +vt 0.625000 0.750000 +vt 0.625000 0.500000 +vt 0.375000 1.000000 +vt 0.375000 0.750000 +vt 0.625000 0.000000 +vt 0.375000 0.250000 +vt 0.375000 0.000000 +vt 0.375000 0.500000 +vt 0.125000 0.750000 +vt 0.125000 0.500000 +vt 0.625000 0.250000 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +usemtl Material +s off +f 5/1/1 3/2/1 1/3/1 +f 3/2/2 8/4/2 4/5/2 +f 7/6/3 6/7/3 8/8/3 +f 2/9/4 8/10/4 6/11/4 +f 1/3/5 4/5/5 2/9/5 +f 5/12/6 2/9/6 6/7/6 +f 5/1/1 7/13/1 3/2/1 +f 3/2/2 7/14/2 8/4/2 +f 7/6/3 5/12/3 6/7/3 +f 2/9/4 4/5/4 8/10/4 +f 1/3/5 3/2/5 4/5/5 +f 5/12/6 1/3/6 2/9/6 diff --git a/assets/objects/cubeUV.obj b/assets/objects/cubeUV.obj new file mode 100644 index 0000000..168308f --- /dev/null +++ b/assets/objects/cubeUV.obj @@ -0,0 +1,46 @@ +# Blender v2.93.1 OBJ File: '' +# www.blender.org +mtllib cubeUV.mtl +o Cube_Cube.001 +v -0.250000 0.000000 0.250000 +v -0.250000 0.500000 0.250000 +v -0.250000 0.000000 -0.250000 +v -0.250000 0.500000 -0.250000 +v 0.250000 0.000000 0.250000 +v 0.250000 0.500000 0.250000 +v 0.250000 0.000000 -0.250000 +v 0.250000 0.500000 -0.250000 +vt 0.999900 0.000100 +vt 0.999900 0.999900 +vt 0.000100 0.999900 +vt 0.000100 0.000100 +vt 0.999900 0.000100 +vt 0.999900 0.999900 +vt 0.000100 0.999900 +vt 0.000100 0.000100 +vt 0.000100 0.999900 +vt 0.000100 0.000100 +vt 0.999900 0.000100 +vt 0.999900 0.999900 +vt 0.000100 0.999900 +vt 0.000100 0.000100 +vt 0.999900 0.000100 +vt 0.999900 0.999900 +vt 0.999900 0.000100 +vt 0.000100 0.999900 +vt 0.999900 0.000100 +vt 0.000100 0.999900 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +usemtl Material.001 +s off +f 1/1/1 2/2/1 4/3/1 3/4/1 +f 3/5/2 4/6/2 8/7/2 7/8/2 +f 7/9/3 8/10/3 6/11/3 5/12/3 +f 5/13/4 6/14/4 2/15/4 1/16/4 +f 3/4/5 7/17/5 5/12/5 1/18/5 +f 8/10/6 4/19/6 2/2/6 6/20/6 diff --git a/assets/objects/disco.obj b/assets/objects/disco.obj new file mode 100644 index 0000000..cf98190 --- /dev/null +++ b/assets/objects/disco.obj @@ -0,0 +1,1013 @@ +# Blender v2.92.0 OBJ File: '' +# www.blender.org +mtllib disco.mtl +o Icosphere +v 0.000000 -2.122620 0.000000 +v 1.535944 -0.949277 1.115915 +v -0.586667 -0.949278 1.805606 +v -1.898527 -0.949269 0.000000 +v -0.586667 -0.949278 -1.805605 +v 1.535944 -0.949277 -1.115915 +v 0.586667 0.949278 1.805605 +v -1.535944 0.949277 1.115915 +v -1.535944 0.949277 -1.115915 +v 0.586667 0.949278 -1.805605 +v 1.898527 0.949269 0.000000 +v 0.000000 2.122620 0.000000 +v -0.344831 -1.805616 1.061300 +v 0.902799 -1.805616 0.655914 +v 0.557971 -1.115942 1.717225 +v 1.805602 -1.115938 0.000000 +v 0.902799 -1.805616 -0.655914 +v -1.115925 -1.805611 0.000000 +v -1.460765 -1.115938 1.061304 +v -0.344831 -1.805616 -1.061300 +v -1.460765 -1.115938 -1.061304 +v 0.557971 -1.115941 -1.717225 +v 2.018735 0.000000 0.655916 +v 2.018735 0.000000 -0.655916 +v 0.000000 0.000000 2.122620 +v 1.247646 0.000000 1.717235 +v -2.018735 0.000000 0.655916 +v -1.247646 0.000000 1.717235 +v -1.247646 0.000000 -1.717235 +v -2.018735 0.000000 -0.655916 +v 1.247646 0.000000 -1.717235 +v 0.000000 0.000000 -2.122620 +v 1.460765 1.115938 1.061304 +v -0.557971 1.115941 1.717225 +v -1.805602 1.115938 0.000000 +v -0.557971 1.115941 -1.717225 +v 1.460765 1.115938 -1.061304 +v 0.344831 1.805616 1.061300 +v 1.115925 1.805611 0.000000 +v -0.902799 1.805616 0.655914 +v -0.902799 1.805616 -0.655914 +v 0.344831 1.805616 -1.061300 +v -0.179238 -2.041831 0.551646 +v 1.267622 -1.431952 0.920970 +v -0.014916 -1.073466 1.831108 +v 1.736881 -1.073463 0.580034 +v 1.267622 -1.431952 -0.920970 +v -0.580039 -2.041829 0.000000 +v -1.746107 -1.073461 0.551649 +v -0.179238 -2.041831 -0.551646 +v -1.064223 -1.073467 -1.490174 +v 1.088384 -1.073467 -1.472622 +v 1.847664 -0.493419 0.920969 +v 2.036127 0.493414 -0.340934 +v -0.304940 -0.493420 2.041829 +v 0.953446 0.493419 1.831118 +v -2.036127 -0.493414 0.340934 +v -1.446866 0.493420 1.472627 +v -0.953446 -0.493419 -1.831118 +v -1.847664 0.493419 -0.920969 +v 1.446866 -0.493420 -1.472627 +v 0.304940 0.493420 -2.041829 +v 1.064223 1.073467 1.490174 +v -1.088384 1.073467 1.472622 +v -1.736881 1.073463 -0.580034 +v 0.014916 1.073466 -1.831108 +v 1.746107 1.073461 -0.551649 +v 0.484177 1.431949 1.490171 +v 0.580039 2.041829 0.000000 +v -1.267622 1.431952 0.920970 +v -1.267622 1.431952 -0.920970 +v 0.484177 1.431949 -1.490171 +v -0.484177 -1.431949 1.490171 +v 0.469259 -2.041830 0.340933 +v 1.088384 -1.073467 1.472622 +v 1.736881 -1.073463 -0.580034 +v 0.469259 -2.041830 -0.340933 +v -1.566866 -1.431944 0.000000 +v -1.064222 -1.073467 1.490174 +v -0.484177 -1.431949 -1.490171 +v -1.746107 -1.073461 -0.551649 +v -0.014916 -1.073466 -1.831108 +v 2.036127 0.493414 0.340934 +v 1.847664 -0.493419 -0.920969 +v 0.304940 0.493420 2.041829 +v 1.446866 -0.493420 1.472627 +v -1.847664 0.493419 0.920969 +v -0.953446 -0.493419 1.831118 +v -1.446866 0.493420 -1.472627 +v -2.036127 -0.493414 -0.340934 +v 0.953446 0.493419 -1.831118 +v -0.304940 -0.493420 -2.041829 +v 1.746107 1.073461 0.551649 +v 0.014916 1.073466 1.831108 +v -1.736881 1.073463 0.580034 +v -1.088384 1.073467 -1.472622 +v 1.064222 1.073467 -1.490174 +v 0.179238 2.041831 0.551646 +v 1.566866 1.431944 0.000000 +v -0.469259 2.041830 0.340933 +v -0.469259 2.041830 -0.340933 +v 0.179238 2.041831 -0.551646 +v 0.767964 1.898533 -0.557958 +v 1.354646 1.535950 -0.557961 +v 0.949259 1.535953 -1.115920 +v -0.293340 1.898534 -0.902791 +v -0.112054 1.535953 -1.460757 +v -0.767972 1.535955 -1.247633 +v -0.949255 1.898532 0.000000 +v -1.423892 1.535953 -0.344835 +v -1.423892 1.535953 0.344835 +v -0.293340 1.898534 0.902791 +v -0.767972 1.535955 1.247633 +v -0.112054 1.535953 1.460757 +v 0.767964 1.898533 0.557958 +v 0.949259 1.535953 1.115920 +v 1.354646 1.535950 0.557961 +v 1.829283 0.586684 -0.902797 +v 1.717243 0.000000 -1.247644 +v 1.423896 0.586685 -1.460767 +v -0.293343 0.586686 -2.018728 +v -0.655925 0.000000 -2.018728 +v -0.949267 0.586684 -1.805602 +v -2.010571 0.586682 -0.344835 +v -2.122617 0.000000 0.000000 +v -2.010571 0.586682 0.344835 +v -0.949267 0.586684 1.805602 +v -0.655925 0.000000 2.018728 +v -0.293343 0.586686 2.018728 +v 1.423896 0.586685 1.460767 +v 1.717243 0.000000 1.247644 +v 1.829283 0.586684 0.902797 +v 0.655925 0.000000 -2.018728 +v 0.949267 -0.586684 -1.805602 +v 0.293343 -0.586686 -2.018728 +v -1.717243 0.000000 -1.247644 +v -1.423896 -0.586685 -1.460767 +v -1.829283 -0.586684 -0.902797 +v -1.717243 0.000000 1.247644 +v -1.829283 -0.586684 0.902797 +v -1.423896 -0.586685 1.460767 +v 0.655925 0.000000 2.018728 +v 0.293343 -0.586686 2.018728 +v 0.949267 -0.586684 1.805602 +v 2.122617 0.000000 0.000000 +v 2.010571 -0.586682 0.344835 +v 2.010571 -0.586682 -0.344835 +v 0.767972 -1.535955 -1.247633 +v 0.293340 -1.898534 -0.902791 +v 0.112054 -1.535954 -1.460757 +v -0.949259 -1.535953 -1.115920 +v -0.767964 -1.898533 -0.557958 +v -1.354646 -1.535950 -0.557961 +v -1.354646 -1.535950 0.557961 +v -0.767964 -1.898533 0.557958 +v -0.949259 -1.535953 1.115920 +v 1.423892 -1.535953 -0.344835 +v 1.423892 -1.535953 0.344835 +v 0.949255 -1.898532 0.000000 +v 0.112054 -1.535954 1.460757 +v 0.293340 -1.898534 0.902791 +v 0.767972 -1.535955 1.247633 +vt 0.818181 0.000000 +vt 0.795454 0.039365 +vt 0.840908 0.039365 +vt 0.727272 0.157461 +vt 0.704545 0.118096 +vt 0.681818 0.157461 +vt 0.090909 0.000000 +vt 0.068182 0.039365 +vt 0.113636 0.039365 +vt 0.272727 0.000000 +vt 0.250000 0.039365 +vt 0.295454 0.039365 +vt 0.454545 0.000000 +vt 0.431818 0.039365 +vt 0.477272 0.039365 +vt 0.704545 0.196826 +vt 0.909090 0.157461 +vt 0.863635 0.157461 +vt 0.886363 0.196826 +vt 0.181818 0.157461 +vt 0.136363 0.157461 +vt 0.159091 0.196826 +vt 0.363636 0.157461 +vt 0.318181 0.157461 +vt 0.340909 0.196826 +vt 0.545454 0.157461 +vt 0.500000 0.157461 +vt 0.522727 0.196826 +vt 0.749999 0.196826 +vt 0.931818 0.196826 +vt 0.204545 0.196826 +vt 0.386363 0.196826 +vt 0.568181 0.196826 +vt 0.818181 0.314921 +vt 0.772727 0.314921 +vt 0.795454 0.354286 +vt 1.000000 0.314921 +vt 0.954545 0.314921 +vt 0.977273 0.354286 +vt 0.272727 0.314921 +vt 0.227273 0.314921 +vt 0.250000 0.354286 +vt 0.454545 0.314921 +vt 0.409091 0.314921 +vt 0.431818 0.354286 +vt 0.636363 0.314921 +vt 0.590909 0.314921 +vt 0.613636 0.354286 +vt 0.590909 0.393651 +vt 0.545454 0.393651 +vt 0.568181 0.433017 +vt 0.568181 0.354286 +vt 0.545454 0.314921 +vt 0.500000 0.314921 +vt 0.522727 0.354286 +vt 0.409090 0.393651 +vt 0.363636 0.393651 +vt 0.386363 0.433017 +vt 0.386363 0.354286 +vt 0.363636 0.314921 +vt 0.318182 0.314921 +vt 0.340909 0.354286 +vt 0.227273 0.393651 +vt 0.181818 0.393651 +vt 0.204545 0.433017 +vt 0.204545 0.354286 +vt 0.181818 0.314921 +vt 0.136364 0.314921 +vt 0.159091 0.354286 +vt 0.954545 0.393651 +vt 0.909090 0.393651 +vt 0.931818 0.433017 +vt 0.931818 0.354286 +vt 0.909091 0.314921 +vt 0.863636 0.314921 +vt 0.886363 0.354286 +vt 0.772726 0.393651 +vt 0.727272 0.393651 +vt 0.749999 0.433017 +vt 0.749999 0.354286 +vt 0.727272 0.314921 +vt 0.681818 0.314921 +vt 0.704545 0.354286 +vt 0.590909 0.236191 +vt 0.568181 0.275556 +vt 0.613636 0.275556 +vt 0.545454 0.236191 +vt 0.500000 0.236191 +vt 0.477272 0.275556 +vt 0.522727 0.275556 +vt 0.409090 0.236191 +vt 0.386363 0.275556 +vt 0.431818 0.275556 +vt 0.363636 0.236191 +vt 0.318182 0.236191 +vt 0.295454 0.275556 +vt 0.340909 0.275556 +vt 0.227273 0.236191 +vt 0.204545 0.275556 +vt 0.250000 0.275556 +vt 0.181818 0.236191 +vt 0.136363 0.236191 +vt 0.113636 0.275556 +vt 0.159091 0.275556 +vt 0.954545 0.236191 +vt 0.931818 0.275556 +vt 0.977273 0.275556 +vt 0.909090 0.236191 +vt 0.863635 0.236191 +vt 0.840908 0.275556 +vt 0.886363 0.275556 +vt 0.772726 0.236191 +vt 0.749999 0.275556 +vt 0.795454 0.275556 +vt 0.727272 0.236191 +vt 0.681818 0.236191 +vt 0.659090 0.275556 +vt 0.704545 0.275556 +vt 0.454545 0.236191 +vt 0.477272 0.196826 +vt 0.454545 0.157461 +vt 0.409091 0.157461 +vt 0.431818 0.196826 +vt 0.272727 0.236191 +vt 0.295454 0.196826 +vt 0.272727 0.157461 +vt 0.227272 0.157461 +vt 0.250000 0.196826 +vt 0.090909 0.236191 +vt 0.113636 0.196826 +vt 0.090909 0.157461 +vt 0.045454 0.157461 +vt 0.068182 0.196826 +vt 0.818181 0.236191 +vt 0.840908 0.196826 +vt 0.818181 0.157461 +vt 0.772726 0.157461 +vt 0.795454 0.196826 +vt 0.636363 0.236191 +vt 0.659090 0.196826 +vt 0.636363 0.157461 +vt 0.590909 0.157461 +vt 0.613636 0.196826 +vt 0.500000 0.078731 +vt 0.477272 0.118096 +vt 0.522727 0.118096 +vt 0.454545 0.078731 +vt 0.409090 0.078731 +vt 0.386363 0.118096 +vt 0.431818 0.118096 +vt 0.318182 0.078731 +vt 0.295454 0.118096 +vt 0.340909 0.118096 +vt 0.272727 0.078731 +vt 0.227273 0.078731 +vt 0.204545 0.118096 +vt 0.250000 0.118096 +vt 0.136363 0.078731 +vt 0.113636 0.118096 +vt 0.159091 0.118096 +vt 0.090909 0.078731 +vt 0.045454 0.078731 +vt 0.022727 0.118096 +vt 0.068182 0.118096 +vt 0.613636 0.118096 +vt 0.659090 0.118096 +vt 0.681818 0.078731 +vt 0.659090 0.039365 +vt 0.636363 0.078731 +vt 0.863635 0.078731 +vt 0.840908 0.118096 +vt 0.886363 0.118096 +vt 0.818181 0.078731 +vt 0.772726 0.078731 +vt 0.749999 0.118096 +vt 0.795454 0.118096 +vt 0.613636 0.039365 +vt 0.590909 0.078731 +vt 0.636363 0.000000 +vt 0.568181 0.118096 +vt 0.000000 0.157461 +vt 0.022727 0.196826 +vt 0.045454 0.236191 +vt 0.068182 0.275556 +vt 0.090909 0.314921 +vt 0.659090 0.354286 +vt 0.681818 0.393651 +vt 0.704545 0.433017 +vt 0.727272 0.472382 +vt 0.840908 0.354286 +vt 0.863635 0.393651 +vt 0.886363 0.433017 +vt 0.909090 0.472382 +vt 0.113636 0.354286 +vt 0.136363 0.393651 +vt 0.159091 0.433017 +vt 0.181818 0.472382 +vt 0.295454 0.354286 +vt 0.318182 0.393651 +vt 0.340909 0.433017 +vt 0.363636 0.472382 +vt 0.477272 0.354286 +vt 0.500000 0.393651 +vt 0.522727 0.433017 +vt 0.545454 0.472382 +vn 0.0524 -0.9855 0.1614 +vn 0.7221 -0.5635 0.4013 +vn -0.1373 -0.9855 0.0997 +vn -0.1373 -0.9855 -0.0997 +vn 0.0524 -0.9855 -0.1614 +vn 0.8269 -0.3938 0.4013 +vn -0.1262 -0.3938 0.9105 +vn -0.9049 -0.3938 0.1614 +vn -0.4331 -0.3938 -0.8108 +vn 0.6372 -0.3938 -0.6624 +vn 0.7745 -0.2890 0.5627 +vn -0.2958 -0.2890 0.9105 +vn -0.9573 -0.2890 0.0000 +vn -0.2958 -0.2890 -0.9105 +vn 0.7745 -0.2890 -0.5627 +vn 0.3483 0.5635 0.7491 +vn -0.6048 0.5635 0.5627 +vn -0.7221 0.5635 -0.4013 +vn 0.1586 0.5635 -0.8108 +vn 0.8201 0.5635 -0.0997 +vn 0.4014 0.9106 -0.0987 +vn 0.5168 0.8363 -0.1830 +vn 0.5556 0.6021 -0.5734 +vn 0.0302 0.9106 -0.4122 +vn -0.0144 0.8363 -0.5481 +vn -0.3736 0.6021 -0.7056 +vn -0.3827 0.9106 -0.1561 +vn -0.5257 0.8363 -0.1557 +vn -0.7865 0.6021 0.1373 +vn -0.2667 0.9106 0.3157 +vn -0.3105 0.8363 0.4519 +vn -0.1125 0.6021 0.7905 +vn 0.2179 0.9106 0.3512 +vn 0.3338 0.8363 0.4350 +vn 0.7170 0.6021 0.3513 +vn 0.9337 0.1687 -0.3157 +vn 0.8869 0.0962 -0.4519 +vn 0.5888 0.1687 -0.7905 +vn -0.0118 0.1687 -0.9856 +vn -0.1557 0.0962 -0.9831 +vn -0.5698 0.1687 -0.8043 +vn -0.9410 0.1687 -0.2934 +vn -0.9831 0.0962 -0.1557 +vn -0.9410 0.1687 0.2934 +vn -0.5698 0.1687 0.8043 +vn -0.4519 0.0962 0.8869 +vn -0.0118 0.1687 0.9856 +vn 0.5888 0.1687 0.7905 +vn 0.7038 0.0962 0.7038 +vn 0.9337 0.1687 0.3157 +vn 0.4530 0.0649 -0.8891 +vn 0.4519 -0.0962 -0.8869 +vn 0.1446 -0.4342 -0.8891 +vn -0.7056 0.0649 -0.7056 +vn -0.7038 -0.0962 -0.7038 +vn -0.8009 -0.4342 -0.4122 +vn -0.8891 0.0649 0.4530 +vn -0.8869 -0.0962 0.4519 +vn -0.6396 -0.4342 0.6344 +vn 0.1561 0.0649 0.9856 +vn 0.1557 -0.0962 0.9831 +vn 0.4057 -0.4342 0.8043 +vn 0.9856 0.0649 0.1561 +vn 0.9831 -0.0962 0.1557 +vn 0.8903 -0.4342 -0.1373 +vn 0.4557 -0.7662 -0.4530 +vn 0.3105 -0.8363 -0.4519 +vn -0.1024 -0.7662 -0.6343 +vn -0.2900 -0.7662 -0.5734 +vn -0.3338 -0.8363 -0.4350 +vn -0.6349 -0.7662 -0.0987 +vn -0.6349 -0.7662 0.0987 +vn -0.5168 -0.8363 0.1830 +vn -0.2900 -0.7662 0.5734 +vn 0.7865 -0.6021 -0.1373 +vn 0.7400 -0.6726 0.0000 +vn 0.3827 -0.9106 0.1561 +vn -0.1024 -0.7662 0.6343 +vn 0.0144 -0.8363 0.5481 +vn 0.4557 -0.7662 0.4530 +vn 0.3736 -0.6021 0.7056 +vn 0.5108 -0.6355 0.5790 +vn 0.6048 -0.5635 0.5627 +vn 0.2287 -0.6726 0.7038 +vn 0.1876 -0.7947 0.5773 +vn 0.3105 -0.8363 0.4519 +vn -0.1586 -0.5635 0.8108 +vn -0.0729 -0.6355 0.7686 +vn 0.1125 -0.6021 0.7905 +vn 0.3827 -0.9106 -0.1561 +vn 0.2861 -0.9582 0.0000 +vn 0.1697 -0.9855 0.0000 +vn 0.5257 -0.8363 -0.1557 +vn 0.6070 -0.7947 0.0000 +vn 0.5257 -0.8363 0.1557 +vn 0.7221 -0.5635 -0.4013 +vn 0.7085 -0.6355 -0.3069 +vn 0.5717 -0.7662 -0.2934 +vn -0.5556 -0.6021 0.5734 +vn -0.3928 -0.6355 0.6647 +vn -0.3483 -0.5635 0.7491 +vn -0.5987 -0.6726 0.4350 +vn -0.4911 -0.7947 0.3568 +vn -0.3338 -0.8363 0.4350 +vn -0.8201 -0.5635 0.0997 +vn -0.7535 -0.6355 0.1681 +vn -0.7170 -0.6021 0.3513 +vn -0.7170 -0.6021 -0.3513 +vn -0.7535 -0.6355 -0.1681 +vn -0.8201 -0.5635 -0.0997 +vn -0.5987 -0.6726 -0.4350 +vn -0.4911 -0.7947 -0.3568 +vn -0.5168 -0.8363 -0.1830 +vn -0.3483 -0.5635 -0.7491 +vn -0.3928 -0.6355 -0.6647 +vn -0.5556 -0.6021 -0.5734 +vn 0.1125 -0.6021 -0.7905 +vn -0.0729 -0.6355 -0.7686 +vn -0.1586 -0.5635 -0.8108 +vn 0.2287 -0.6726 -0.7038 +vn 0.1876 -0.7947 -0.5773 +vn 0.0144 -0.8363 -0.5481 +vn 0.6048 -0.5635 -0.5627 +vn 0.5108 -0.6355 -0.5790 +vn 0.3736 -0.6021 -0.7056 +vn 0.9410 -0.1687 -0.2934 +vn 0.8853 -0.3495 -0.3069 +vn 0.8269 -0.3938 -0.4013 +vn 0.9831 -0.0962 -0.1557 +vn 0.9822 -0.1876 0.0000 +vn 0.9325 -0.3611 0.0000 +vn 0.9573 0.2890 0.0000 +vn 0.9850 0.1727 0.0000 +vn 0.9856 0.0649 -0.1561 +vn 0.5698 -0.1687 0.8043 +vn 0.5654 -0.3495 0.7471 +vn 0.6372 -0.3938 0.6624 +vn 0.4519 -0.0962 0.8869 +vn 0.3035 -0.1876 0.9342 +vn 0.2882 -0.3611 0.8869 +vn 0.2958 0.2890 0.9105 +vn 0.3044 0.1727 0.9368 +vn 0.4530 0.0649 0.8891 +vn -0.5888 -0.1687 0.7905 +vn -0.5358 -0.3495 0.7686 +vn -0.4331 -0.3938 0.8108 +vn -0.7038 -0.0962 0.7038 +vn -0.7947 -0.1876 0.5773 +vn -0.7544 -0.3611 0.5481 +vn -0.7745 0.2890 0.5627 +vn -0.7969 0.1727 0.5790 +vn -0.7056 0.0649 0.7056 +vn -0.9337 -0.1687 -0.3157 +vn -0.8966 -0.3495 -0.2721 +vn -0.9049 -0.3938 -0.1614 +vn -0.8869 -0.0962 -0.4519 +vn -0.7947 -0.1876 -0.5773 +vn -0.7544 -0.3611 -0.5481 +vn -0.7745 0.2890 -0.5627 +vn -0.7969 0.1727 -0.5790 +vn -0.8891 0.0649 -0.4530 +vn 0.0118 -0.1687 -0.9856 +vn -0.0183 -0.3495 -0.9368 +vn -0.1262 -0.3938 -0.9105 +vn 0.1557 -0.0962 -0.9831 +vn 0.3035 -0.1876 -0.9342 +vn 0.2882 -0.3611 -0.8869 +vn 0.2958 0.2890 -0.9105 +vn 0.3044 0.1727 -0.9368 +vn 0.1561 0.0649 -0.9856 +vn 0.8009 0.4342 0.4122 +vn 0.8966 0.3495 0.2721 +vn 0.9049 0.3938 0.1614 +vn 0.7544 0.3611 0.5481 +vn 0.7947 0.1876 0.5773 +vn 0.8869 0.0962 0.4519 +vn 0.4331 0.3938 0.8108 +vn 0.5358 0.3495 0.7686 +vn 0.6396 0.4342 0.6344 +vn -0.1446 0.4342 0.8891 +vn 0.0183 0.3495 0.9368 +vn 0.1262 0.3938 0.9105 +vn -0.2882 0.3611 0.8869 +vn -0.3035 0.1876 0.9342 +vn -0.1557 0.0962 0.9831 +vn -0.6372 0.3938 0.6624 +vn -0.5654 0.3495 0.7471 +vn -0.4057 0.4342 0.8043 +vn -0.8903 0.4342 0.1373 +vn -0.8853 0.3495 0.3069 +vn -0.8269 0.3938 0.4013 +vn -0.9325 0.3611 0.0000 +vn -0.9822 0.1876 0.0000 +vn -0.9831 0.0962 0.1557 +vn -0.8269 0.3938 -0.4013 +vn -0.8853 0.3495 -0.3069 +vn -0.8903 0.4342 -0.1373 +vn -0.4057 0.4342 -0.8043 +vn -0.5654 0.3495 -0.7471 +vn -0.6372 0.3938 -0.6624 +vn -0.2882 0.3611 -0.8869 +vn -0.3035 0.1876 -0.9342 +vn -0.4519 0.0962 -0.8869 +vn 0.1262 0.3938 -0.9105 +vn 0.0183 0.3495 -0.9368 +vn -0.1446 0.4342 -0.8891 +vn 0.6396 0.4342 -0.6344 +vn 0.5358 0.3495 -0.7686 +vn 0.4331 0.3938 -0.8108 +vn 0.7544 0.3611 -0.5481 +vn 0.7947 0.1876 -0.5773 +vn 0.7038 0.0962 -0.7038 +vn 0.9049 0.3938 -0.1614 +vn 0.8966 0.3495 -0.2721 +vn 0.8009 0.4342 -0.4122 +vn 0.6349 0.7662 0.0987 +vn 0.7535 0.6355 0.1681 +vn 0.8201 0.5635 0.0997 +vn 0.5168 0.8363 0.1830 +vn 0.4911 0.7947 0.3568 +vn 0.5987 0.6726 0.4350 +vn 0.1373 0.9855 0.0997 +vn 0.2314 0.9582 0.1681 +vn 0.4014 0.9106 0.0987 +vn 0.1024 0.7662 0.6343 +vn 0.0729 0.6355 0.7686 +vn 0.1586 0.5635 0.8108 +vn -0.0144 0.8363 0.5481 +vn -0.1876 0.7947 0.5773 +vn -0.2287 0.6726 0.7038 +vn -0.0524 0.9855 0.1614 +vn -0.0884 0.9582 0.2721 +vn 0.0302 0.9106 0.4122 +vn -0.5717 0.7662 0.2934 +vn -0.7085 0.6355 0.3069 +vn -0.7221 0.5635 0.4013 +vn -0.5257 0.8363 0.1557 +vn -0.6070 0.7947 0.0000 +vn -0.7400 0.6726 0.0000 +vn -0.1697 0.9855 0.0000 +vn -0.2861 0.9582 0.0000 +vn -0.3827 0.9106 0.1561 +vn -0.4557 0.7662 -0.4530 +vn -0.5108 0.6355 -0.5790 +vn -0.6048 0.5635 -0.5627 +vn -0.3105 0.8363 -0.4519 +vn -0.1876 0.7947 -0.5773 +vn -0.2287 0.6726 -0.7038 +vn -0.0524 0.9855 -0.1614 +vn -0.0884 0.9582 -0.2721 +vn -0.2667 0.9106 -0.3157 +vn 0.2900 0.7662 -0.5734 +vn 0.3928 0.6355 -0.6647 +vn 0.3483 0.5635 -0.7491 +vn 0.3338 0.8363 -0.4350 +vn 0.4911 0.7947 -0.3568 +vn 0.5987 0.6726 -0.4350 +vn 0.1373 0.9855 -0.0997 +vn 0.2314 0.9582 -0.1681 +vn 0.2179 0.9106 -0.3512 +vn 0.6349 0.7662 -0.0987 +vn 0.7535 0.6355 -0.1681 +vn 0.7170 0.6021 -0.3513 +vn 0.1024 0.7662 -0.6343 +vn 0.0729 0.6355 -0.7686 +vn -0.1125 0.6021 -0.7905 +vn -0.5717 0.7662 -0.2934 +vn -0.7085 0.6355 -0.3069 +vn -0.7865 0.6021 -0.1373 +vn -0.4557 0.7662 0.4530 +vn -0.5108 0.6355 0.5790 +vn -0.3736 0.6021 0.7056 +vn 0.2900 0.7662 0.5734 +vn 0.3928 0.6355 0.6647 +vn 0.5556 0.6021 0.5734 +vn 0.8891 -0.0649 -0.4530 +vn 0.7969 -0.1727 -0.5790 +vn 0.7056 -0.0649 -0.7056 +vn -0.1561 -0.0649 -0.9856 +vn -0.3044 -0.1727 -0.9368 +vn -0.4530 -0.0649 -0.8891 +vn -0.9856 -0.0649 -0.1561 +vn -0.9850 -0.1727 0.0000 +vn -0.9856 -0.0649 0.1561 +vn -0.4530 -0.0649 0.8891 +vn -0.3044 -0.1727 0.9368 +vn -0.1561 -0.0649 0.9856 +vn 0.7056 -0.0649 0.7056 +vn 0.7969 -0.1727 0.5790 +vn 0.8891 -0.0649 0.4530 +vn 0.5698 -0.1687 -0.8043 +vn 0.5654 -0.3495 -0.7471 +vn 0.4057 -0.4342 -0.8043 +vn -0.5888 -0.1687 -0.7905 +vn -0.5358 -0.3495 -0.7686 +vn -0.6396 -0.4342 -0.6344 +vn -0.9337 -0.1687 0.3157 +vn -0.8966 -0.3495 0.2721 +vn -0.8009 -0.4342 0.4122 +vn 0.0118 -0.1687 0.9856 +vn -0.0183 -0.3495 0.9368 +vn 0.1446 -0.4342 0.8891 +vn 0.9410 -0.1687 0.2934 +vn 0.8853 -0.3495 0.3069 +vn 0.8903 -0.4342 0.1373 +vn 0.2667 -0.9106 -0.3157 +vn 0.0884 -0.9582 -0.2721 +vn -0.0302 -0.9106 -0.4122 +vn -0.2179 -0.9106 -0.3512 +vn -0.2314 -0.9582 -0.1681 +vn -0.4014 -0.9106 -0.0987 +vn -0.4014 -0.9106 0.0987 +vn -0.2314 -0.9582 0.1681 +vn -0.2179 -0.9106 0.3512 +vn 0.7865 -0.6021 0.1373 +vn 0.7085 -0.6355 0.3069 +vn 0.5717 -0.7662 0.2934 +vn -0.0302 -0.9106 0.4122 +vn 0.0884 -0.9582 0.2721 +vn 0.2667 -0.9106 0.3157 +usemtl None +s off +f 1/1/1 74/2/1 43/3/1 +f 2/4/2 44/5/2 46/6/2 +f 1/7/3 43/8/3 48/9/3 +f 1/10/4 48/11/4 50/12/4 +f 1/13/5 50/14/5 77/15/5 +f 2/4/6 46/6/6 53/16/6 +f 3/17/7 45/18/7 55/19/7 +f 4/20/8 49/21/8 57/22/8 +f 5/23/9 51/24/9 59/25/9 +f 6/26/10 52/27/10 61/28/10 +f 2/4/11 53/16/11 86/29/11 +f 3/17/12 55/19/12 88/30/12 +f 4/20/13 57/22/13 90/31/13 +f 5/23/14 59/25/14 92/32/14 +f 6/26/15 61/28/15 84/33/15 +f 7/34/16 63/35/16 68/36/16 +f 8/37/17 64/38/17 70/39/17 +f 9/40/18 65/41/18 71/42/18 +f 10/43/19 66/44/19 72/45/19 +f 11/46/20 67/47/20 99/48/20 +f 39/49/21 103/50/21 69/51/21 +f 39/49/22 104/52/22 103/50/22 +f 37/53/23 97/54/23 105/55/23 +f 42/56/24 106/57/24 102/58/24 +f 42/56/25 107/59/25 106/57/25 +f 36/60/26 96/61/26 108/62/26 +f 41/63/27 109/64/27 101/65/27 +f 41/63/28 110/66/28 109/64/28 +f 35/67/29 95/68/29 111/69/29 +f 40/70/30 112/71/30 100/72/30 +f 40/70/31 113/73/31 112/71/31 +f 34/74/32 94/75/32 114/76/32 +f 38/77/33 115/78/33 98/79/33 +f 38/77/34 116/80/34 115/78/34 +f 33/81/35 93/82/35 117/83/35 +f 24/84/36 118/85/36 54/86/36 +f 24/84/37 119/87/37 118/85/37 +f 31/88/38 91/89/38 120/90/38 +f 32/91/39 121/92/39 62/93/39 +f 32/91/40 122/94/40 121/92/40 +f 29/95/41 89/96/41 123/97/41 +f 30/98/42 124/99/42 60/100/42 +f 30/98/43 125/101/43 124/99/43 +f 27/102/44 87/103/44 126/104/44 +f 28/105/45 127/106/45 58/107/45 +f 28/105/46 128/108/46 127/106/46 +f 25/109/47 85/110/47 129/111/47 +f 26/112/48 130/113/48 56/114/48 +f 26/112/49 131/115/49 130/113/49 +f 23/116/50 83/117/50 132/118/50 +f 31/88/51 133/119/51 91/89/51 +f 31/88/52 134/120/52 133/119/52 +f 22/121/53 82/122/53 135/123/53 +f 29/95/54 136/124/54 89/96/54 +f 29/95/55 137/125/55 136/124/55 +f 21/126/56 81/127/56 138/128/56 +f 27/102/57 139/129/57 87/103/57 +f 27/102/58 140/130/58 139/129/58 +f 19/131/59 79/132/59 141/133/59 +f 25/109/60 142/134/60 85/110/60 +f 25/109/61 143/135/61 142/134/61 +f 15/136/62 75/137/62 144/138/62 +f 23/116/63 145/139/63 83/117/63 +f 23/116/64 146/140/64 145/139/64 +f 16/141/65 76/142/65 147/143/65 +f 17/144/66 148/145/66 47/146/66 +f 17/144/67 149/147/67 148/145/67 +f 20/148/68 80/149/68 150/150/68 +f 20/151/69 151/152/69 80/153/69 +f 20/151/70 152/154/70 151/152/70 +f 18/155/71 78/156/71 153/157/71 +f 18/158/72 154/159/72 78/160/72 +f 18/158/73 155/161/73 154/159/73 +f 13/162/74 73/163/74 156/164/74 +f 16/141/75 157/165/75 76/142/75 +f 16/141/76 158/166/76 157/165/76 +f 14/167/77 74/168/77 159/169/77 +f 13/170/78 160/171/78 73/172/78 +f 13/170/79 161/173/79 160/171/79 +f 14/174/80 44/175/80 162/176/80 +f 162/176/81 75/137/81 15/136/81 +f 162/176/82 44/175/82 75/137/82 +f 44/175/83 2/4/83 75/137/83 +f 160/171/84 162/176/84 15/136/84 +f 160/171/85 161/173/85 162/176/85 +f 161/173/86 14/174/86 162/176/86 +f 73/172/87 45/18/87 3/17/87 +f 73/172/88 160/171/88 45/18/88 +f 160/171/89 15/136/89 45/18/89 +f 159/169/90 77/177/90 17/178/90 +f 159/169/91 74/168/91 77/177/91 +f 74/168/92 1/179/92 77/177/92 +f 157/165/93 159/169/93 17/178/93 +f 157/165/94 158/166/94 159/169/94 +f 158/166/95 14/167/95 159/169/95 +f 76/142/96 47/180/96 6/26/96 +f 76/142/97 157/165/97 47/180/97 +f 157/165/98 17/178/98 47/180/98 +f 156/164/99 79/132/99 19/131/99 +f 156/164/100 73/163/100 79/132/100 +f 73/163/101 3/181/101 79/132/101 +f 154/159/102 156/164/102 19/131/102 +f 154/159/103 155/161/103 156/164/103 +f 155/161/104 13/162/104 156/164/104 +f 78/160/105 49/21/105 4/20/105 +f 78/160/106 154/159/106 49/21/106 +f 154/159/107 19/131/107 49/21/107 +f 153/157/108 81/127/108 21/126/108 +f 153/157/109 78/156/109 81/127/109 +f 78/156/110 4/20/110 81/127/110 +f 151/152/111 153/157/111 21/126/111 +f 151/152/112 152/154/112 153/157/112 +f 152/154/113 18/155/113 153/157/113 +f 80/153/114 51/24/114 5/23/114 +f 80/153/115 151/152/115 51/24/115 +f 151/152/116 21/126/116 51/24/116 +f 150/150/117 82/122/117 22/121/117 +f 150/150/118 80/149/118 82/122/118 +f 80/149/119 5/23/119 82/122/119 +f 148/145/120 150/150/120 22/121/120 +f 148/145/121 149/147/121 150/150/121 +f 149/147/122 20/148/122 150/150/122 +f 47/146/123 52/27/123 6/26/123 +f 47/146/124 148/145/124 52/27/124 +f 148/145/125 22/121/125 52/27/125 +f 147/143/126 84/33/126 24/84/126 +f 147/143/127 76/142/127 84/33/127 +f 76/142/128 6/26/128 84/33/128 +f 145/139/129 147/143/129 24/84/129 +f 145/139/130 146/140/130 147/143/130 +f 146/140/131 16/141/131 147/143/131 +f 83/117/132 54/86/132 11/46/132 +f 83/117/133 145/139/133 54/86/133 +f 145/139/134 24/84/134 54/86/134 +f 144/138/135 86/29/135 26/112/135 +f 144/138/136 75/137/136 86/29/136 +f 75/137/137 2/4/137 86/29/137 +f 142/134/138 144/138/138 26/112/138 +f 142/134/139 143/135/139 144/138/139 +f 143/135/140 15/136/140 144/138/140 +f 85/110/141 56/114/141 7/34/141 +f 85/110/142 142/134/142 56/114/142 +f 142/134/143 26/112/143 56/114/143 +f 141/133/144 88/182/144 28/183/144 +f 141/133/145 79/132/145 88/182/145 +f 79/132/146 3/181/146 88/182/146 +f 139/129/147 141/133/147 28/183/147 +f 139/129/148 140/130/148 141/133/148 +f 140/130/149 19/131/149 141/133/149 +f 87/103/150 58/184/150 8/185/150 +f 87/103/151 139/129/151 58/184/151 +f 139/129/152 28/183/152 58/184/152 +f 138/128/153 90/31/153 30/98/153 +f 138/128/154 81/127/154 90/31/154 +f 81/127/155 4/20/155 90/31/155 +f 136/124/156 138/128/156 30/98/156 +f 136/124/157 137/125/157 138/128/157 +f 137/125/158 21/126/158 138/128/158 +f 89/96/159 60/100/159 9/40/159 +f 89/96/160 136/124/160 60/100/160 +f 136/124/161 30/98/161 60/100/161 +f 135/123/162 92/32/162 32/91/162 +f 135/123/163 82/122/163 92/32/163 +f 82/122/164 5/23/164 92/32/164 +f 133/119/165 135/123/165 32/91/165 +f 133/119/166 134/120/166 135/123/166 +f 134/120/167 22/121/167 135/123/167 +f 91/89/168 62/93/168 10/43/168 +f 91/89/169 133/119/169 62/93/169 +f 133/119/170 32/91/170 62/93/170 +f 132/118/171 93/82/171 33/81/171 +f 132/118/172 83/117/172 93/82/172 +f 83/117/173 11/46/173 93/82/173 +f 130/113/174 132/118/174 33/81/174 +f 130/113/175 131/115/175 132/118/175 +f 131/115/176 23/116/176 132/118/176 +f 56/114/177 63/35/177 7/34/177 +f 56/114/178 130/113/178 63/35/178 +f 130/113/179 33/81/179 63/35/179 +f 129/111/180 94/75/180 34/74/180 +f 129/111/181 85/110/181 94/75/181 +f 85/110/182 7/34/182 94/75/182 +f 127/106/183 129/111/183 34/74/183 +f 127/106/184 128/108/184 129/111/184 +f 128/108/185 25/109/185 129/111/185 +f 58/107/186 64/38/186 8/37/186 +f 58/107/187 127/106/187 64/38/187 +f 127/106/188 34/74/188 64/38/188 +f 126/104/189 95/68/189 35/67/189 +f 126/104/190 87/103/190 95/68/190 +f 87/103/191 8/185/191 95/68/191 +f 124/99/192 126/104/192 35/67/192 +f 124/99/193 125/101/193 126/104/193 +f 125/101/194 27/102/194 126/104/194 +f 60/100/195 65/41/195 9/40/195 +f 60/100/196 124/99/196 65/41/196 +f 124/99/197 35/67/197 65/41/197 +f 123/97/198 96/61/198 36/60/198 +f 123/97/199 89/96/199 96/61/199 +f 89/96/200 9/40/200 96/61/200 +f 121/92/201 123/97/201 36/60/201 +f 121/92/202 122/94/202 123/97/202 +f 122/94/203 29/95/203 123/97/203 +f 62/93/204 66/44/204 10/43/204 +f 62/93/205 121/92/205 66/44/205 +f 121/92/206 36/60/206 66/44/206 +f 120/90/207 97/54/207 37/53/207 +f 120/90/208 91/89/208 97/54/208 +f 91/89/209 10/43/209 97/54/209 +f 118/85/210 120/90/210 37/53/210 +f 118/85/211 119/87/211 120/90/211 +f 119/87/212 31/88/212 120/90/212 +f 54/86/213 67/47/213 11/46/213 +f 54/86/214 118/85/214 67/47/214 +f 118/85/215 37/53/215 67/47/215 +f 117/83/216 99/186/216 39/187/216 +f 117/83/217 93/82/217 99/186/217 +f 93/82/218 11/46/218 99/186/218 +f 115/78/219 117/83/219 39/187/219 +f 115/78/220 116/80/220 117/83/220 +f 116/80/221 33/81/221 117/83/221 +f 98/79/222 69/188/222 12/189/222 +f 98/79/223 115/78/223 69/188/223 +f 115/78/224 39/187/224 69/188/224 +f 114/76/225 68/190/225 38/191/225 +f 114/76/226 94/75/226 68/190/226 +f 94/75/227 7/34/227 68/190/227 +f 112/71/228 114/76/228 38/191/228 +f 112/71/229 113/73/229 114/76/229 +f 113/73/230 34/74/230 114/76/230 +f 100/72/231 98/192/231 12/193/231 +f 100/72/232 112/71/232 98/192/232 +f 112/71/233 38/191/233 98/192/233 +f 111/69/234 70/194/234 40/195/234 +f 111/69/235 95/68/235 70/194/235 +f 95/68/236 8/185/236 70/194/236 +f 109/64/237 111/69/237 40/195/237 +f 109/64/238 110/66/238 111/69/238 +f 110/66/239 35/67/239 111/69/239 +f 101/65/240 100/196/240 12/197/240 +f 101/65/241 109/64/241 100/196/241 +f 109/64/242 40/195/242 100/196/242 +f 108/62/243 71/198/243 41/199/243 +f 108/62/244 96/61/244 71/198/244 +f 96/61/245 9/40/245 71/198/245 +f 106/57/246 108/62/246 41/199/246 +f 106/57/247 107/59/247 108/62/247 +f 107/59/248 36/60/248 108/62/248 +f 102/58/249 101/200/249 12/201/249 +f 102/58/250 106/57/250 101/200/250 +f 106/57/251 41/199/251 101/200/251 +f 105/55/252 72/202/252 42/203/252 +f 105/55/253 97/54/253 72/202/253 +f 97/54/254 10/43/254 72/202/254 +f 103/50/255 105/55/255 42/203/255 +f 103/50/256 104/52/256 105/55/256 +f 104/52/257 37/53/257 105/55/257 +f 69/51/258 102/204/258 12/205/258 +f 69/51/259 103/50/259 102/204/259 +f 103/50/260 42/203/260 102/204/260 +f 99/48/261 104/52/261 39/49/261 +f 99/48/262 67/47/262 104/52/262 +f 67/47/263 37/53/263 104/52/263 +f 72/45/264 107/59/264 42/56/264 +f 72/45/265 66/44/265 107/59/265 +f 66/44/266 36/60/266 107/59/266 +f 71/42/267 110/66/267 41/63/267 +f 71/42/268 65/41/268 110/66/268 +f 65/41/269 35/67/269 110/66/269 +f 70/39/270 113/73/270 40/70/270 +f 70/39/271 64/38/271 113/73/271 +f 64/38/272 34/74/272 113/73/272 +f 68/36/273 116/80/273 38/77/273 +f 68/36/274 63/35/274 116/80/274 +f 63/35/275 33/81/275 116/80/275 +f 84/33/276 119/87/276 24/84/276 +f 84/33/277 61/28/277 119/87/277 +f 61/28/278 31/88/278 119/87/278 +f 92/32/279 122/94/279 32/91/279 +f 92/32/280 59/25/280 122/94/280 +f 59/25/281 29/95/281 122/94/281 +f 90/31/282 125/101/282 30/98/282 +f 90/31/283 57/22/283 125/101/283 +f 57/22/284 27/102/284 125/101/284 +f 88/30/285 128/108/285 28/105/285 +f 88/30/286 55/19/286 128/108/286 +f 55/19/287 25/109/287 128/108/287 +f 86/29/288 131/115/288 26/112/288 +f 86/29/289 53/16/289 131/115/289 +f 53/16/290 23/116/290 131/115/290 +f 61/28/291 134/120/291 31/88/291 +f 61/28/292 52/27/292 134/120/292 +f 52/27/293 22/121/293 134/120/293 +f 59/25/294 137/125/294 29/95/294 +f 59/25/295 51/24/295 137/125/295 +f 51/24/296 21/126/296 137/125/296 +f 57/22/297 140/130/297 27/102/297 +f 57/22/298 49/21/298 140/130/298 +f 49/21/299 19/131/299 140/130/299 +f 55/19/300 143/135/300 25/109/300 +f 55/19/301 45/18/301 143/135/301 +f 45/18/302 15/136/302 143/135/302 +f 53/16/303 146/140/303 23/116/303 +f 53/16/304 46/6/304 146/140/304 +f 46/6/305 16/141/305 146/140/305 +f 77/15/306 149/147/306 17/144/306 +f 77/15/307 50/14/307 149/147/307 +f 50/14/308 20/148/308 149/147/308 +f 50/12/309 152/154/309 20/151/309 +f 50/12/310 48/11/310 152/154/310 +f 48/11/311 18/155/311 152/154/311 +f 48/9/312 155/161/312 18/158/312 +f 48/9/313 43/8/313 155/161/313 +f 43/8/314 13/162/314 155/161/314 +f 46/6/315 158/166/315 16/141/315 +f 46/6/316 44/5/316 158/166/316 +f 44/5/317 14/167/317 158/166/317 +f 43/3/318 161/173/318 13/170/318 +f 43/3/319 74/2/319 161/173/319 +f 74/2/320 14/174/320 161/173/320 diff --git a/assets/objects/fox/fox.mtl b/assets/objects/fox/fox.mtl new file mode 100644 index 0000000..dabe9a1 --- /dev/null +++ b/assets/objects/fox/fox.mtl @@ -0,0 +1,12 @@ +# Blender MTL File: 'None' +# Material Count: 1 + +newmtl fox_material +Ns 96.078431 +Ka 0.000000 0.000000 0.000000 +Kd 1.000000 1.000000 1.000000 +Ks 0.089804 0.089804 0.089804 +Ni 1.000000 +d 1.000000 +illum 2 +map_Kd texture.png diff --git a/assets/objects/fox/fox.obj b/assets/objects/fox/fox.obj new file mode 100644 index 0000000..0ebf4eb --- /dev/null +++ b/assets/objects/fox/fox.obj @@ -0,0 +1,1772 @@ +# Blender v2.74 (sub 0) OBJ File: '' +# www.blender.org +mtllib fox.mtl +o fox1 +v 10.013863 57.761101 8.092894 +v 11.597156 30.546070 -26.744658 +v 11.532140 49.646450 -24.654264 +v 7.041744 42.900967 -37.667263 +v 10.698391 49.273220 -37.793137 +v 4.212160 43.850330 -40.912064 +v 9.038975 16.989401 15.505488 +v 11.207468 53.822937 21.917948 +v 10.067627 60.659023 22.694967 +v 6.766037 37.404408 27.425133 +v 7.787885 66.506470 32.700138 +v 4.684775 72.120506 41.261551 +v 10.391252 64.281273 40.747532 +v 6.704249 53.417492 52.455326 +v 4.759357 69.991417 51.111191 +v 9.525023 66.221077 48.920918 +v 2.446671 62.239990 57.674969 +v 5.348628 57.736511 58.438560 +v 1.544795 55.042629 66.616386 +v 3.744807 52.667049 61.826649 +v 10.111939 35.768944 10.992324 +v 9.993451 37.712261 -16.556917 +v 10.013863 42.553417 26.717955 +v 9.988014 56.955791 42.201694 +v 10.013863 58.609661 51.223545 +v 12.592718 78.907196 50.617199 +v 5.973053 34.281334 -44.943275 +v 7.032498 48.605991 -40.948818 +v 9.982605 58.756222 -24.037142 +v 5.027300 32.852188 11.318334 +v 2.056373 35.214417 -23.045122 +v 6.829890 34.808849 -16.536997 +v 9.327534 56.691536 -37.719746 +v 3.520886 42.379272 -37.013641 +v 2.183788 35.781075 24.601305 +v 8.293067 52.386982 43.218887 +v 4.904160 52.507389 57.364223 +v 3.009861 59.059044 61.444351 +v 5.543530 52.101986 -41.486565 +v 7.071897 32.333771 -16.991381 +v 9.109836 27.907665 -34.265007 +v 4.500137 27.594797 -34.178272 +v 9.183167 17.618965 -36.244965 +v 6.974576 28.072906 -36.530643 +v 9.315205 32.477558 -18.120550 +v 3.702704 34.358364 -16.706863 +v 9.331923 7.311107 -34.947582 +v 7.013714 16.314199 -40.327499 +v 7.778813 20.654619 -30.463177 +v 4.783840 15.923059 -38.308228 +v 9.366554 3.212086 -32.988701 +v 8.628613 15.798697 -38.807072 +v 7.649887 16.026573 -33.310181 +v 4.976735 17.745190 -33.997730 +v 9.313169 -0.102413 -31.925713 +v 6.951199 6.461366 -32.434643 +v 6.932008 0.104527 -34.389244 +v 5.151371 6.549992 -33.481785 +v 4.537588 4.365971 -33.920586 +v 7.941847 0.282303 -27.764814 +v 5.585605 0.235170 -27.750130 +v 4.476759 -0.121749 -31.956766 +v 9.328464 27.981525 13.414048 +v 4.493071 28.916027 13.392735 +v 8.002938 7.590978 15.186169 +v 10.433646 28.916027 16.023142 +v 4.500369 27.181681 20.904129 +v 9.233382 24.872164 19.955320 +v 5.920657 17.709198 14.549994 +v 3.621434 25.564863 16.400618 +v 8.838432 5.132270 16.926331 +v 7.118914 26.678217 22.674995 +v 4.654186 6.348670 17.741123 +v 8.701713 -0.044660 17.206516 +v 6.961725 5.765913 20.814400 +v 8.523355 5.926096 18.672106 +v 5.668706 5.087811 16.250120 +v 4.907765 -0.059867 17.182732 +v 7.095158 0.225407 25.209337 +v 5.185275 0.797058 23.492233 +v 8.421673 0.566217 23.332426 +v 5.704151 37.406715 -66.230438 +v 8.622420 25.133497 -59.199596 +v 7.795183 34.607143 -64.652672 +v 6.508358 21.221992 -56.929855 +v 4.769795 23.995514 -78.082939 +v 6.403100 17.834827 -72.839455 +v 3.900368 15.183629 -69.952042 +v 2.598336 18.470301 -87.441994 +v 2.936006 14.774080 -86.007751 +v -10.013863 57.761101 8.092894 +v -11.597156 30.546070 -26.744658 +v 0.000000 64.694885 -25.604443 +v 0.000000 35.722736 -25.604439 +v 0.000000 32.053509 15.642671 +v -11.532140 49.646450 -24.654264 +v -7.041744 42.900967 -37.667263 +v 0.000000 61.317280 -37.667263 +v -10.698361 49.273220 -37.793137 +v -4.412906 43.850330 -40.912064 +v -0.100373 56.235497 -40.874062 +v -9.038975 16.989401 15.505488 +v -11.207468 53.822937 21.917948 +v -10.067656 60.659023 22.694967 +v 0.000000 66.905251 22.630356 +v -6.766067 37.404408 27.425133 +v -7.787885 66.506470 32.700138 +v 0.000000 71.519196 32.146744 +v 0.000000 36.583881 28.002483 +v -4.684804 72.120506 41.261551 +v -10.391252 64.281273 40.747532 +v 0.000000 73.626488 41.172459 +v 0.000000 48.425144 43.116306 +v -6.704249 53.417492 52.455326 +v -4.759357 69.991417 51.111191 +v -9.525023 66.221077 48.920918 +v 0.000000 51.896893 52.404381 +v -2.446671 62.239990 57.674969 +v -5.348628 57.736511 58.438560 +v 0.000000 56.019730 66.624329 +v -1.544824 55.042629 66.616386 +v 0.000000 50.609543 59.065018 +v -3.744837 52.667049 61.826649 +v 0.000000 61.559505 58.601181 +v -10.111939 35.768944 10.992324 +v -9.993451 37.712261 -16.556917 +v -10.013863 42.553417 26.717955 +v -9.988014 56.955791 42.201694 +v -10.013863 58.609661 51.223545 +v 0.000000 53.720505 66.624855 +v -12.592718 78.907196 50.617199 +v 0.000000 32.943771 -43.742401 +v -5.973024 34.281334 -44.943275 +v -7.233244 48.605991 -40.948818 +v 0.000000 51.503872 -48.483589 +v -9.982605 58.756222 -24.037142 +v 0.000000 65.034004 -14.840280 +v 0.000000 32.890743 -11.251088 +v -5.027300 32.852188 11.318334 +v -2.056373 35.214417 -23.045122 +v 0.000000 64.057281 8.092893 +v -6.829890 34.808849 -16.536997 +v -9.327534 56.691536 -37.719746 +v -3.520857 42.379272 -37.013641 +v -0.100373 42.954819 -40.809715 +v 0.000000 66.228600 16.033606 +v -2.183788 35.781075 24.601305 +v -8.293067 52.386982 43.218887 +v 0.000000 71.232178 51.185360 +v -4.904160 52.507389 57.364223 +v -3.009861 59.059044 61.444351 +v -5.744277 52.101986 -41.486565 +v -7.071897 32.333771 -16.991381 +v -9.109836 27.907665 -34.265007 +v -4.500137 27.594797 -34.178272 +v -9.183167 17.618965 -36.244965 +v -6.974547 28.072906 -36.530643 +v -9.315205 32.477558 -18.120550 +v -3.702704 34.358364 -16.706863 +v -9.331895 7.311107 -34.947582 +v -7.013685 16.314199 -40.327499 +v -7.778813 20.654619 -30.463177 +v -4.783840 15.923059 -38.308228 +v -9.366526 3.212086 -32.988701 +v -8.628613 15.798697 -38.807072 +v -7.649887 16.026573 -33.310181 +v -4.976707 17.745190 -33.997730 +v -9.313140 -0.102413 -31.925713 +v -6.951199 6.461366 -32.434643 +v -6.932008 0.104527 -34.389244 +v -5.151371 6.549992 -33.481785 +v -4.537588 4.365971 -33.920586 +v -7.941847 0.282303 -27.764814 +v -5.585605 0.235170 -27.750130 +v -4.476759 -0.121749 -31.956766 +v -9.328464 27.981525 13.414048 +v -4.493071 28.916027 13.392735 +v -8.002967 7.590978 15.186169 +v -10.433646 28.916027 16.023142 +v -4.500369 27.181681 20.904129 +v -9.233382 24.872164 19.955320 +v -5.920657 17.709198 14.549994 +v -3.621434 25.564863 16.400618 +v -8.838432 5.132270 16.926331 +v -7.118914 26.678217 22.674995 +v -4.654215 6.348670 17.741123 +v -8.701713 -0.044660 17.206516 +v -6.961725 5.765913 20.814400 +v -8.523355 5.926096 18.672106 +v -5.668736 5.087811 16.250120 +v -4.907765 -0.059867 17.182732 +v -7.095158 0.225407 25.209337 +v -5.185275 0.797058 23.492233 +v -8.421673 0.566217 23.332426 +v -5.704151 37.406715 -66.230438 +v 0.000000 20.149696 -56.504898 +v -8.622420 25.133497 -59.199596 +v -7.795183 34.607143 -64.652672 +v -6.508358 21.221992 -56.929855 +v 0.000000 14.296408 -69.414406 +v -4.769795 23.995514 -78.082939 +v -6.403071 17.834827 -72.839455 +v 0.000000 38.177895 -68.047012 +v -3.900368 15.183629 -69.952042 +v -2.598307 18.470301 -87.441994 +v 0.000000 13.995141 -85.688431 +v 0.000000 20.144981 -88.095001 +v -2.936006 14.774080 -86.007751 +v 11.299932 52.633427 8.653613 +v -11.299932 52.633427 8.653613 +v -8.267072 16.744806 20.320761 +v 4.574748 17.109808 19.374949 +v -4.574748 17.109808 19.374949 +v 4.424944 17.528223 16.341564 +v 5.943046 16.979311 20.321110 +v -8.933396 16.867134 19.413126 +v 7.044477 16.776154 21.793997 +v 4.057994 17.441895 16.967270 +v -7.044477 16.776154 21.793997 +v -4.057994 17.441925 16.967270 +v 8.267072 16.744806 20.320761 +v 8.933396 16.867134 19.413126 +v -4.424944 17.528223 16.341564 +v -5.943046 16.979311 20.321110 +v -9.442619 29.611984 21.768175 +v -3.086478 29.366341 19.452118 +v 1.704136 29.000147 15.999357 +v 7.014325 29.857479 24.082954 +v -7.014325 29.857479 24.082954 +v -5.056290 29.690054 22.504198 +v 3.086478 29.366341 19.452118 +v 3.840238 29.632074 21.957642 +v 9.442591 29.611984 21.768175 +v 5.056290 29.690054 22.504198 +v -1.704136 29.000147 15.999357 +v -3.840238 29.632074 21.957642 +v -11.253933 53.225349 15.254115 +v -10.040555 59.199276 15.339456 +v 11.253933 53.225349 15.254115 +v -10.086759 37.510738 15.029643 +v 10.040555 59.199276 15.339456 +v 10.086759 37.510738 15.029615 +v -7.001473 19.988350 -39.141106 +v -8.753324 18.937077 -37.629868 +v 8.156289 19.303762 -38.157001 +v 4.432271 18.409653 -36.340858 +v 7.001473 19.988350 -39.141106 +v 4.715858 18.720396 -37.318424 +v -8.156260 19.303762 -38.157001 +v -6.286764 19.576534 -38.549133 +v 6.286793 19.576534 -38.549133 +v -4.715858 18.720396 -37.318424 +v 8.753352 18.937048 -37.629868 +v 4.649679 18.210796 -35.627605 +v -4.432271 18.409653 -36.340858 +v -4.649679 18.210796 -35.627605 +v -6.470122 45.910332 -49.685364 +v 7.595193 40.298759 -47.408001 +v -7.724875 40.298759 -47.408001 +v 6.340411 45.910332 -49.685364 +v -10.021249 37.256516 -10.095922 +v -9.995225 58.354156 -11.054910 +v 5.433794 34.245609 -9.959058 +v 6.404525 34.347115 -9.963682 +v -5.433765 34.245609 -9.959058 +v -10.964531 44.099869 -10.406987 +v 8.836920 36.580421 -10.065188 +v -8.836920 36.580421 -10.065188 +v 10.964531 44.099869 -10.406987 +v 0.000000 32.848553 -9.895555 +v -6.404525 34.347115 -9.963682 +v 9.995225 58.354156 -11.054910 +v 10.021249 37.256516 -10.095922 +v 5.984772 60.879215 -11.169677 +v 0.000000 64.885422 -11.351786 +v -5.984772 60.879215 -11.169677 +v 11.434965 50.896404 -10.715930 +v -11.434965 50.896404 -10.715930 +v -0.940462 33.953442 -16.644930 +v 0.000000 33.955036 -16.645161 +v 0.940462 33.953442 -16.644899 +v -9.998714 51.307644 35.496368 +v 7.016389 46.160694 36.028797 +v -10.693941 60.403057 33.765018 +v 8.642366 49.095310 35.725204 +v 0.000000 43.622169 36.291420 +v 10.693913 60.403057 33.765018 +v -7.016389 46.160694 36.028797 +v 9.998714 51.307644 35.496368 +v -8.642366 49.095310 35.725204 +vt 0.528712 0.678552 +vt 0.545417 0.676032 +vt 0.617856 0.722002 +vt 0.094965 0.707402 +vt 0.107916 0.742822 +vt 0.079970 0.742033 +vt 0.078630 0.770740 +vt 0.060751 0.778222 +vt 0.030655 0.765679 +vt 0.058227 0.746377 +vt 0.037090 0.758802 +vt 0.121276 0.770411 +vt 0.158639 0.734095 +vt 0.164588 0.760413 +vt 0.227825 0.173587 +vt 0.222156 0.176345 +vt 0.216399 0.163900 +vt 0.141088 0.940416 +vt 0.164472 0.919949 +vt 0.181342 0.980980 +vt 0.058967 0.720915 +vt 0.029251 0.751702 +vt 0.145086 0.685012 +vt 0.582748 0.742117 +vt 0.589403 0.726294 +vt 0.489541 0.684702 +vt 0.461222 0.668184 +vt 0.470026 0.639866 +vt 0.476945 0.642148 +vt 0.501577 0.658066 +vt 0.503671 0.653646 +vt 0.403832 0.230638 +vt 0.330192 0.244866 +vt 0.361770 0.177501 +vt 0.209544 0.177029 +vt 0.191780 0.180079 +vt 0.191077 0.159480 +vt 0.887060 0.678035 +vt 0.893335 0.658271 +vt 0.956672 0.715822 +vt 0.889693 0.699851 +vt 0.826098 0.790013 +vt 0.898001 0.737699 +vt 0.954315 0.736360 +vt 0.459861 0.672979 +vt 0.456221 0.689270 +vt 0.354548 0.637952 +vt 0.233251 0.626930 +vt 0.255912 0.627086 +vt 0.254498 0.657970 +vt 0.200424 0.699994 +vt 0.201686 0.718671 +vt 0.496252 0.671172 +vt 0.294471 0.588294 +vt 0.605231 0.742480 +vt 0.236315 0.205363 +vt 0.955617 0.752118 +vt 0.963504 0.701904 +vt 0.972489 0.714555 +vt 0.965698 0.748185 +vt 0.126418 0.353591 +vt 0.033828 0.389113 +vt 0.110013 0.349464 +vt 0.184359 0.661361 +vt 0.555442 0.421821 +vt 0.567227 0.457619 +vt 0.539361 0.455879 +vt 0.565967 0.486291 +vt 0.614138 0.485591 +vt 0.583073 0.495348 +vt 0.588459 0.463903 +vt 0.608360 0.478171 +vt 0.523582 0.482112 +vt 0.489702 0.442616 +vt 0.481408 0.468255 +vt 0.882624 0.489618 +vt 0.893670 0.479500 +vt 0.888394 0.492156 +vt 0.107088 0.923865 +vt 0.077319 0.972646 +vt 0.079601 0.909367 +vt 0.590024 0.438513 +vt 0.616797 0.471817 +vt 0.507616 0.395025 +vt 0.066140 0.411933 +vt 0.061105 0.395418 +vt 0.181402 0.322194 +vt 0.188498 0.320565 +vt 0.194635 0.349561 +vt 0.164903 0.363389 +vt 0.153736 0.331142 +vt 0.155406 0.335739 +vt 0.885927 0.237139 +vt 0.922931 0.180364 +vt 0.960563 0.244543 +vt 0.901023 0.492357 +vt 0.918805 0.474114 +vt 0.918891 0.494724 +vt 0.756556 0.859100 +vt 0.686639 0.896180 +vt 0.750468 0.839298 +vt 0.753721 0.880875 +vt 0.816399 0.971673 +vt 0.688788 0.916718 +vt 0.745046 0.918624 +vt 0.195548 0.354461 +vt 0.303588 0.329252 +vt 0.197670 0.371018 +vt 0.425179 0.329291 +vt 0.401242 0.358242 +vt 0.402627 0.327397 +vt 0.451225 0.404925 +vt 0.448282 0.423386 +vt 0.159481 0.349287 +vt 0.367783 0.285332 +vt 0.044268 0.410798 +vt 0.875357 0.521695 +vt 0.687323 0.932457 +vt 0.679948 0.882209 +vt 0.670852 0.894756 +vt 0.677299 0.928417 +vt 0.470694 0.367953 +vt 0.261498 0.200680 +vt 0.850013 0.517980 +vt 0.191854 0.196313 +vt 0.919439 0.510949 +vt 0.167983 0.383070 +vt 0.322004 0.299049 +vt 0.484655 0.703995 +vt 0.338971 0.606166 +vt 0.694967 0.708155 +vt 0.687308 0.686759 +vt 0.733904 0.659841 +vt 0.743140 0.689921 +vt 0.454811 0.696028 +vt 0.349187 0.668715 +vt 0.464885 0.868832 +vt 0.445683 0.867267 +vt 0.446850 0.828294 +vt 0.512752 0.807630 +vt 0.573536 0.801671 +vt 0.574827 0.772128 +vt 0.597174 0.769540 +vt 0.518630 0.764153 +vt 0.129255 0.226788 +vt 0.107943 0.243335 +vt 0.105387 0.204171 +vt 0.265346 0.794242 +vt 0.261257 0.857180 +vt 0.206315 0.865822 +vt 0.274964 0.757719 +vt 0.207668 0.818598 +vt 0.169534 0.797256 +vt 0.160463 0.841236 +vt 0.132463 0.803077 +vt 0.158570 0.865866 +vt 0.107066 0.849295 +vt 0.198055 0.897083 +vt 0.228311 0.932675 +vt 0.117898 0.826745 +vt 0.075938 0.797983 +vt 0.062416 0.802549 +vt 0.203084 0.732971 +vt 0.238482 0.980079 +vt 0.684233 0.734565 +vt 0.545660 0.274739 +vt 0.491614 0.231528 +vt 0.492100 0.206163 +vt 0.820788 0.673255 +vt 0.346364 0.791063 +vt 0.340818 0.855404 +vt 0.296757 0.858051 +vt 0.525135 0.867591 +vt 0.589525 0.846030 +vt 0.612526 0.823364 +vt 0.606070 0.253249 +vt 0.528355 0.185143 +vt 0.477927 0.216509 +vt 0.480304 0.204784 +vt 0.606070 0.218259 +vt 0.558271 0.158887 +vt 0.313322 0.239843 +vt 0.344915 0.174774 +vt 0.559314 0.111422 +vt 0.554965 0.110993 +vt 0.554287 0.094822 +vt 0.359912 0.116928 +vt 0.378622 0.130334 +vt 0.369783 0.130534 +vt 0.445649 0.220169 +vt 0.435696 0.234714 +vt 0.350633 0.133004 +vt 0.345899 0.133948 +vt 0.345852 0.115924 +vt 0.365978 0.130731 +vt 0.360811 0.130813 +vt 0.522147 0.131422 +vt 0.091248 0.206596 +vt 0.102837 0.148897 +vt 0.174763 0.175542 +vt 0.176439 0.119323 +vt 0.810900 0.559064 +vt 0.799411 0.585425 +vt 0.780784 0.522766 +vt 0.796704 0.522933 +vt 0.161937 0.191338 +vt 0.129255 0.206013 +vt 0.118938 0.152772 +vt 0.706700 0.788392 +vt 0.675606 0.752680 +vt 0.728737 0.750681 +vt 0.819599 0.695726 +vt 0.735962 0.721135 +vt 0.958906 0.917413 +vt 0.967307 0.935596 +vt 0.914292 0.933128 +vt 0.907370 0.903510 +vt 0.817102 0.743946 +vt 0.822651 0.642472 +vt 0.817250 0.761740 +vt 0.449313 0.230864 +vt 0.601052 0.788598 +vt 0.206710 0.782708 +vt 0.239101 0.170024 +vt 0.450842 0.730596 +vt 0.659328 0.786092 +vt 0.305866 0.792570 +vt 0.448023 0.803427 +vt 0.572909 0.153798 +vt 0.075272 0.183502 +vt 0.948191 0.891060 +vt 0.909806 0.841985 +vt 0.955817 0.869697 +vt 0.900481 0.872041 +vt 0.306104 0.360354 +vt 0.198454 0.377878 +vt 0.130586 0.483956 +vt 0.194453 0.510366 +vt 0.192163 0.549249 +vt 0.172928 0.549106 +vt 0.335518 0.454506 +vt 0.328815 0.368366 +vt 0.394715 0.391646 +vt 0.371866 0.455602 +vt 0.070232 0.472800 +vt 0.049873 0.438547 +vt 0.071397 0.442914 +vt 0.128547 0.439986 +vt 0.711391 0.527718 +vt 0.740089 0.511668 +vt 0.727977 0.548999 +vt 0.378134 0.492800 +vt 0.430386 0.569327 +vt 0.376521 0.555772 +vt 0.433304 0.522235 +vt 0.473160 0.504452 +vt 0.478210 0.549014 +vt 0.257980 0.691873 +vt 0.509505 0.513590 +vt 0.530590 0.561852 +vt 0.477868 0.573681 +vt 0.041636 0.894897 +vt 0.020443 0.936527 +vt 0.566183 0.513630 +vt 0.521854 0.538445 +vt 0.579220 0.519392 +vt 0.445599 0.437483 +vt 0.021523 0.984997 +vt 0.746856 0.276283 +vt 0.800415 0.207707 +vt 0.800901 0.233073 +vt 0.822843 0.854894 +vt 0.297821 0.482325 +vt 0.341134 0.553435 +vt 0.297547 0.546833 +vt 0.113131 0.542650 +vt 0.050767 0.515915 +vt 0.030339 0.490961 +vt 0.686446 0.254794 +vt 0.764161 0.186687 +vt 0.812212 0.206328 +vt 0.814588 0.218053 +vt 0.686446 0.219804 +vt 0.734244 0.160432 +vt 0.939464 0.176099 +vt 0.976901 0.237992 +vt 0.733201 0.112967 +vt 0.738228 0.096366 +vt 0.737550 0.112538 +vt 0.843325 0.230556 +vt 0.901818 0.134943 +vt 0.854572 0.244125 +vt 0.929933 0.135032 +vt 0.933125 0.117584 +vt 0.934735 0.135537 +vt 0.914445 0.134177 +vt 0.919217 0.119876 +vt 0.919597 0.133785 +vt 0.770368 0.132966 +vt 0.910637 0.134331 +vt 0.756159 0.458720 +vt 0.753197 0.517497 +vt 0.931893 0.433425 +vt 0.935721 0.489538 +vt 0.949143 0.504831 +vt 0.716502 0.507581 +vt 0.739600 0.458514 +vt 0.935775 0.971673 +vt 0.825945 0.925705 +vt 0.823869 0.877375 +vt 0.821204 0.824109 +vt 0.825583 0.943511 +vt 0.840659 0.241543 +vt 0.044452 0.457230 +vt 0.437498 0.486624 +vt 0.871220 0.486489 +vt 0.199241 0.412673 +vt 0.983036 0.969183 +vt 0.337977 0.487479 +vt 0.195500 0.485498 +vt 0.719606 0.155342 +vt 0.774364 0.499043 +vt 0.197893 0.446808 +vt 0.299584 0.453459 +vt 0.449099 0.764695 +vt 0.347218 0.762134 +vt 0.746572 0.558030 +vt 0.025092 0.232690 +vt 0.047741 0.201162 +vt 0.063212 0.204916 +vt 0.029743 0.261067 +vt 0.879406 0.472831 +vt 0.230398 0.156689 +vt 0.057058 0.187791 +vt 0.790962 0.507681 +vt 0.087698 0.247513 +vt 0.311303 0.759920 +vt 0.325812 0.674639 +vt 0.746839 0.109278 +vt 0.545676 0.107734 +vt 0.527575 0.105228 +vt 0.384209 0.064253 +vt 0.523468 0.060687 +vt 0.516306 0.024161 +vt 0.509498 0.043080 +vt 0.377815 0.042511 +vt 0.392645 0.120654 +vt 0.386601 0.074745 +vt 0.565198 0.093245 +vt 0.412233 0.045121 +vt 0.393127 0.043606 +vt 0.403998 0.027603 +vt 0.379146 0.027357 +vt 0.500701 0.028848 +vt 0.480938 0.035678 +vt 0.506053 0.063430 +vt 0.396386 0.076494 +vt 0.111895 0.105923 +vt 0.180373 0.058035 +vt 0.187504 0.118224 +vt 0.079496 0.143954 +vt 0.070595 0.142289 +vt 0.083246 0.091876 +vt 0.209949 0.112957 +vt 0.202317 0.114970 +vt 0.189538 0.063254 +vt 0.190919 0.117662 +vt 0.084597 0.145553 +vt 0.211166 0.032420 +vt 0.182562 0.033767 +vt 0.128038 0.066367 +vt 0.108497 0.065600 +vt 0.110974 0.033932 +vt 0.122985 0.093142 +vt 0.105273 0.091985 +vt 0.096120 0.094065 +vt 0.068696 0.060900 +vt 0.207766 0.059133 +vt 0.079365 0.063196 +vt 0.567515 0.112150 +vt 0.403290 0.144612 +vt 0.397097 0.019762 +vt 0.420500 0.051549 +vt 0.218527 0.110646 +vt 0.128594 0.033521 +vt 0.118420 0.024553 +vt 0.223029 0.030793 +vt 0.764940 0.106772 +vt 0.890184 0.069656 +vt 0.769046 0.062232 +vt 0.776209 0.025706 +vt 0.783016 0.044624 +vt 0.894554 0.047419 +vt 0.886964 0.126592 +vt 0.888766 0.080323 +vt 0.727317 0.094790 +vt 0.860521 0.053179 +vt 0.879408 0.049915 +vt 0.867113 0.034979 +vt 0.891837 0.032451 +vt 0.791813 0.030392 +vt 0.811577 0.037222 +vt 0.786461 0.064974 +vt 0.879184 0.082964 +vt 0.757952 0.414838 +vt 0.920795 0.432751 +vt 0.925615 0.372333 +vt 0.779998 0.459671 +vt 0.789176 0.408271 +vt 0.789036 0.460247 +vt 0.898164 0.428347 +vt 0.916656 0.377899 +vt 0.905867 0.430066 +vt 0.917360 0.432320 +vt 0.776159 0.407225 +vt 0.774662 0.459966 +vt 0.893863 0.347916 +vt 0.922498 0.348167 +vt 0.752037 0.372526 +vt 0.776556 0.345287 +vt 0.771166 0.376590 +vt 0.750347 0.399722 +vt 0.767799 0.402957 +vt 0.810900 0.381827 +vt 0.898284 0.374479 +vt 0.799994 0.381427 +vt 0.725000 0.113694 +vt 0.878565 0.151427 +vt 0.873264 0.026537 +vt 0.852880 0.060339 +vt 0.889504 0.426367 +vt 0.759579 0.340553 +vt 0.771646 0.334364 +vt 0.881947 0.346745 +vn 0.299300 -0.860900 -0.411400 +vn 0.220800 -0.970300 -0.098900 +vn 0.811600 0.155800 0.563000 +vn 0.907500 -0.006400 0.420000 +vn 0.792500 -0.394900 0.464700 +vn 0.940100 -0.335700 0.058800 +vn -0.348700 -0.447900 0.823300 +vn 0.279300 -0.193300 0.940500 +vn 0.398200 -0.907200 0.135900 +vn 0.221800 -0.901700 0.371100 +vn 0.405200 -0.856400 0.320100 +vn 0.098500 -0.965700 -0.240300 +vn 0.248600 -0.968100 -0.030100 +vn -0.001600 -0.981100 -0.193600 +vn -0.984000 -0.094200 -0.151500 +vn -0.827300 -0.417900 0.375500 +vn 0.223300 -0.974700 0.011500 +vn 0.713200 -0.700500 -0.025000 +vn 0.661400 0.568600 -0.489100 +vn 0.964600 0.033000 -0.261600 +vn 0.676100 -0.736800 -0.008000 +vn 0.294300 -0.862500 -0.411600 +vn 0.140600 -0.939600 0.312000 +vn 0.217800 -0.965100 0.145100 +vn 0.299700 -0.936700 -0.181000 +vn 0.474500 0.746400 0.466600 +vn 0.958000 -0.133500 0.253700 +vn 0.540600 -0.628000 0.559800 +vn 0.937300 -0.144800 0.316900 +vn 0.819700 -0.413200 0.396600 +vn 0.847000 -0.492300 0.200600 +vn 0.149300 -0.975600 -0.161100 +vn 0.187500 -0.922300 0.338100 +vn 0.175600 -0.893000 -0.414400 +vn 0.103500 -0.992600 -0.063000 +vn 0.139300 -0.975900 -0.168000 +vn -0.879200 -0.367300 0.303500 +vn 0.543400 0.624200 -0.561400 +vn 0.258200 -0.965900 0.017900 +vn 0.974000 0.001100 -0.226600 +vn -0.000800 -0.364400 -0.931200 +vn -0.005300 -0.362200 -0.932100 +vn -0.295300 -0.863500 -0.408800 +vn 0.271100 -0.678600 0.682700 +vn 0.146100 -0.754100 0.640300 +vn -0.220800 -0.970300 -0.098900 +vn -0.811600 0.155800 0.563000 +vn -0.907500 -0.006400 0.420000 +vn -0.792500 -0.394900 0.464700 +vn -0.940100 -0.335700 0.058800 +vn 0.348700 -0.447900 0.823300 +vn -0.279300 -0.193300 0.940500 +vn -0.398200 -0.907200 0.135900 +vn -0.221800 -0.901700 0.371100 +vn -0.405200 -0.856400 0.320100 +vn -0.099400 -0.966600 -0.236100 +vn -0.248600 -0.968100 -0.030100 +vn 0.001600 -0.981100 -0.193600 +vn 0.984000 -0.094200 -0.151500 +vn 0.827300 -0.417900 0.375500 +vn -0.223300 -0.974700 0.011500 +vn -0.713200 -0.700500 -0.025000 +vn -0.661400 0.568600 -0.489100 +vn -0.964600 0.033000 -0.261600 +vn -0.676100 -0.736800 -0.008000 +vn -0.308600 -0.859100 -0.408300 +vn -0.140600 -0.939600 0.312000 +vn -0.217800 -0.965100 0.145100 +vn -0.299700 -0.936700 -0.181000 +vn -0.474500 0.746400 0.466600 +vn -0.958000 -0.133500 0.253700 +vn -0.540600 -0.628000 0.559800 +vn -0.937300 -0.144800 0.316900 +vn -0.819700 -0.413200 0.396600 +vn -0.847000 -0.492300 0.200600 +vn -0.149300 -0.975600 -0.161100 +vn -0.187500 -0.922300 0.338100 +vn -0.176600 -0.896900 -0.405500 +vn -0.103500 -0.992600 -0.063000 +vn -0.139300 -0.975900 -0.168000 +vn 0.879200 -0.367300 0.303500 +vn -0.543400 0.624100 -0.561400 +vn -0.258200 -0.965900 0.017900 +vn -0.974000 0.001100 -0.226600 +vn 0.000800 -0.364400 -0.931200 +vn 0.005300 -0.362200 -0.932100 +vn -0.146100 -0.754100 0.640300 +vn -0.271100 -0.678600 0.682700 +vn 0.827300 -0.417800 0.375500 +vn -0.859700 -0.451700 0.238500 +vn -0.934800 -0.307100 0.178500 +vn -0.302500 -0.779500 0.548500 +vn -0.345800 -0.738800 0.578400 +vn 0.934800 -0.307100 0.178500 +vn 0.859700 -0.451700 0.238500 +vn 0.345800 -0.738800 0.578400 +vn 0.302500 -0.779500 0.548500 +vn 0.080700 -0.279500 0.956800 +vn 0.257200 -0.334600 0.906600 +vn 0.493500 -0.867400 -0.063300 +vn 0.555200 0.831000 0.035400 +vn 0.634200 0.124700 -0.763100 +vn 0.982800 0.171700 -0.067200 +vn 0.639200 -0.380000 -0.668600 +vn 0.114600 -0.305500 -0.945300 +vn 0.489300 0.784700 -0.380500 +vn 0.979500 0.147800 0.136800 +vn 0.801700 0.589900 -0.096200 +vn 0.993100 -0.032300 0.112900 +vn 0.294600 0.929400 0.222200 +vn 0.540800 0.819100 -0.191200 +vn 0.807400 0.217800 0.548400 +vn 0.516000 0.424400 -0.744000 +vn 0.621100 0.390200 0.679700 +vn 0.145300 0.814200 0.562200 +vn 0.759500 0.548700 0.349500 +vn 0.804500 -0.453600 0.383400 +vn 0.954200 -0.252300 0.161000 +vn -0.738900 0.657400 0.147700 +vn 0.465400 -0.269500 0.843100 +vn 0.991700 -0.128300 -0.000600 +vn 0.286700 -0.641400 0.711600 +vn 0.170300 0.606700 0.776500 +vn 0.518600 0.824800 -0.225500 +vn 0.522800 0.838800 -0.151600 +vn 0.249900 0.513200 -0.821100 +vn 0.997900 0.010400 -0.063600 +vn 0.156200 -0.163600 0.974100 +vn 0.275100 -0.176500 -0.945100 +vn -0.171300 -0.074500 -0.982400 +vn 0.718000 0.219300 -0.660700 +vn -0.967900 -0.213000 0.133400 +vn -0.358900 -0.686100 0.632800 +vn -0.694200 0.219100 -0.685700 +vn -0.963800 0.067900 -0.258000 +vn 0.357900 -0.696200 0.622300 +vn 0.836800 -0.443600 0.320800 +vn -0.934300 -0.292800 0.203200 +vn 0.928300 -0.092900 -0.359900 +vn -0.887500 -0.157800 -0.433000 +vn -0.632500 -0.300900 0.713700 +vn -0.644300 -0.291800 0.706900 +vn -0.590600 -0.312100 -0.744200 +vn -0.015900 -0.104700 -0.994400 +vn 0.528200 0.701500 -0.478400 +vn 0.951600 -0.145800 0.270400 +vn -0.913400 0.359700 -0.190800 +vn -0.977200 0.163400 -0.135800 +vn 0.987400 -0.004800 -0.158100 +vn 0.174300 -0.896800 0.406600 +vn 0.887600 -0.459300 0.035200 +vn 0.815900 0.350000 -0.460300 +vn 0.313400 0.616500 -0.722300 +vn -0.027000 -0.183100 0.982700 +vn 0.514200 0.857200 -0.027000 +vn 0.608800 0.139100 -0.781100 +vn 0.258100 0.476900 -0.840200 +vn 0.980500 0.181900 -0.074400 +vn 0.525600 0.846300 -0.086800 +vn 0.641300 -0.385400 -0.663500 +vn 0.526500 0.780800 -0.336400 +vn 0.899800 0.396800 -0.181400 +vn -0.084100 -0.455600 -0.886200 +vn 0.998100 0.059900 -0.013800 +vn 0.280600 0.846100 -0.453100 +vn 0.130100 0.603300 0.786900 +vn 0.564200 0.477700 0.673400 +vn 0.030000 0.766100 0.642000 +vn 0.926400 -0.193700 -0.323000 +vn -0.570200 -0.348300 0.744100 +vn 0.990500 -0.137200 -0.013900 +vn 0.493700 0.741400 -0.454500 +vn 0.965000 -0.025300 0.261000 +vn 0.894400 -0.282000 0.347100 +vn 0.250000 0.946800 0.202800 +vn 0.558200 0.813400 -0.163500 +vn 0.429800 0.869500 -0.243500 +vn 0.954400 -0.116300 -0.274900 +vn 0.532100 0.846300 0.025700 +vn 0.443400 -0.308800 0.841500 +vn 0.724600 -0.055900 -0.686900 +vn -0.658400 -0.183600 -0.729900 +vn -0.624800 -0.425200 -0.654800 +vn 0.977300 -0.121800 0.173100 +vn 0.831500 0.533100 -0.156200 +vn 0.160500 -0.697100 0.698800 +vn 0.279400 0.793600 -0.540500 +vn 0.967000 0.042400 -0.251400 +vn 0.254000 -0.895900 0.364500 +vn 0.803600 -0.569200 0.173900 +vn -0.081000 -0.281000 0.956300 +vn -0.257800 -0.339100 0.904700 +vn -0.493500 -0.867400 -0.063300 +vn -0.555200 0.831000 0.035400 +vn -0.996500 -0.074600 0.038400 +vn -0.995000 -0.098700 0.015800 +vn -0.654200 0.128300 -0.745400 +vn -0.982800 0.171700 -0.067200 +vn -0.656600 -0.389500 -0.645900 +vn -0.114600 -0.305500 -0.945300 +vn -0.489300 0.784700 -0.380500 +vn -0.979500 0.147800 0.136800 +vn -0.801700 0.589900 -0.096200 +vn 0.995100 -0.061400 0.077200 +vn 0.994500 -0.073400 0.074900 +vn -0.993100 -0.032300 0.112900 +vn -0.294600 0.929400 0.222200 +vn -0.540800 0.819100 -0.191200 +vn -0.807400 0.217800 0.548400 +vn -0.516000 0.424400 -0.744000 +vn -0.621100 0.390200 0.679700 +vn -0.145300 0.814200 0.562200 +vn -0.759500 0.548700 0.349500 +vn -0.804500 -0.453600 0.383400 +vn -0.954200 -0.252300 0.161000 +vn 0.738900 0.657400 0.147700 +vn -0.474500 -0.274900 0.836200 +vn -0.991700 -0.128300 -0.000600 +vn -0.286700 -0.641400 0.711600 +vn -0.170300 0.606700 0.776500 +vn -0.518600 0.824800 -0.225500 +vn -0.522800 0.838800 -0.151600 +vn -0.253200 0.519800 -0.815900 +vn -0.997900 0.010400 -0.063600 +vn -0.156200 -0.163600 0.974100 +vn -0.275100 -0.176500 -0.945100 +vn 0.171300 -0.074500 -0.982400 +vn -0.718000 0.219300 -0.660700 +vn -0.717900 0.219300 -0.660700 +vn 0.358900 -0.686100 0.632800 +vn 0.694200 0.219100 -0.685700 +vn 0.963800 0.067900 -0.258000 +vn -0.357900 -0.696200 0.622300 +vn -0.836800 -0.443600 0.320800 +vn 0.934300 -0.292800 0.203200 +vn -0.928300 -0.092900 -0.359900 +vn 0.887500 -0.157800 -0.433000 +vn 0.590600 -0.312100 -0.744200 +vn 0.015900 -0.104700 -0.994400 +vn -0.518300 0.703900 -0.485700 +vn -0.946600 -0.161200 0.279300 +vn 0.996800 0.078700 -0.014400 +vn 0.978900 0.197100 -0.053700 +vn -0.987400 -0.004800 -0.158100 +vn -0.174300 -0.896800 0.406600 +vn -0.887600 -0.459300 0.035200 +vn -0.815900 0.350000 -0.460300 +vn -0.313400 0.616500 -0.722300 +vn 0.027000 -0.183100 0.982700 +vn -0.514200 0.857200 -0.027000 +vn -0.621600 0.146300 -0.769600 +vn -0.262100 0.481700 -0.836200 +vn -0.980500 0.181900 -0.074400 +vn -0.525600 0.846300 -0.086800 +vn -0.658900 -0.395700 -0.639800 +vn -0.526500 0.780800 -0.336400 +vn -0.899800 0.396800 -0.181400 +vn 0.084100 -0.455600 -0.886200 +vn -0.998100 0.059900 -0.013800 +vn -0.280600 0.846100 -0.453100 +vn -0.130100 0.603300 0.786900 +vn -0.564200 0.477700 0.673400 +vn -0.030000 0.766100 0.642000 +vn -0.926400 -0.193700 -0.323000 +vn 0.570200 -0.348300 0.744100 +vn -0.990500 -0.137200 -0.013900 +vn -0.489700 0.737500 -0.465100 +vn -0.965000 -0.025300 0.261000 +vn -0.894400 -0.282000 0.347100 +vn -0.250000 0.946800 0.202800 +vn -0.558200 0.813400 -0.163500 +vn -0.429800 0.869500 -0.243500 +vn -0.954400 -0.116300 -0.274900 +vn -0.532100 0.846300 0.025700 +vn -0.443400 -0.308800 0.841500 +vn -0.724600 -0.055900 -0.686900 +vn 0.658400 -0.183600 -0.729900 +vn 0.967900 -0.213000 0.133400 +vn 0.624800 -0.425200 -0.654800 +vn -0.977300 -0.121800 0.173100 +vn -0.831500 0.533100 -0.156200 +vn -0.160500 -0.697100 0.698800 +vn -0.279400 0.793600 -0.540500 +vn -0.979100 0.194500 -0.060200 +vn -0.997000 0.075100 -0.020700 +vn -0.967000 0.042400 -0.251300 +vn -0.254000 -0.895900 0.364500 +vn -0.803600 -0.569200 0.173800 +vn -0.934300 -0.292800 0.203100 +vn -0.981800 0.189800 0.004900 +vn -0.970200 0.241700 -0.014900 +vn 0.997600 -0.068500 0.013100 +vn -0.999200 0.039100 -0.010600 +vn -0.997600 -0.068500 0.013100 +vn 0.970200 0.241700 -0.014900 +vn 0.981800 0.189800 0.004900 +vn 0.644300 -0.291800 0.706900 +vn 0.632500 -0.300900 0.713700 +vn -0.976800 -0.112800 0.182200 +vn 0.653700 -0.288400 0.699700 +vn 0.642600 -0.298300 0.705700 +vn -0.642600 -0.298300 0.705700 +vn -0.653700 -0.288400 0.699700 +vn 0.976800 -0.112800 0.182200 +vn 0.984900 0.058600 0.162800 +vn 0.998000 -0.055600 0.030200 +vn 0.995000 -0.098700 0.015800 +vn 0.996500 -0.074600 0.038400 +vn 0.997300 -0.065500 0.034500 +vn 0.997100 -0.074300 0.013600 +vn 0.979900 0.199200 -0.011000 +vn 0.970000 0.237700 -0.050800 +vn -0.979900 0.199200 -0.011000 +vn -0.985000 0.168400 -0.037100 +vn 0.999200 0.039100 -0.010600 +vn -0.970000 0.237700 -0.050800 +vn 0.985000 0.168500 -0.037100 +vn 0.718000 0.219300 -0.660600 +vn -0.939300 0.071300 -0.335700 +vn 0.939300 0.071300 -0.335700 +vn 0.934300 -0.292800 0.203100 +vn 0.977600 0.166300 -0.128800 +vn 0.914200 0.361100 -0.183800 +vn 0.981900 0.189100 -0.010100 +vn 0.985900 0.167400 0.004200 +vn -0.985900 0.167400 0.004200 +vn -0.981900 0.189100 -0.010100 +vn -0.994500 -0.073400 0.074900 +vn -0.995100 -0.061400 0.077200 +vn 0.996900 -0.041700 0.066400 +vn 0.996300 -0.065400 0.056600 +vn 0.786800 -0.436300 0.436500 +vn 0.786100 -0.436700 0.437400 +vn 0.786200 -0.436700 0.437300 +vn -0.786700 -0.436400 0.436600 +vn -0.786800 -0.436300 0.436500 +vn -0.786300 -0.436600 0.437200 +vn -0.786100 -0.436700 0.437400 +vn -0.996300 -0.065400 0.056700 +vn -0.996900 -0.041700 0.066400 +vn 0.907900 -0.237700 0.345300 +vn -0.999000 0.033000 0.030800 +vn 0.866700 0.074600 0.493300 +vn 0.728100 -0.290600 -0.620900 +vn -0.620000 -0.267000 -0.737800 +vn -0.620700 -0.266900 -0.737200 +vn -0.620500 -0.266900 -0.737400 +vn -0.223800 0.041400 0.973700 +vn 0.979000 -0.011500 -0.203700 +vn 0.606500 -0.286900 -0.741500 +vn -0.962500 0.119600 0.243600 +vn 0.003400 -0.996500 0.083600 +vn 0.689800 -0.231200 -0.686100 +vn 0.920700 0.174600 0.349000 +vn 0.488200 0.574700 0.656800 +vn -0.376600 0.608300 0.698700 +vn 0.293000 0.000200 -0.956100 +vn -0.762100 -0.071500 -0.643500 +vn 0.767400 -0.062500 0.638100 +vn -0.572300 -0.127200 0.810100 +vn -0.978100 -0.038300 0.204600 +vn 0.998900 -0.039200 0.025800 +vn -0.997800 -0.043800 0.049800 +vn 0.003400 -0.995000 0.099400 +vn -0.819700 0.017400 -0.572500 +vn 0.209100 -0.058400 -0.976200 +vn 0.704700 0.451200 0.547500 +vn -0.626000 0.531400 0.570800 +vn 0.986200 0.097500 0.133700 +vn 0.705000 0.220000 -0.674200 +vn -0.039200 -0.756000 0.653400 +vn -0.675000 0.231500 -0.700600 +vn -0.482300 -0.449200 0.752100 +vn 0.775700 -0.461300 0.430600 +vn -0.639700 0.025400 0.768200 +vn 0.724200 0.010200 0.689500 +vn -0.619700 -0.267000 -0.738100 +vn -0.495300 0.115000 0.861100 +vn 0.636800 -0.268100 -0.723000 +vn -0.658900 -0.294100 -0.692400 +vn 0.020500 -0.994900 0.098800 +vn 0.004500 -0.996100 -0.088100 +vn 0.948800 0.082600 0.305100 +vn -0.933800 0.203200 0.294600 +vn -0.007100 0.602200 0.798300 +vn 0.248000 -0.187400 -0.950500 +vn 0.852400 -0.076400 -0.517200 +vn -0.854800 -0.081700 -0.512600 +vn -0.854800 -0.081700 -0.512500 +vn 0.808600 -0.069900 0.584200 +vn -0.803100 -0.046800 0.594100 +vn -0.300900 -0.121400 -0.945900 +vn 0.984400 0.004400 0.175700 +vn 0.998600 -0.023800 0.048000 +vn 0.184600 -0.525200 -0.830700 +vn -0.397800 -0.906600 0.140600 +vn 0.216400 -0.976000 -0.024300 +vn 0.006900 -0.179300 -0.983800 +vn 0.674600 0.477000 0.563400 +vn -0.465700 0.543100 0.698700 +vn -0.907900 -0.237700 0.345300 +vn 0.999000 0.033000 0.030800 +vn -0.866700 0.074600 0.493300 +vn -0.728100 -0.290600 -0.620900 +vn 0.619900 -0.267000 -0.737900 +vn 0.620500 -0.266900 -0.737400 +vn 0.620700 -0.266900 -0.737200 +vn 0.223800 0.041400 0.973700 +vn -0.979000 -0.011500 -0.203700 +vn -0.606500 -0.286900 -0.741500 +vn 0.962500 0.119600 0.243600 +vn -0.003400 -0.996500 0.083600 +vn -0.689800 -0.231200 -0.686100 +vn -0.920700 0.174600 0.349000 +vn -0.488200 0.574700 0.656800 +vn 0.376600 0.608300 0.698700 +vn -0.293000 0.000200 -0.956100 +vn 0.762100 -0.071500 -0.643500 +vn -0.767400 -0.062500 0.638100 +vn 0.572300 -0.127200 0.810100 +vn 0.978100 -0.038300 0.204600 +vn -0.998900 -0.039200 0.025800 +vn 0.997800 -0.043800 0.049800 +vn -0.003400 -0.995000 0.099400 +vn 0.819700 0.017500 -0.572500 +vn -0.209100 -0.058400 -0.976200 +vn -0.704700 0.451200 0.547500 +vn 0.626000 0.531400 0.570800 +vn -0.986200 0.097500 0.133700 +vn -0.705000 0.220000 -0.674200 +vn 0.039200 -0.756000 0.653400 +vn 0.675000 0.231500 -0.700600 +vn 0.482200 -0.449200 0.752100 +vn -0.775700 -0.461300 0.430600 +vn 0.639700 0.025400 0.768200 +vn -0.724200 0.010200 0.689500 +vn 0.619700 -0.267000 -0.738100 +vn 0.495300 0.115000 0.861100 +vn -0.636800 -0.268100 -0.723000 +vn 0.658900 -0.294100 -0.692400 +vn -0.020500 -0.994900 0.098800 +vn -0.004500 -0.996100 -0.088100 +vn -0.948800 0.082500 0.305000 +vn 0.933800 0.203200 0.294600 +vn 0.007100 0.602200 0.798300 +vn -0.248000 -0.187400 -0.950500 +vn -0.852400 -0.076400 -0.517200 +vn 0.854800 -0.081700 -0.512500 +vn -0.808600 -0.069900 0.584200 +vn 0.803100 -0.046800 0.594100 +vn 0.300900 -0.121400 -0.945900 +vn -0.984400 0.004400 0.175700 +vn -0.998600 -0.023800 0.048000 +vn -0.184600 -0.525200 -0.830700 +vn 0.397800 -0.906600 0.140600 +vn -0.216400 -0.976000 -0.024300 +vn -0.006900 -0.179300 -0.983800 +vn -0.674600 0.477000 0.563400 +vn 0.465700 0.543100 0.698700 +vn 0.803000 -0.046800 0.594100 +vn -0.803000 -0.046800 0.594100 +vn -0.705000 0.220100 -0.674200 +vn -0.967200 0.054700 -0.248200 +vn 0.967200 0.054600 -0.248200 +vn 0.005300 0.000200 1.000000 +vn -0.005300 0.000200 1.000000 +usemtl fox_material +s 1 +f 31/1/1 94/2/1 145/3/1 +f 117/4/2 14/5/2 37/6/2 +f 18/7/3 38/8/3 120/9/3 +f 20/10/4 18/7/4 19/11/4 +f 14/5/5 25/12/5 18/7/5 +f 36/13/6 24/14/6 25/12/6 +f 234/15/7 232/16/7 67/17/7 +f 15/18/8 16/19/8 26/20/8 +f 122/21/9 37/6/9 20/10/9 +f 122/21/10 20/10/10 130/22/10 +f 113/23/11 36/13/11 117/4/11 +f 4/24/12 34/25/12 145/3/12 +f 32/26/13 263/27/13 270/28/13 +f 270/28/13 138/29/13 32/26/13 +f 31/1/14 281/30/14 280/31/14 +f 280/31/14 94/2/14 31/1/14 +f 31/32/15 34/33/15 42/34/15 +f 231/35/16 227/36/16 70/37/16 +f 88/38/17 200/39/17 90/40/17 +f 87/41/18 88/38/18 90/40/18 +f 203/42/19 86/43/19 89/44/19 +f 86/43/20 87/41/20 90/40/20 +f 264/45/21 267/46/21 30/47/21 +f 34/25/22 31/1/22 145/3/22 +f 109/48/23 35/49/23 10/50/23 +f 117/4/24 36/13/24 14/5/24 +f 122/21/25 117/4/25 37/6/25 +f 19/11/26 18/7/26 120/9/26 +f 20/10/27 37/6/27 18/7/27 +f 130/22/28 20/10/28 19/11/28 +f 37/6/29 14/5/29 18/7/29 +f 283/51/30 10/50/30 285/52/30 +f 14/5/31 36/13/31 25/12/31 +f 32/26/32 138/29/32 46/53/32 +f 109/48/33 95/54/33 35/49/33 +f 6/55/34 4/24/34 145/3/34 +f 264/45/35 263/27/35 32/26/35 +f 46/53/36 138/29/36 281/30/36 +f 232/16/37 35/56/37 231/35/37 +f 207/57/38 203/42/38 89/44/38 +f 90/40/39 200/39/39 206/58/39 +f 89/44/40 86/43/40 90/40/40 +f 206/59/41 207/60/41 89/44/41 +f 90/40/42 206/59/42 89/44/42 +f 140/61/43 145/62/43 94/63/43 +f 10/50/44 283/51/44 286/64/44 +f 286/64/45 109/48/45 10/50/45 +f 117/65/46 150/66/46 114/67/46 +f 119/68/47 120/69/47 151/70/47 +f 123/71/48 121/72/48 119/68/48 +f 114/67/49 119/68/49 129/73/49 +f 148/74/50 129/73/50 128/75/50 +f 230/76/51 180/77/51 236/78/51 +f 115/79/52 131/80/52 116/81/52 +f 122/82/53 123/71/53 150/66/53 +f 122/82/54 130/83/54 123/71/54 +f 113/84/55 117/65/55 148/74/55 +f 97/85/56 145/62/56 144/86/56 +f 138/87/57 270/88/57 265/89/57 +f 265/89/57 142/90/57 138/87/57 +f 94/63/58 280/91/58 279/92/58 +f 279/92/58 140/61/58 94/63/58 +f 140/93/59 155/94/59 144/95/59 +f 226/96/60 183/97/60 235/98/60 +f 204/99/61 208/100/61 200/101/61 +f 202/102/62 208/100/62 204/99/62 +f 203/103/63 205/104/63 201/105/63 +f 201/105/64 208/100/64 202/102/64 +f 271/106/65 139/107/65 268/108/65 +f 144/86/66 145/62/66 140/61/66 +f 109/109/67 106/110/67 147/111/67 +f 117/65/68 114/67/68 148/74/68 +f 122/82/69 150/66/69 117/65/69 +f 121/72/70 120/69/70 119/68/70 +f 123/71/71 119/68/71 150/66/71 +f 130/83/72 121/72/72 123/71/72 +f 150/66/73 119/68/73 114/67/73 +f 288/112/74 290/113/74 106/110/74 +f 114/67/75 129/73/75 148/74/75 +f 142/90/76 159/114/76 138/87/76 +f 109/109/77 147/111/77 95/115/77 +f 100/116/78 145/62/78 97/85/78 +f 271/106/79 142/90/79 265/89/79 +f 159/114/80 140/61/80 279/92/80 +f 236/78/81 226/96/81 147/117/81 +f 207/118/82 205/104/82 203/103/82 +f 208/100/83 206/119/83 200/101/83 +f 205/104/84 208/100/84 201/105/84 +f 206/120/85 205/104/85 207/121/85 +f 208/100/86 205/104/86 206/120/86 +f 106/110/87 109/109/87 286/122/87 +f 286/122/88 288/112/88 106/110/88 +f 232/16/7 234/15/7 10/123/7 +f 10/123/7 35/56/7 232/16/7 +f 231/35/37 70/37/37 67/17/37 +f 67/17/37 232/16/37 231/35/37 +f 236/78/51 147/117/51 106/124/51 +f 106/124/51 230/76/51 236/78/51 +f 227/36/16 231/35/16 35/56/16 +f 35/56/16 95/125/16 227/36/16 +f 235/98/60 95/126/89 147/117/60 +f 147/117/60 226/96/60 235/98/60 +f 226/96/81 236/78/81 180/77/81 +f 180/77/81 183/97/81 226/96/81 +f 268/108/65 126/127/65 142/90/65 +f 142/90/65 271/106/65 268/108/65 +f 95/128/57 265/89/57 270/88/57 +f 265/89/79 95/128/79 139/107/79 +f 139/107/79 271/106/79 265/89/79 +f 267/46/21 264/45/21 32/26/21 +f 32/26/21 22/129/21 267/46/21 +f 95/130/13 270/28/13 263/27/13 +f 263/27/35 264/45/35 30/47/35 +f 30/47/35 95/130/35 263/27/35 +f 138/29/14 280/31/14 281/30/14 +f 138/87/58 279/92/58 280/91/58 +f 138/87/80 159/114/80 279/92/80 +f 31/1/36 46/53/36 281/30/36 +f 290/113/90 288/112/90 148/74/90 +f 148/74/91 128/75/91 290/113/91 +f 288/112/92 286/122/92 113/84/92 +f 113/84/93 148/74/93 288/112/93 +f 285/52/94 24/14/94 36/13/94 +f 36/13/95 283/51/95 285/52/95 +f 283/51/96 36/13/96 113/23/96 +f 113/23/97 286/64/97 283/51/97 +f 6/131/98 145/132/98 132/133/98 +f 27/134/99 6/131/99 132/133/99 +f 30/47/100 267/46/100 273/135/100 +f 273/135/100 21/136/100 30/47/100 +f 137/137/101 275/138/101 274/139/101 +f 274/139/101 29/140/101 137/137/101 +f 33/141/102 5/142/102 28/143/102 +f 29/140/103 3/144/103 5/142/103 +f 5/142/104 4/24/104 6/55/104 +f 30/145/105 21/146/105 63/147/105 +f 9/148/106 105/149/106 108/150/106 +f 8/151/107 9/148/107 11/152/107 +f 13/153/108 11/152/108 12/154/108 +f 24/14/109 13/153/109 16/155/109 +f 12/154/110 112/156/110 149/157/110 +f 11/152/111 108/150/111 112/156/111 +f 25/12/112 16/155/112 18/7/112 +f 13/158/113 12/159/113 26/20/113 +f 16/155/114 15/160/114 17/161/114 +f 38/8/115 124/162/115 120/9/115 +f 18/7/116 17/161/116 38/8/116 +f 285/52/117 289/163/117 24/14/117 +f 16/19/118 13/158/118 26/20/118 +f 12/159/119 15/164/119 26/20/119 +f 28/165/120 6/131/120 27/134/120 +f 3/166/121 22/167/121 45/168/121 +f 27/134/122 132/133/122 85/169/122 +f 15/160/123 149/157/123 17/161/123 +f 1/170/124 141/171/124 146/172/124 +f 93/173/125 29/140/125 33/141/125 +f 98/174/126 33/141/126 101/175/126 +f 5/176/127 3/166/127 2/177/127 +f 22/167/128 32/178/128 40/179/128 +f 4/180/129 5/176/129 41/181/129 +f 34/33/130 4/182/130 44/183/130 +f 245/184/131 253/185/131 52/186/131 +f 50/187/132 54/188/132 254/189/132 +f 40/190/133 46/191/133 54/188/133 +f 251/192/134 247/193/134 48/194/134 +f 246/195/135 248/196/135 50/187/135 +f 45/168/136 40/179/136 49/197/136 +f 2/177/137 45/168/137 49/197/137 +f 254/189/138 246/195/138 50/187/138 +f 63/147/139 66/198/139 7/199/139 +f 70/37/140 64/200/140 69/201/140 +f 106/202/141 127/203/141 225/204/141 +f 225/204/142 229/205/142 106/202/142 +f 95/125/143 30/206/143 64/200/143 +f 64/207/144 63/147/144 69/208/144 +f 135/209/145 39/210/145 260/211/145 +f 27/134/146 83/212/146 258/213/146 +f 134/214/147 152/215/147 257/216/147 +f 257/216/148 259/217/148 134/214/148 +f 84/218/149 83/212/149 87/41/149 +f 85/169/150 196/219/150 200/39/150 +f 83/212/151 85/169/151 88/38/151 +f 82/220/152 84/218/152 86/43/152 +f 203/42/153 82/220/153 86/43/153 +f 40/190/154 32/221/154 46/191/154 +f 137/137/155 29/140/155 93/173/155 +f 39/222/156 33/141/156 28/143/156 +f 101/175/157 33/141/157 39/222/157 +f 33/141/158 29/140/158 5/142/158 +f 9/148/159 146/172/159 105/149/159 +f 28/143/160 5/142/160 6/55/160 +f 11/152/161 9/148/161 108/150/161 +f 287/223/162 8/151/162 11/152/162 +f 64/207/163 30/145/163 63/147/163 +f 25/12/164 24/14/164 16/155/164 +f 12/154/165 11/152/165 112/156/165 +f 17/161/166 149/157/166 124/162/166 +f 18/7/167 16/155/167 17/161/167 +f 38/8/168 17/161/168 124/162/168 +f 63/147/169 21/146/169 66/198/169 +f 228/224/170 10/123/170 234/15/170 +f 273/135/171 269/225/171 21/136/171 +f 135/209/172 101/226/172 39/210/172 +f 2/177/173 3/166/173 45/168/173 +f 83/212/174 27/134/174 85/169/174 +f 15/160/175 12/154/175 149/157/175 +f 241/227/176 1/170/176 146/172/176 +f 98/174/177 93/173/177 33/141/177 +f 41/181/178 5/176/178 2/177/178 +f 274/139/179 272/228/179 29/140/179 +f 45/168/180 22/167/180 40/179/180 +f 44/229/181 4/180/181 41/181/181 +f 42/34/182 34/33/182 44/183/182 +f 54/188/132 46/191/132 254/189/132 +f 227/36/183 95/125/183 64/200/183 +f 7/199/184 66/198/184 68/230/184 +f 82/220/185 135/209/185 84/218/185 +f 85/169/186 132/133/186 196/219/186 +f 203/42/187 135/209/187 82/220/187 +f 84/218/145 135/209/145 260/211/145 +f 86/43/188 84/218/188 87/41/188 +f 88/38/189 85/169/189 200/39/189 +f 87/41/190 83/212/190 88/38/190 +f 100/231/191 132/232/191 145/233/191 +f 133/234/192 132/232/192 100/231/192 +f 125/235/193 261/236/193 268/108/193 +f 268/108/193 139/107/193 125/235/193 +f 136/237/194 276/238/194 275/239/194 +f 275/239/194 137/240/194 136/237/194 +f 237/241/195 240/242/195 127/243/195 +f 127/243/196 103/244/196 237/241/196 +f 143/245/197 134/246/197 99/247/197 +f 136/237/198 99/247/198 96/248/198 +f 99/247/199 100/116/199 97/85/199 +f 139/249/200 176/250/200 125/251/200 +f 104/252/201 108/253/201 105/254/201 +f 103/244/202 107/255/202 104/252/202 +f 111/256/203 110/257/203 107/255/203 +f 8/151/204 287/223/204 289/163/204 +f 289/163/205 23/258/205 8/151/205 +f 128/75/206 116/259/206 111/256/206 +f 110/257/207 149/260/207 112/261/207 +f 107/255/208 112/261/208 108/253/208 +f 129/73/209 119/68/209 116/259/209 +f 111/262/210 131/80/210 110/263/210 +f 116/259/211 118/264/211 115/265/211 +f 151/70/212 120/69/212 124/266/212 +f 119/68/213 151/70/213 118/264/213 +f 290/113/214 128/75/214 282/267/214 +f 116/81/215 131/80/215 111/262/215 +f 110/263/216 131/80/216 115/268/216 +f 134/214/217 133/234/217 100/231/217 +f 96/269/218 158/270/218 126/271/218 +f 133/234/219 199/272/219 132/232/219 +f 115/265/220 118/264/220 149/260/220 +f 91/273/221 146/274/221 141/275/221 +f 93/276/222 143/245/222 136/237/222 +f 98/277/223 101/278/223 143/245/223 +f 99/279/224 92/280/224 96/269/224 +f 126/271/225 153/281/225 142/282/225 +f 97/283/226 154/284/226 99/279/226 +f 144/95/227 157/285/227 97/286/227 +f 249/287/228 165/288/229 244/289/228 +f 153/290/230 167/291/230 159/292/230 +f 250/293/231 161/294/231 243/295/231 +f 255/296/232 163/297/232 252/298/232 +f 158/270/233 162/299/233 153/281/233 +f 92/280/234 162/299/234 158/270/234 +f 256/300/235 163/297/235 255/296/235 +f 176/250/236 102/301/236 179/302/236 +f 183/97/237 182/303/237 177/304/237 +f 95/126/238 177/304/238 139/305/238 +f 177/306/239 182/307/239 176/250/239 +f 135/308/240 198/309/240 257/216/240 +f 259/217/241 197/310/241 133/234/241 +f 258/213/242 83/212/242 84/218/242 +f 84/218/243 260/211/243 258/213/243 +f 198/309/244 202/102/244 197/310/244 +f 199/272/245 200/101/245 196/311/245 +f 197/310/246 204/99/246 199/272/246 +f 195/312/247 201/105/247 198/309/247 +f 203/103/248 201/105/248 195/312/248 +f 153/290/249 159/292/249 142/313/249 +f 137/240/250 93/276/250 136/237/250 +f 152/314/251 134/246/251 143/245/251 +f 101/278/252 152/314/252 143/245/252 +f 143/245/253 99/247/253 136/237/253 +f 104/252/254 105/254/254 146/274/254 +f 134/246/255 100/116/255 99/247/255 +f 107/255/256 108/253/256 104/252/256 +f 107/255/257 103/244/257 284/315/257 +f 177/306/258 176/250/258 139/249/258 +f 129/73/259 116/259/259 128/75/259 +f 110/257/260 112/261/260 107/255/260 +f 118/264/261 124/266/261 149/260/261 +f 119/68/262 118/264/262 116/259/262 +f 151/70/263 124/266/263 118/264/263 +f 176/250/264 179/302/264 125/251/264 +f 229/316/265 230/76/265 106/124/265 +f 261/236/266 125/235/266 266/317/266 +f 135/308/267 152/215/267 101/318/267 +f 92/280/268 158/270/268 96/269/268 +f 197/310/269 199/272/269 133/234/269 +f 115/265/270 149/260/270 110/257/270 +f 146/274/271 91/273/271 238/319/271 +f 98/277/272 143/245/272 93/276/272 +f 154/284/273 92/280/273 99/279/273 +f 276/238/274 136/237/274 262/320/274 +f 158/270/275 153/281/275 126/271/275 +f 157/321/276 154/284/276 97/283/276 +f 155/94/277 157/285/277 144/95/277 +f 167/291/278 163/297/278 256/300/278 +f 177/304/279 95/126/279 235/98/279 +f 102/301/280 181/322/280 179/302/280 +f 195/312/281 198/309/281 135/308/281 +f 199/272/282 196/311/282 132/232/282 +f 203/103/283 195/312/283 135/308/283 +f 259/217/284 257/216/284 198/309/284 +f 198/309/285 197/310/285 259/217/285 +f 201/105/286 202/102/286 198/309/286 +f 204/99/287 200/101/287 199/272/287 +f 202/102/288 204/99/288 197/310/288 +f 246/195/138 254/189/138 46/191/289 +f 46/191/289 31/32/289 246/195/138 +f 91/273/290 262/320/290 278/323/290 +f 278/323/291 210/324/291 91/273/291 +f 21/136/292 269/225/292 277/325/292 +f 277/325/292 209/326/292 21/136/292 +f 125/251/293 179/302/293 240/327/293 +f 210/324/294 278/323/294 266/317/294 +f 266/317/294 125/235/294 210/324/294 +f 1/170/295 209/326/295 277/325/295 +f 277/325/296 272/228/296 1/170/296 +f 10/328/297 228/329/297 233/330/297 +f 233/330/298 23/331/298 10/328/298 +f 179/302/299 181/322/299 225/204/299 +f 230/76/265 229/316/265 185/332/265 +f 185/332/265 180/77/265 230/76/265 +f 234/15/170 67/17/170 72/333/170 +f 72/333/170 228/224/170 234/15/170 +f 228/329/300 72/334/300 68/230/300 +f 68/230/301 233/330/301 228/329/301 +f 229/205/302 225/204/302 181/322/302 +f 181/322/303 185/335/303 229/205/303 +f 70/37/183 227/36/183 64/200/183 +f 183/97/279 177/304/279 235/98/279 +f 66/198/304 233/330/304 68/230/304 +f 233/330/305 66/198/305 242/336/305 +f 242/336/306 23/331/306 233/330/306 +f 239/337/307 8/151/307 23/258/307 +f 23/258/308 242/338/308 239/337/308 +f 242/338/309 21/136/309 209/326/309 +f 209/326/310 239/337/310 242/338/310 +f 241/227/311 239/337/311 209/326/311 +f 209/326/312 1/170/312 241/227/312 +f 238/319/313 237/241/313 103/244/313 +f 103/244/314 104/252/314 238/319/314 +f 127/203/293 240/327/293 179/302/293 +f 179/302/299 225/204/299 127/203/299 +f 21/146/315 242/336/315 66/198/315 +f 238/319/316 91/273/316 210/324/316 +f 210/324/313 237/241/313 238/319/313 +f 104/252/271 146/274/271 238/319/271 +f 9/148/176 241/227/176 146/172/176 +f 241/227/317 9/148/317 8/151/317 +f 8/151/311 239/337/311 241/227/311 +f 237/241/294 210/324/294 125/235/294 +f 125/235/195 240/242/195 237/241/195 +f 247/193/134 251/192/134 42/34/134 +f 42/34/134 44/183/134 247/193/134 +f 248/196/135 246/195/135 31/32/135 +f 31/32/135 42/34/135 248/196/135 +f 253/185/131 245/184/131 44/229/318 +f 44/229/318 41/181/318 253/185/131 +f 244/289/228 154/284/228 157/321/228 +f 157/321/228 249/287/228 244/289/228 +f 243/295/231 157/285/231 155/94/231 +f 155/94/231 250/293/231 243/295/231 +f 154/284/319 156/339/319 92/280/319 +f 41/181/320 2/177/320 43/340/320 +f 255/296/235 140/93/321 159/292/321 +f 159/292/321 256/300/235 255/296/235 +f 252/298/232 155/94/232 140/93/232 +f 140/93/232 255/296/232 252/298/232 +f 159/292/278 167/291/278 256/300/278 +f 28/165/322 258/213/322 260/211/322 +f 260/211/323 39/210/323 28/165/323 +f 152/215/240 135/308/240 257/216/240 +f 134/214/241 259/217/241 133/234/241 +f 28/165/146 27/134/146 258/213/146 +f 141/275/194 275/239/194 276/238/194 +f 141/171/101 274/139/101 275/138/101 +f 272/228/179 274/139/179 141/171/179 +f 141/171/179 1/170/179 272/228/179 +f 272/228/324 277/325/324 3/144/324 +f 3/144/325 29/140/325 272/228/325 +f 269/225/171 273/135/171 22/129/171 +f 22/129/171 3/144/171 269/225/171 +f 3/144/292 277/325/292 269/225/292 +f 22/129/100 273/135/100 267/46/100 +f 96/248/294 266/317/294 278/323/294 +f 262/320/274 91/273/274 141/275/274 +f 141/275/274 276/238/274 262/320/274 +f 262/320/326 136/237/326 96/248/326 +f 96/248/327 278/323/327 262/320/327 +f 126/127/193 268/108/193 261/236/193 +f 266/317/266 96/248/266 126/127/266 +f 126/127/266 261/236/266 266/317/266 +f 103/244/328 127/243/328 282/267/328 +f 282/267/329 284/315/329 103/244/329 +f 287/223/330 13/153/330 24/14/330 +f 24/14/331 289/163/331 287/223/331 +f 289/163/332 285/52/333 10/50/334 +f 10/50/334 23/258/332 289/163/332 +f 282/267/335 127/243/336 106/110/337 +f 106/110/337 290/113/338 282/267/335 +f 284/315/339 282/267/339 128/75/339 +f 128/75/340 111/256/340 284/315/340 +f 13/153/162 287/223/162 11/152/162 +f 111/256/257 107/255/257 284/315/257 +f 43/340/341 49/197/341 53/341/341 +f 54/188/342 50/187/342 59/342/342 +f 43/340/343 53/341/343 47/343/343 +f 57/344/344 47/343/344 51/345/344 +f 50/187/345 48/194/346 57/346/347 +f 53/347/348 54/188/348 58/348/348 +f 52/186/349 43/340/349 47/343/349 +f 48/349/350 52/186/350 47/343/350 +f 61/350/351 59/342/351 62/351/351 +f 61/352/352 62/351/352 55/353/352 +f 57/344/353 51/345/353 55/354/353 +f 51/345/354 47/343/354 60/355/354 +f 47/343/355 56/356/355 60/355/355 +f 56/357/356 58/348/356 61/350/356 +f 69/208/357 7/199/357 65/358/357 +f 69/201/358 77/359/358 214/360/358 +f 221/361/359 217/362/359 75/363/359 +f 215/364/360 212/365/360 73/366/360 +f 212/365/361 218/367/361 73/366/361 +f 7/199/362 68/230/362 222/368/362 +f 80/369/363 73/366/363 78/370/363 +f 78/371/364 74/372/364 81/373/364 +f 73/366/365 77/359/365 78/370/365 +f 77/374/366 71/375/366 74/372/366 +f 76/376/367 75/363/367 79/377/367 +f 75/378/368 73/366/368 80/369/368 +f 71/375/369 76/376/369 81/379/369 +f 247/380/370 44/229/370 245/184/370 +f 49/381/371 40/190/371 54/188/371 +f 248/196/372 42/34/372 251/192/372 +f 53/347/373 49/381/373 54/188/373 +f 43/340/374 2/177/374 49/197/374 +f 58/348/375 54/188/375 59/342/375 +f 47/343/376 53/341/376 56/356/376 +f 59/342/377 50/187/345 57/346/347 +f 56/357/378 53/347/378 58/348/378 +f 57/344/379 48/349/379 47/343/379 +f 62/351/380 59/342/380 57/346/380 +f 60/382/381 61/352/381 55/353/381 +f 57/346/382 55/353/382 62/351/382 +f 55/354/383 51/345/383 60/355/383 +f 61/350/384 58/348/384 59/342/384 +f 60/383/385 56/357/385 61/350/385 +f 69/208/386 63/147/386 7/199/386 +f 65/358/387 7/199/387 71/375/387 +f 218/367/388 70/37/389 214/360/389 +f 222/368/390 68/230/390 221/361/390 +f 217/384/391 72/333/391 215/364/391 +f 77/374/392 69/208/392 65/358/392 +f 71/375/393 7/199/393 76/376/393 +f 74/372/394 71/375/394 81/379/394 +f 77/374/395 65/358/395 71/375/395 +f 80/385/396 78/371/396 79/386/396 +f 79/386/397 78/371/397 81/373/397 +f 78/371/398 77/374/398 74/372/398 +f 81/379/399 76/376/399 79/377/399 +f 79/387/400 75/378/400 80/369/400 +f 156/339/401 166/388/401 162/299/401 +f 167/291/402 172/389/402 163/297/402 +f 156/339/403 160/390/403 166/388/403 +f 170/391/404 164/392/404 160/390/404 +f 163/297/405 170/393/406 161/294/407 +f 166/394/408 171/395/408 167/291/408 +f 165/288/409 160/390/409 156/339/409 +f 161/396/410 160/390/410 165/288/410 +f 174/397/411 175/398/411 172/389/411 +f 174/399/412 168/400/412 175/398/412 +f 170/391/413 168/401/413 164/392/413 +f 164/392/414 173/402/414 160/390/414 +f 160/390/415 173/402/415 169/403/415 +f 169/404/416 174/397/416 171/395/416 +f 182/307/417 178/405/417 102/301/417 +f 223/406/418 190/407/418 182/303/418 +f 211/408/419 188/409/419 219/410/419 +f 224/411/420 186/412/420 213/413/420 +f 213/413/421 186/412/421 220/414/421 +f 102/301/422 189/415/422 216/416/422 +f 193/417/423 191/418/423 186/412/423 +f 191/419/424 194/420/424 187/421/424 +f 186/412/425 191/418/425 190/407/425 +f 190/422/426 187/421/426 184/423/426 +f 189/415/427 192/424/427 188/409/427 +f 188/425/428 193/417/428 186/412/428 +f 184/423/429 194/426/429 189/415/429 +f 243/427/430 249/287/430 157/321/430 +f 162/428/431 167/291/431 153/290/431 +f 252/298/432 250/293/432 155/94/432 +f 166/394/433 167/291/433 162/428/433 +f 156/339/434 162/299/434 92/280/434 +f 171/395/435 172/389/435 167/291/435 +f 160/390/436 169/403/436 166/388/436 +f 172/389/437 170/393/406 163/297/405 +f 169/404/438 171/395/438 166/394/438 +f 170/391/439 160/390/439 161/396/439 +f 175/398/440 170/393/440 172/389/440 +f 173/429/441 168/400/441 174/399/441 +f 170/393/442 175/398/442 168/400/442 +f 168/401/443 173/402/443 164/392/443 +f 174/397/444 172/389/444 171/395/444 +f 173/430/445 174/397/445 169/404/445 +f 182/307/446 102/301/446 176/250/446 +f 178/405/447 184/423/447 102/301/447 +f 220/414/448 223/406/448 183/97/448 +f 216/416/449 211/408/449 181/322/449 +f 219/431/450 224/411/450 185/332/450 +f 190/422/451 178/405/451 182/307/451 +f 184/423/452 189/415/452 102/301/452 +f 187/421/453 194/426/453 184/423/453 +f 190/422/454 184/423/454 178/405/454 +f 193/432/455 192/433/455 191/419/455 +f 192/433/456 194/420/456 191/419/456 +f 191/419/457 187/421/457 190/422/457 +f 194/426/458 192/424/458 189/415/458 +f 192/434/459 193/417/459 188/425/459 +f 221/361/390 75/363/390 76/376/390 +f 76/376/390 222/368/390 221/361/390 +f 223/406/448 220/414/448 186/412/448 +f 186/412/448 190/407/448 223/406/448 +f 224/411/450 219/431/450 188/425/460 +f 188/425/460 186/412/460 224/411/450 +f 217/362/359 221/361/359 68/230/359 +f 68/230/359 72/334/359 217/362/359 +f 215/364/391 73/366/461 75/378/461 +f 75/378/461 217/384/391 215/364/391 +f 214/360/389 77/359/389 73/366/389 +f 73/366/389 218/367/388 214/360/389 +f 213/413/420 180/77/420 185/332/420 +f 185/332/420 224/411/420 213/413/420 +f 220/414/421 183/97/421 180/77/421 +f 180/77/421 213/413/421 220/414/421 +f 212/365/360 215/364/360 72/333/360 +f 72/333/360 67/17/360 212/365/360 +f 218/367/361 212/365/361 67/17/361 +f 67/17/361 70/37/361 218/367/361 +f 219/410/419 185/335/419 181/322/419 +f 181/322/419 211/408/419 219/410/419 +f 211/408/449 216/416/449 189/415/449 +f 189/415/449 188/409/449 211/408/449 +f 76/376/362 7/199/362 222/368/362 +f 70/37/358 69/201/358 214/360/358 +f 183/97/418 223/406/418 182/303/418 +f 181/322/422 102/301/422 216/416/422 +f 250/293/432 252/298/432 163/297/432 +f 163/297/432 161/294/432 250/293/432 +f 251/192/372 48/194/372 50/187/372 +f 50/187/372 248/196/372 251/192/372 +f 245/184/370 52/186/370 48/349/370 +f 48/349/370 247/380/370 245/184/370 +f 249/287/430 243/427/430 161/396/430 +f 161/396/430 165/288/462 249/287/430 +f 244/289/463 156/339/463 154/284/463 +f 165/288/463 156/339/463 244/289/463 +f 253/185/464 41/181/464 43/340/464 +f 52/186/464 253/185/464 43/340/464 +f 19/11/465 120/9/465 130/22/465 +f 121/72/466 130/83/466 120/69/466 diff --git a/assets/objects/fox/texture.png b/assets/objects/fox/texture.png new file mode 100644 index 0000000..752ad49 Binary files /dev/null and b/assets/objects/fox/texture.png differ diff --git a/assets/objects/plane.obj b/assets/objects/plane.obj new file mode 100644 index 0000000..14685f6 --- /dev/null +++ b/assets/objects/plane.obj @@ -0,0 +1,16 @@ +# Blender v2.93.1 OBJ File: '' +# www.blender.org +mtllib untitled.mtl +o Plane +v -0.000000 0.000000 1.000000 +v 0.000000 2.000000 1.000000 +v -0.000000 0.000000 -1.000000 +v 0.000000 2.000000 -1.000000 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vn -1.0000 0.0000 0.0000 +usemtl Material.001 +s off +f 1/1/1 2/2/1 4/3/1 3/4/1 diff --git a/assets/objects/pyramid.obj b/assets/objects/pyramid.obj new file mode 100644 index 0000000..ad98750 --- /dev/null +++ b/assets/objects/pyramid.obj @@ -0,0 +1,16 @@ +# OBJ file created by ply_to_obj.c +# +g Object001 + +v 0 0 0 +v 1 0 0 +v 1 1 0 +v 0 1 0 +v 0.5 0.5 1.6 + +f 5 2 3 +f 4 5 3 +f 6 3 2 +f 5 6 2 +f 4 6 5 +f 6 4 3 diff --git a/assets/textures/8k_earth_daymap.jpg b/assets/textures/8k_earth_daymap.jpg new file mode 100644 index 0000000..8948689 Binary files /dev/null and b/assets/textures/8k_earth_daymap.jpg differ diff --git a/assets/textures/8k_earth_nightmap.jpg b/assets/textures/8k_earth_nightmap.jpg new file mode 100644 index 0000000..e211b6c Binary files /dev/null and b/assets/textures/8k_earth_nightmap.jpg differ diff --git a/assets/textures/8k_earth_specular_map.png b/assets/textures/8k_earth_specular_map.png new file mode 100644 index 0000000..3861a35 Binary files /dev/null and b/assets/textures/8k_earth_specular_map.png differ diff --git a/assets/textures/8k_mars.jpg b/assets/textures/8k_mars.jpg new file mode 100644 index 0000000..09a804b Binary files /dev/null and b/assets/textures/8k_mars.jpg differ diff --git a/assets/textures/8k_moon.jpg b/assets/textures/8k_moon.jpg new file mode 100644 index 0000000..10f8803 Binary files /dev/null and b/assets/textures/8k_moon.jpg differ diff --git a/assets/textures/8k_sun.jpg b/assets/textures/8k_sun.jpg new file mode 100644 index 0000000..5b0ac0a Binary files /dev/null and b/assets/textures/8k_sun.jpg differ diff --git a/assets/textures/8k_venus_surface.jpg b/assets/textures/8k_venus_surface.jpg new file mode 100644 index 0000000..69d2f76 Binary files /dev/null and b/assets/textures/8k_venus_surface.jpg differ diff --git a/assets/textures/grid.jpg b/assets/textures/grid.jpg new file mode 100644 index 0000000..7d9b06b Binary files /dev/null and b/assets/textures/grid.jpg differ diff --git a/assets/textures/kiara_1_dawn_4k.hdr b/assets/textures/kiara_1_dawn_4k.hdr new file mode 100644 index 0000000..f9908c8 Binary files /dev/null and b/assets/textures/kiara_1_dawn_4k.hdr differ diff --git a/assets/textures/m_way.jpg b/assets/textures/m_way.jpg new file mode 100644 index 0000000..b0774f9 Binary files /dev/null and b/assets/textures/m_way.jpg differ diff --git a/assets/textures/m_way2.hdr b/assets/textures/m_way2.hdr new file mode 100644 index 0000000..93928dc Binary files /dev/null and b/assets/textures/m_way2.hdr differ diff --git a/assets/textures/m_way2.jpg b/assets/textures/m_way2.jpg new file mode 100644 index 0000000..1067f8e Binary files /dev/null and b/assets/textures/m_way2.jpg differ diff --git a/assets/textures/moon.jpg b/assets/textures/moon.jpg new file mode 100644 index 0000000..8911bc1 Binary files /dev/null and b/assets/textures/moon.jpg differ diff --git a/config_template.txt b/config_template.txt new file mode 100644 index 0000000..08383e0 --- /dev/null +++ b/config_template.txt @@ -0,0 +1,46 @@ +# config +window_name +window_size +pixel_shader_path + +# shader data +iterations +samples +camera_position +camera_rotation +sensitivity +fov + +# textures +texture_sky_path +texture_1_path +texture_2_path +texture_3_path +texture_4_path +texture_5_path +# only 5 textures available + +# imported models +object_0 +object_1 +object_2 +object_3 +object_4 +object_5 +object_(...) + +# object +obj_id +texture_albedo +texture_specular +texture_emission +position +rotation +size +albedo +specular +emission +smoothness +refractive_index +transparency +type diff --git a/configs/config.txt b/configs/config.txt new file mode 100644 index 0000000..26c2652 --- /dev/null +++ b/configs/config.txt @@ -0,0 +1,87 @@ +# config +window_name Ray Tracing +window_size 1024 512 +pixel_shader_path shaders/ray_tracing/RayTracing.compute +object_shader_path + +# shader data +reflections 15 +samples 1 +camera_position 20 10 -40 +camera_rotation -7 22 0 +sensitivity 10 +fov 40 + +# textures +texture_sky_path assets/textures/kiara_1_dawn_4k.hdr +texture_2_path assets/textures/grid.jpg +texture_3_path assets/textures/moon.jpg + +# imported models +object_1 assets/objects/plane.obj +object_2 assets/objects/cube.obj +object_3 assets/objects/cubeUV.obj + +# transparent cube 1 +model +obj_id 2 +texture_albedo 0 +texture_specular 0 +texture_emission 0 +position 0 0 0 +rotation 0 90 0 +size 5 5 5 +albedo 0 0 0 +specular 1 1 1 +emission 0 0 0 +smoothness 1 +refractive_index 1.1 +transparency 0.9 +type 2 + +# transparent cube 2 +model +obj_id 3 +texture_albedo 0 +texture_specular 3 +texture_emission 3 +position -22.5 0 0 +rotation 0 90 0 +size 20 20 20 +albedo 0 0 0 +specular 5 5 5 +emission 1 1 1 +smoothness 1 +refractive_index 1 +transparency 1 +type 2 + +# transparent sphere +model +texture_albedo 0 +texture_specular 0 +texture_emission 0 +position 22.5 5 0 +rotation 0 90 0 +size 5 5 5 +albedo 0 0 0 +specular 1 1 1 +emission 0 0 0 +smoothness 0.9 +refractive_index 1.5 +transparency 0.99 +type sphere + +# plane +model +obj_id 1 +texture_albedo 2 +texture_specular 2 +texture_emission 0 +position -50 0 0 +rotation 0 0 90 +size 1 50 50 +albedo 1 1 1 +specular 0.1 0.1 0.1 +emission 0 0 0 +smoothness 1 diff --git a/configs/demo_1.txt b/configs/demo_1.txt new file mode 100644 index 0000000..61823bf --- /dev/null +++ b/configs/demo_1.txt @@ -0,0 +1,53 @@ +# config +window_name Ray Tracing Refraction Demo 1 +window_size 1024 1024 +pixel_shader_path shaders/ray_tracing/RayTracing.compute + +# shader data +reflections 4 +samples 1 +camera_position -150 50 -150 +camera_rotation -10 -45 0 +sensitivity 10 +fov 40 + +# textures +texture_sky_path assets/textures/kiara_1_dawn_4k.hdr +texture_1_path assets/textures/square_floor.png +texture_2_path assets/textures/grid.jpg +texture_3_path assets/objects/fox/texture.png + +# imported models +object_0 assets/objects/fox/fox.obj +object_1 assets/objects/plane.obj +object_2 assets/objects/cube.obj +object_3 assets/objects/disco.obj + +# fox +model +obj_id 0 +texture_albedo 3 +texture_specular 0 +texture_emission 0 +position -5 0 0 +rotation 0 70 0 +size 0.5 0.5 0.5 +albedo 1 1 1 +specular 0 0 0 +emission 0 0 0 +smoothness 1 +type 2 + +# plane +model +obj_id 1 +texture_albedo 0 +texture_specular 0 +texture_emission 0 +position -50 0 0 +rotation 0 0 90 +size 1 50 50 +albedo 0 0 0 +specular 0.1 0.1 0.1 +emission 0 0 0 +smoothness 0.9 \ No newline at end of file diff --git a/configs/demo_2.txt b/configs/demo_2.txt new file mode 100644 index 0000000..ae8c780 --- /dev/null +++ b/configs/demo_2.txt @@ -0,0 +1,147 @@ +# config +window_name Ray Tracing Refraction Demo 1 +window_size 512 512 +pixel_shader_path shaders/ray_tracing/RayTracing.compute + +# shader data +reflections 10 +samples 1 +camera_position 30 10 -30 +camera_rotation -6 37.5 0 +sensitivity 10 +fov 40 + +# textures +texture_sky_path assets/textures/kiara_1_dawn_4k.hdr +texture_1_path assets/textures/square_floor.png +texture_2_path assets/textures/grid.jpg +texture_3_path assets/objects/fox/texture.png + +# imported models +object_0 assets/objects/cube.obj +object_1 assets/objects/plane.obj +object_2 assets/objects/cT.obj +object_3 assets/objects/disco.obj +object_4 assets/objects/Tri2.obj +object_5 assets/objects/bunny1.obj +object_6 assets/objects/cubeUV.obj + +# bunny +model +obj_id 5 +texture_albedo 0 +texture_specular 0 +texture_emission 0 +position 5 0 13 +rotation 0 -120 0 +size 2 2 2 +albedo 0 0 0 +specular 0.988 0.76 0.364 +emission 0 0 0 +smoothness 0.7 +type 2 + +# glowing triangle +model +obj_id 4 +texture_albedo 0 +texture_specular 0 +texture_emission 0 +position -5 20 -5 +rotation 0 45 90 +size 30 30 30 +albedo 0.1 0.1 0.1 +specular 0.5 0.5 0.5 +emission 5 5 5 +smoothness 0.2 + +# pyramid blue +model +obj_id 2 +texture_albedo 0 +texture_specular 0 +texture_emission 0 +position 8 0 -10 +rotation 0 15 0 +size 2 1 2 +albedo 0.1 0.1 0.1 +specular 0 0 1 +emission 0 0 0 +smoothness 0.8 + +# pyramid red +model +obj_id 2 +texture_albedo 0 +texture_specular 0 +texture_emission 0 +position 15 0 -5 +rotation 0 0 0 +size 2 2 2 +albedo 0.1 0.1 0.1 +specular 1 0 0 +emission 0 0 0 +smoothness 0.8 + +# pink glass rectangle +model +obj_id 0 +texture_albedo 0 +texture_specular 0 +texture_emission 0 +position -2 0.25 -2 +rotation 0 0 0 +size 2 6 2 +albedo 0 0 0 +specular 1 0.4 0.8 +emission 0 0 0 +smoothness 0.99 +transparency 1 +refractive_index 1.8 +type 2 + +# rectangle base +model +obj_id 6 +texture_albedo 2 +texture_specular 0 +texture_emission 0 +position -2 0 -2 +rotation 0 45 0 +size 20 0.5 20 +albedo 1 1 1 +specular 0 0 0 +emission 0 0 0 +smoothness 0.99 +transparency 0 +type 2 + +# glass sphere +model +texture_albedo 0 +texture_specular 0 +texture_emission 0 +position 10 3 0 +rotation 0 45 0 +size 3 3 3 +albedo 0 0 0 +specular 1 1 1 +emission 0 0 0 +smoothness 0.999 +refractive_index 1.5 +transparency 0.95 +type sphere + +# plane +model +texture_albedo 0 +texture_specular 0 +texture_emission 0 +position 0 0 0 +rotation 0 0 0 +size 5 5 5 +albedo 1 1 1 +specular 0 0 0 +emission 0 0 0 +smoothness 1 +type plane diff --git a/configs/demo_refraction1.txt b/configs/demo_refraction1.txt new file mode 100644 index 0000000..8901f63 --- /dev/null +++ b/configs/demo_refraction1.txt @@ -0,0 +1,217 @@ +# config +window_name Ray Tracing Refraction Demo 1 +window_size 1024 512 +pixel_shader_path shaders/ray_tracing/RayTracing.compute + +# shader data +reflections 18 +samples 1 +camera_position 60 20 -60 +camera_rotation -10 45 0 +sensitivity 10 +fov 40 + +# textures +texture_sky_path assets/textures/kiara_1_dawn_4k.hdr +texture_2_path assets/textures/grid.jpg + +# imported models +object_0 assets/objects/fox/fox.obj +object_1 assets/objects/plane.obj +object_2 assets/objects/cube.obj +object_3 assets/objects/disco.obj + +# transparent cube 1 +model +obj_id 2 +texture_albedo 0 +texture_specular 0 +texture_emission 0 +position 0 0 22.5 +rotation 0 90 0 +size 5 5 5 +albedo 0 0 0 +specular 0.9 0.9 0.9 +emission 0 0 0 +smoothness 1 +refractive_index 1.2 +transparency 1 +type 2 + +# transparent cube 2 +model +obj_id 2 +texture_albedo 0 +texture_specular 0 +texture_emission 0 +position -22.5 0 22.5 +rotation 0 90 0 +size 5 5 5 +albedo 0 0 0 +specular 0.7 0.7 0.7 +emission 0 0 0 +smoothness 1 +refractive_index 1.4 +transparency 0.99 +type 2 + +# transparent cube 3 +model +obj_id 2 +texture_albedo 0 +texture_specular 0 +texture_emission 0 +position 22.5 0 22.5 +rotation 0 90 0 +size 5 5 5 +albedo 0 0 0 +specular 0.8 0.8 0.8 +emission 0 0 0 +smoothness 0.95 +refractive_index 1.1 +transparency 0.99 +type 2 + +# transparent sphere +model +texture_albedo 0 +texture_specular 0 +texture_emission 0 +position 0 5 0 +rotation 0 90 0 +size 5 5 5 +albedo 0 0 0 +specular 1 1 1 +emission 0 0 0 +smoothness 1 +refractive_index 1.1 +transparency 0.99 +type sphere + +# transparent sphere +model +texture_albedo 0 +texture_specular 0 +texture_emission 0 +position -15 5 0 +rotation 0 90 0 +size 5 5 5 +albedo 0 0 0 +specular 1 1 1 +emission 0 0 0 +smoothness 1 +refractive_index 1.2 +transparency 0.99 +type sphere + +# transparent sphere +model +texture_albedo 0 +texture_specular 0 +texture_emission 0 +position -30 5 0 +rotation 0 90 0 +size 5 5 5 +albedo 0 0 0 +specular 1 1 1 +emission 0 0 0 +smoothness 1 +refractive_index 1.3 +transparency 0.99 +type sphere + +# transparent sphere +model +texture_albedo 0 +texture_specular 0 +texture_emission 0 +position 15 5 0 +rotation 0 90 0 +size 5 5 5 +albedo 0 0 0 +specular 1 1 1 +emission 0 0 0 +smoothness 0.95 +refractive_index 1.5 +transparency 0.99 +type sphere + +# transparent sphere +model +texture_albedo 0 +texture_specular 0 +texture_emission 0 +position 30 5 0 +rotation 0 90 0 +size 5 5 5 +albedo 0 0 0 +specular 1 1 1 +emission 0 0 0 +smoothness 0.5 +refractive_index 1.5 +transparency 0.99 +type sphere + +# transparent cube in +model +obj_id 2 +texture_albedo 0 +texture_specular 0 +texture_emission 0 +position 0 0 -30 +rotation 0 0 0 +size 10 10 10 +albedo 0 0 0 +specular 0.8 0.8 0.8 +emission 0 0 0 +smoothness 1 +refractive_index 1.1 +transparency 0.99 +type 2 + +# transparent cube in +model +obj_id 2 +texture_albedo 0 +texture_specular 0 +texture_emission 0 +position 0 2 -30 +rotation 0 0 0 +size 8 8 8 +albedo 0 0 0 +specular 0.8 0.8 0.8 +emission 0 0 0 +smoothness 1 +refractive_index 1.3 +transparency 0.99 +type 2 + +# transparent sphere in cube +model +texture_albedo 0 +texture_specular 0 +texture_emission 0 +position 0 9.5 -30 +rotation 0 0 0 +size 3 3 3 +albedo 0 0 0 +specular 0.8 0.8 0.8 +emission 0 0 0 +smoothness 1 +refractive_index 1.4 +transparency 0.99 +type sphere + +# plane +model +obj_id 1 +texture_albedo 2 +texture_specular 2 +texture_emission 0 +position -50 0 0 +rotation 0 0 90 +size 1 50 50 +albedo 1 1 1 +specular 0.1 0.1 0.1 +emission 0 0 0 +smoothness 1 diff --git a/configs/demo_refraction2.txt b/configs/demo_refraction2.txt new file mode 100644 index 0000000..82b4676 --- /dev/null +++ b/configs/demo_refraction2.txt @@ -0,0 +1,69 @@ +# config +window_name Ray Tracing Refraction Demo 2 +window_size 512 512 +pixel_shader_path shaders/ray_tracing/RayTracing.compute + +# shader data +reflections 12 +samples 1 +camera_position -20 10 -50 +camera_rotation -3 -22 0 +sensitivity 10 +fov 40 + +# textures +texture_sky_path assets/textures/kiara_1_dawn_4k.hdr +texture_2_path assets/textures/grid.jpg + +# imported models +object_1 assets/objects/plane.obj +object_2 assets/objects/cube.obj +object_3 assets/objects/disco.obj + +# transparent sphere mesh +model +obj_id 3 +texture_albedo 0 +texture_specular 0 +texture_emission 0 +position 0 3.5 0 +rotation 0 0 0 +size 2 2 2 +albedo 0 0 0 +specular 1 1 1 +emission 0 0 0 +smoothness 1 +refractive_index 1.8 +transparency 1 +type 2 + +# transparent sphere mesh +model +obj_id 2 +texture_albedo 0 +texture_specular 0 +texture_emission 0 +position 0 0 0 +rotation 0 0 0 +size 8 8 8 +albedo 0 0 0 +specular 1 1 1 +emission 0 0 0 +smoothness 1 +refractive_index 1.6 +transparency 1 +type 2 + +# plane +model +obj_id 1 +texture_albedo 2 +texture_specular 2 +texture_emission 0 +position -50 0 0 +rotation 0 0 90 +size 1 50 50 +albedo 1 1 1 +specular 0.1 0.1 0.1 +emission 0 0 0 +smoothness 1 \ No newline at end of file diff --git a/configs/demo_solar_system.txt b/configs/demo_solar_system.txt new file mode 100644 index 0000000..8587fd4 --- /dev/null +++ b/configs/demo_solar_system.txt @@ -0,0 +1,96 @@ +# config +window_name Ray Tracing +window_size 1024 512 +pixel_shader_path shaders/ray_tracing/RayTracing.compute +object_shader_path + +# shader data +reflections 15 +samples 20 +camera_position -92 3 -145 +camera_rotation -2 -10 0 +sensitivity 10 +fov 40 + +# textures +texture_sky_path assets/textures/m_way2.hdr +texture_1_path assets/textures/8k_earth_nightmap.jpg +texture_2_path assets/textures/8k_moon.jpg +texture_3_path assets/textures/8k_mars.jpg +texture_4_path assets/textures/8k_earth_daymap.jpg +texture_5_path assets/textures/8k_venus_surface.jpg + +# imported models +object_1 assets/objects/plane.obj +object_2 assets/objects/cube.obj +object_3 assets/objects/cubeUV.obj + +# earth +model +texture_albedo 4 +texture_specular 0 +texture_emission 1 +position -100 0 -120 +rotation 0 0 0 +size 5 5 5 +albedo 1 1 1 +specular 0 0 0 +emission 0.05 0.05 0.05 +smoothness 1 +type sphere + +# venus +model +texture_albedo 5 +texture_specular 0 +texture_emission 0 +position 30 0 -20 +rotation 0 0 0 +size 3 3 3 +albedo 1 1 1 +specular 0 0 0 +emission 0 0 0 +smoothness 1 +type sphere + +# moon +model +texture_albedo 2 +texture_specular 0 +texture_emission 0 +position -100 10 -80 +rotation 0 -45 0 +size 2 2 2 +albedo 1 1 1 +specular 0.01 0.01 0.01 +emission 0 0 0 +smoothness 0.3 +type sphere + + +# mars +model +texture_albedo 3 +texture_specular 0 +texture_emission 0 +position -30 0 200 +rotation 0 -45 0 +size 7 7 7 +albedo 1 1 1 +specular 0 0 0 +emission 0 0 0 +transparency 0 +type sphere + +# sun +model +texture_albedo 0 +texture_specular 0 +texture_emission 0 +position 0 0 0 +rotation 0 0 0 +size 2 2 2 +albedo 1 1 1 +specular 1 1 1 +emission 2000 1200 800 +type sphere \ No newline at end of file diff --git a/make.bat b/make.bat new file mode 100644 index 0000000..318908e --- /dev/null +++ b/make.bat @@ -0,0 +1,8 @@ +@echo off + +set GLFW_ROOT=C:/lib/glfw-3.3.4.bin.WIN64 +set GLEW_ROOT=C:/lib/glew-2.1.0_x64 +set stb_image_ROOT=C:/lib/stb +set ComputeEngine_ROOT=C:/VisualStudioProjects/ComputeEngine + +cmake -B build -S . -DGLFW_ROOT=%GLFW_ROOT% -DGLEW_ROOT=%GLEW_ROOT% -Dstb_image_ROOT=%stb_image_ROOT% -DComputeEngine_ROOT=%ComputeEngine_ROOT% \ No newline at end of file diff --git a/remake.bat b/remake.bat new file mode 100644 index 0000000..5b690da --- /dev/null +++ b/remake.bat @@ -0,0 +1,2 @@ +rmdir /s /q build +make.bat \ No newline at end of file diff --git a/screenshots/fox1.png b/screenshots/fox1.png new file mode 100644 index 0000000..c5f202a Binary files /dev/null and b/screenshots/fox1.png differ diff --git a/screenshots/fox2.png b/screenshots/fox2.png new file mode 100644 index 0000000..e6705d5 Binary files /dev/null and b/screenshots/fox2.png differ diff --git a/screenshots/objects1.png b/screenshots/objects1.png new file mode 100644 index 0000000..f0634c5 Binary files /dev/null and b/screenshots/objects1.png differ diff --git a/screenshots/objects2.png b/screenshots/objects2.png new file mode 100644 index 0000000..2806990 Binary files /dev/null and b/screenshots/objects2.png differ diff --git a/screenshots/objects3.jpg b/screenshots/objects3.jpg new file mode 100644 index 0000000..b44e1cb Binary files /dev/null and b/screenshots/objects3.jpg differ diff --git a/screenshots/objects4.jpg b/screenshots/objects4.jpg new file mode 100644 index 0000000..049290d Binary files /dev/null and b/screenshots/objects4.jpg differ diff --git a/screenshots/refraction1.png b/screenshots/refraction1.png new file mode 100644 index 0000000..e4e143d Binary files /dev/null and b/screenshots/refraction1.png differ diff --git a/screenshots/refraction2.png b/screenshots/refraction2.png new file mode 100644 index 0000000..1a09f6b Binary files /dev/null and b/screenshots/refraction2.png differ diff --git a/screenshots/refraction3.png b/screenshots/refraction3.png new file mode 100644 index 0000000..e218696 Binary files /dev/null and b/screenshots/refraction3.png differ diff --git a/screenshots/solar_system1.png b/screenshots/solar_system1.png new file mode 100644 index 0000000..389b4b8 Binary files /dev/null and b/screenshots/solar_system1.png differ diff --git a/screenshots/solar_system2.png b/screenshots/solar_system2.png new file mode 100644 index 0000000..659c8bf Binary files /dev/null and b/screenshots/solar_system2.png differ diff --git a/shaders/ray_tracing/RayTracing.compute b/shaders/ray_tracing/RayTracing.compute new file mode 100644 index 0000000..c58e152 --- /dev/null +++ b/shaders/ray_tracing/RayTracing.compute @@ -0,0 +1,777 @@ +#version 430 core +#define PI 3.1415926538f + +layout(local_size_x = 8, local_size_y = 8) in; + +layout(rgba32f) uniform image2D img_output; +uniform sampler2D u_skybox; +uniform sampler2D u_tex1; +uniform sampler2D u_tex2; +uniform sampler2D u_tex3; +uniform sampler2D u_tex4; +uniform sampler2D u_tex5; + +precision highp float; + +struct SceneObject{ + vec4 position; + vec4 size; + vec4 orientation; + vec4 albedo; + vec4 specular; + vec4 emission; + ivec4 texture_id; + float refractive_index; + float transparency; + float smoothness; + int type; + int offset; + int vert_num; + int obj_id; + int padding; +}; + +struct Ray{ + vec3 origin; + vec3 direction; + vec3 color; +}; + +layout(std140, binding=2) uniform shader_data{ + vec4 _camera_position; // 4 4 + vec4 _camera_rotation; // 4 8 + vec2 _pixel_offset; // 2 10 + ivec2 _screen_size; // 2 12 + int _iterations; // 1 13 + float _seed; // 1 14 + int _object_count; // 1 15 + int _sample; // 1 16 + int _samples_per_frame; // 1 17 + int _fov; // 1 18 + vec2 padding; // 2 20 +}; +layout (std140, binding = 3) uniform object_data{ + SceneObject objects[1]; +}; +layout (std430, binding = 4) buffer index_buffer{ + int faces[]; +}; +layout (std430, binding = 5) buffer vert_buffer{ + float vertices[]; +}; +layout (std430, binding = 6) buffer texture_vert_buffer{ + float t_vertices[]; +}; + +uniform float u_gamma; + +float distlimit = 10000.0f; +float seed = _seed; +vec2 pixel_id; + +vec3 DegToRad(vec3 vect){ + return vect * float(PI)/180.0f; +} + +float saturate(float value){ + return clamp(value,0.0,1.0); +} + +float sdot(vec3 x, vec3 y){ + float f = 1.0f; + return saturate(dot(x, y) * f); +} + +float sdot(vec3 x, vec3 y, float f){ + return saturate(dot(x, y) * f); +} + +// A single iteration of Bob Jenkins' One-At-A-Time hashing algorithm. +uint hash( uint x ) { + x += ( x << 10u ); + x ^= ( x >> 6u ); + x += ( x << 3u ); + x ^= ( x >> 11u ); + x += ( x << 15u ); + return x; +} + +uint hash( uvec3 v ) { return hash( v.x ^ hash(v.y) ^ hash(v.z) ); } +// Construct a float with half-open range [0:1] using low 23 bits. +// All zeroes yields 0.0, all ones yields the next smallest representable value below 1.0. +float floatConstruct( uint m ) { + const uint ieeeMantissa = 0x007FFFFFu; // binary32 mantissa bitmask + const uint ieeeOne = 0x3F800000u; // 1.0 in IEEE binary32 + + m &= ieeeMantissa; // Keep only mantissa bits (fractional part) + m |= ieeeOne; // Add fractional part to 1.0 + + float f = uintBitsToFloat( m ); // Range [1:2] + return f - 1.0; // Range [0:1] +} + +// Pseudo-random value in half-open range [0:1]. +float Rand() { seed += 1.0f; return floatConstruct(hash(floatBitsToUint(vec3(pixel_id, seed)))); } + +float SmoothnessToPhongAlpha(float s){ + return pow(1000.0f, s * s); +} + +mat3x3 GetTangentSpace(vec3 n){ + // Choose a helper vector for the cross product + vec3 helper = vec3(1, 0, 0); + if (abs(n.x) > 0.99f) + helper = vec3(0, 0, 1); + // Generate vectors + vec3 t = normalize(cross(n, helper)); + vec3 b = normalize(cross(n, t)); + return mat3x3( + t.x, b.x, n.x, + t.y, b.y, n.y, + t.z, b.z, n.z + ); +} + +vec3 SampleHemisphere(vec3 normal, float alpha){ + // Sample the hemisphere, where alpha determines the kind of the sampling + float cosTheta = pow(Rand(), 1.0f / (alpha + 1.0f)); + float sinTheta = sqrt(1.0f - cosTheta * cosTheta); + float phi = 2 * PI * Rand(); + vec3 tangentSpaceDir = vec3(cos(phi) * sinTheta, sin(phi) * sinTheta, cosTheta); + // Transform direction to world space + return normalize(tangentSpaceDir * GetTangentSpace(normal)); +} + +vec3 RefractRay(vec3 direction, vec3 n, float n1, float n2){ + vec3 new_direction; + + direction = normalize(direction); + n = normalize(n); + + float dotp = dot(n, -direction); + + float ratio = n1/n2; + + vec3 e1 = (ratio * direction); // n1/n2 * i + float e2 = (ratio * dotp); // n1/n2 * cosB + float e3 = (ratio * ratio) * (1.0f - (dotp * dotp)); // (n1/n2)^2 * (1 - cosB^2) + + new_direction = e1 + ((e2 - sqrt(1.0f - e3)) * n); // n1/n2 * i + (n1/n2 * cosB - /(1 - sinT^2) * n + + return normalize(new_direction); +} + +float GetReflectance(vec3 direction, vec3 normal, float n1, float n2){ + float raycast; + + float cosI = dot(-direction, normal); + float ratio = n1/n2; + + float sin2T = (ratio * ratio) * (1.0f - (cosI * cosI)); + if(sin2T <= 1.0f){ + // Reflection or Transmission + float cosT = sqrt(1.0f - sin2T); + + float R1 = pow((n1 * cosI - n2 * cosT)/(n1 * cosI + n2 * cosT), 2); + float R2 = pow((n2 * cosI - n1 * cosT)/(n2 * cosI + n1 * cosT), 2); + + float Ravg = (R1 + R2) / 2.0f; + + raycast = Ravg; + }else{ + // Total Internal Reflection + raycast = 1.0f; + } + return raycast; +} + +vec3 RotateVector(vec3 vect, vec3 rotation){ + rotation = DegToRad(rotation); + + float xr = rotation.x; + float yr = rotation.y; + float zr = rotation.z; + + mat3x3 Rx = mat3x3( + 1, 0, 0, + 0, cos(xr), -sin(xr), + 0, sin(xr), cos(xr) + ); + + mat3x3 Ry = mat3x3( + cos(yr), 0, sin(yr), + 0, 1, 0, + -sin(yr), 0, cos(yr) + ); + + mat3x3 Rz = mat3x3( + cos(zr), -sin(zr), 0, + sin(zr), cos(zr), 0, + 0, 0, 1 + ); + + return (((Ry*Rx)*Rz)*vect); +} + +Ray CreateRay(vec3 origin, vec3 direction){ + Ray ray; + ray.origin = origin; + ray.direction = normalize(direction); + return ray; +} + +Ray CreateCameraRay(float x, float y){ + float n = 0.1f; + float fov_v = (float(_fov)/2.0f) * (PI/180.0f); + float ratio = (float(_screen_size.x)/float(_screen_size.y)); + float fov_h = atan( tan(fov_v) * ratio ); + + x = (x - 0.5f) * 2; + y = (y - 0.5f) * 2; + + vec3 plane = vec3(x * tan(fov_h) * n,y * tan(fov_v) * n,n); + vec3 direction = RotateVector(normalize(plane),_camera_rotation.xyz); + + return CreateRay(_camera_position.xyz,direction); +} + +vec4 CheckIntersectionWithSphere(vec3 r1, vec3 r2, int i){ + vec3 oc = r1 - objects[i].position.xyz; + + float a = dot(r2,r2); + float b = 2.0f * dot(oc, r2); + float c = dot(oc, oc) - objects[i].size.x * objects[i].size.x; + + float p = c/a; + float q = -b/a; + + float d = b * b - (4 * a * c); + + if(p < 0){ + //inside + float val = (-b + sqrt(d)) / (2.0f*a); + vec3 hit = r1 + r2 * val; + return vec4(r1 + r2 * val, val); + }else{ + if(q > 0){ + //hit + float val = (-b - sqrt(d)) / (2.0f*a); + vec3 hit = r1 + r2 * val; + return vec4(r1 + r2 * val, val); + }else{ + //not hit + return vec4(vec3(0,0,0),-1.0f); + } + } + +} + +vec4 CheckIntersectionWithPlane(vec3 r1, vec3 r2, int i){ + vec3 normal = normalize(RotateVector(vec3(0,1,0), objects[i].orientation.xyz)); + float dotP = dot(normal, r2); + vec3 pos = objects[i].position.xyz; + + int ans = int(abs(dotP) >= 0.001f); + + float d = dot((pos - r1),normal)/dotP; + return vec4(r1 + r2 * d, ans * (d + 1) - 1); + + if(abs(dotP) >= 0.001f){ + float d = dot((pos - r1),normal)/dotP; + + if(d < 0) + return vec4(vec3(0,0,0),-1.0f); + + return vec4(r1 + r2 * d, d); + } + + return vec4(vec3(0,0,0),-1.0f); +} + +vec3 GetTriangleVertex(int id, int object_id){ + vec3 pos = objects[object_id].position.xyz; + vec3 size = objects[object_id].size.xyz; + vec3 rotation = objects[object_id].orientation.xyz; + + id = id * 3; + + vec3 vertex_from_array = vec3(vertices[id], vertices[id+1], vertices[id+2]); + + vec3 vert = RotateVector(vertex_from_array * size, rotation); + + return vert + pos; +} + +vec2 GetTriangleUV(int id){ + id = id * 2; + + vec2 vertex_from_array = vec2(t_vertices[id], t_vertices[id+1]); + + return vertex_from_array; +} + +vec4 CheckIntersectionWithTriangleUV(vec3 r1, vec3 r2, int face_id, int object_id, inout vec2 uv, inout vec3 normal){ + const float EPSILON = 0.0000001; + + vec3 pos = objects[object_id].position.xyz; + vec3 size = objects[object_id].size.xyz; + + vec3 vertex0 = GetTriangleVertex(faces[(face_id * 6) + 0], object_id); + vec3 vertex1 = GetTriangleVertex(faces[(face_id * 6) + 1], object_id); + vec3 vertex2 = GetTriangleVertex(faces[(face_id * 6) + 2], object_id); + + vec3 edge1, edge2, h, s, q; + float a,f; + edge1 = vertex1 - vertex0; + edge2 = vertex2 - vertex0; + h = cross(r2, edge2); + + vec3 N = cross(edge1,edge2); // N + + bool reverse = dot(N, r2) > 0; + + normal = (reverse ? -1 : 1) * normalize(N); + + a = dot(edge1, h); + + if (a > -EPSILON && a < EPSILON) + return vec4(0.0f, 0.0f, 0.0f, -1.0f); // This ray is parallel to this triangle. + f = 1.0/a; + s = r1 - vertex0; + uv.x = f * dot(s, h); + if (uv.x < 0.0 || uv.x > 1.0) + return vec4(0.0f, 0.0f, 0.0f, -1.0f); // This ray is parallel to this triangle. + q = cross(s, edge1); + uv.y = f * dot(r2, q); + if (uv.y < 0.0 || uv.x + uv.y > 1.0) + return vec4(0.0f, 0.0f, 0.0f, -1.0f); // This ray is parallel to this triangle. + // At this stage we can compute t to find out where the intersection point is on the line. + float t = f * dot(edge2, q); + if (t > EPSILON) // ray intersection + { + // map uv + + float u = uv.x; + float v = uv.y; + float w = 1.0 - uv.x - uv.y; + + // A(v0) - w + // B(v1) - u + // C(v2) - v + + vec2 uv0 = GetTriangleUV(faces[(face_id * 6) + 3]); + vec2 uv1 = GetTriangleUV(faces[(face_id * 6) + 4]); + vec2 uv2 = GetTriangleUV(faces[(face_id * 6) + 5]); + + uv = uv0 * w + uv1 * u + uv2 * v; + + return vec4(r1 + r2 * t, t); // This ray is parallel to this triangle. + } + else // This means that there is a line intersection but not a ray intersection. + return vec4(0.0f, 0.0f, 0.0f, -1.0f); // This ray is parallel to this triangle. +} + +vec4 CheckIntersectionWithMesh(vec3 r1, vec3 r2, int object_id, inout vec3 normal, inout vec2 uv){ + vec4 raycast; + float val = 100000.0f; + vec3 hit_point; + vec3 temp_normal; + vec2 temp_uv; + + int vert_num = objects[object_id].vert_num; + int offset = objects[object_id].offset; + for(int i = 0; i < vert_num; i++){ + + raycast = CheckIntersectionWithTriangleUV(r1, r2, offset + i, object_id, temp_uv, temp_normal); + + if (raycast.w >= 0 && raycast.w < val){ + hit_point = raycast.xyz; + val = raycast.w; + normal = temp_normal; + uv = temp_uv; + } + } + + return vec4(hit_point, val); +} + +float GetEnergy(vec3 color){ + return dot(color, vec3(1.0f / 3.0f)); +} + +vec3 GetTextureColor(vec2 uv, int object_id, int map){ + int id = objects[object_id].texture_id[map]; + switch(id){ + case 0: + return vec3(1.0f,1.0f,1.0f); + case 1: + return texture(u_tex1, uv).xyz; + case 2: + return texture(u_tex2, uv).xyz; + case 3: + return texture(u_tex3, uv).xyz; + case 4: + return texture(u_tex4, uv).xyz; + case 5: + return texture(u_tex5, uv).xyz; + default: + return vec3(1.0f,1.0f,1.0f); + } +} + +vec3 GetNormal_old(vec3 pos, int object_id){ + + vec3 normal = vec3(0,1,0); + + if(objects[object_id].type == 0) //sphere + normal = normalize(pos - objects[object_id].position.xyz); + else if(objects[object_id].type == 1) //plane + normal = normalize(RotateVector(vec3(0,1,0), objects[object_id].orientation.xyz)); + else if(objects[object_id].type == 2){ //mesh + int v_offset = objects[object_id].offset; + + + vec3 v0 = GetTriangleVertex(faces[(v_offset * 6) + 0], object_id); + vec3 v1 = GetTriangleVertex(faces[(v_offset * 6) + 1], object_id); + vec3 v2 = GetTriangleVertex(faces[(v_offset * 6) + 2], object_id); + + vec3 A = v1 - v0; // edge 0 + vec3 B = v2 - v0; // edge 1 + normal = normalize(cross(A, B)); + } + + return normal; +} + +vec3 GetNormal(vec3 pos, vec3 dir, int object_id){ + + vec3 normal = vec3(0,1,0); + + if(objects[object_id].type == 0) //sphere + normal = normalize(pos - objects[object_id].position.xyz); + else if(objects[object_id].type == 1) //plane + normal = normalize(RotateVector(vec3(0,1,0), objects[object_id].orientation.xyz)); + else if(objects[object_id].type == 2){ //mesh + int v_offset = objects[object_id].offset; + + + vec3 v0 = GetTriangleVertex(faces[(v_offset * 6) + 0], object_id); + vec3 v1 = GetTriangleVertex(faces[(v_offset * 6) + 1], object_id); + vec3 v2 = GetTriangleVertex(faces[(v_offset * 6) + 2], object_id); + + vec3 A = v1 - v0; // edge 0 + vec3 B = v2 - v0; // edge 1 + normal = normalize(cross(A, B)); + } + bool reverse = dot(normal, dir) > 0; + + normal = (reverse ? -1 : 1) * normalize(normal); + + return normal; +} +vec3 GetNormal(vec3 pos, vec3 dir, int object_id, inout bool reversed){ + + vec3 normal = vec3(0,1,0); + + if(objects[object_id].type == 0) //sphere + normal = normalize(pos - objects[object_id].position.xyz); + else if(objects[object_id].type == 1) //plane + normal = normalize(RotateVector(vec3(0,1,0), objects[object_id].orientation.xyz)); + else if(objects[object_id].type == 2){ //mesh + int v_offset = objects[object_id].offset; + + + vec3 v0 = GetTriangleVertex(faces[(v_offset * 6) + 0], object_id); + vec3 v1 = GetTriangleVertex(faces[(v_offset * 6) + 1], object_id); + vec3 v2 = GetTriangleVertex(faces[(v_offset * 6) + 2], object_id); + + vec3 A = v1 - v0; // edge 0 + vec3 B = v2 - v0; // edge 1 + normal = normalize(cross(A, B)); + } + reversed = dot(normal, dir) > 0; + + normal = (reversed ? -1 : 1) * normalize(normal); + + return normal; +} + +vec4 CastRay(Ray ray, inout vec3 normal, inout vec2 uv){ + int object_id = -1; + vec4 raycast; + float val = distlimit; + vec3 hit_point; + + vec3 temp_normal; + vec2 temp_uv; + + for(int i = 0; i < _object_count; i++){ + vec3 r1 = ray.origin; + vec3 r2 = ray.direction; + vec3 op = objects[i].position.xyz; + float r = objects[i].size.x; + + if(objects[i].type == 0){ + raycast = CheckIntersectionWithSphere(r1,r2,i); + if(raycast.w > 0){ + bool reversed; + temp_normal = GetNormal(raycast.xyz,r2,i,reversed); + float theta = 1.0f - (acos((reversed ? -1 : 1) * temp_normal.y) / PI); + float phi = atan((reversed ? -1 : 1) * temp_normal.z, (reversed ? -1 : 1) * temp_normal.x) / (2 * PI) + 0.5f; + temp_uv.x = mod((phi + (objects[i].orientation[1] / (2.0 * PI))), 1); + temp_uv.y = theta; + } + } + else if(objects[i].type == 1){ + raycast = CheckIntersectionWithPlane(r1,r2,i); + if(raycast.w > 0) + temp_normal = GetNormal(raycast.xyz,r2, i); + } + else if(objects[i].type == 2){ + raycast = CheckIntersectionWithMesh(r1,r2,i, temp_normal, temp_uv); + } + else + raycast = vec4(0,0,0,distlimit); + + if (raycast.w >= 0 && raycast.w < val){ + hit_point = raycast.xyz; + val = raycast.w; + object_id = i; + normal = temp_normal; + uv = temp_uv; + } + } + + return vec4(hit_point,object_id); +} + +vec3 GetSkyColor(vec3 direction){ + float theta = 1.0f - (acos(direction.y) / PI); + float phi = atan(direction.x, direction.z) / (2 * PI) + 0.5f; + return texture(u_skybox, vec2(phi, theta)).xyz; +} + +void main(){ + ivec2 id = ivec2(gl_GlobalInvocationID.xy); + vec4 pixel = vec4(0.0f, 0.0f, 0.0f, 1.0f); + vec4 raycast; + vec4 raycast_n; + vec3 color; + vec3 reflection; + vec3 normal; + vec3 albedo; + vec3 specular; + vec3 energy; + vec2 offset = _pixel_offset; + vec2 uv; + Ray reflection_ray; + Ray camera_ray; + float x, y; + float diffuse_chance; + float specular_chance; + float refraction_chance; + float sum; + float roulette; + float f; + float alpha; + float dist; + float air_transparency = 1.0f; + int face_id; + int object_id; + + bool inside_object[100]; + float refractive_indices_queue[100]; + refractive_indices_queue[0] = air_transparency; + int refractive_indices_count = 1; + for(int i = 0; i < 100; i++){ + inside_object[i] = false; + } + + pixel_id = id; + + for(int s = 0; s < _samples_per_frame; s++){ + // map x,y to [0,1] + x = (((float(id.x) - 0.5f + offset.x)/_screen_size.x)); + y = (((float(id.y) - 0.5f + offset.y)/_screen_size.y)); + + // new random offset + offset = vec2(1.0f * (abs(Rand()) - 0.5f) ,1.0f * (abs(Rand()) - 0.5f)); + + color = vec3(0.0f, 0.0f, 0.0f); + + // get pixel for random generator + pixel_id = vec2(id) + offset; + + // create a ray and cast it + camera_ray = CreateCameraRay(x,y); + raycast = CastRay(camera_ray, normal, uv); + object_id = int(raycast.w); + + // if hit any object + if(object_id >= 0){ + + // calculate distance between rays + dist = length(_camera_position.xyz - raycast.xyz); + + // initial energy values + energy = vec3(1.0f, 1.0f, 1.0f); + + // add emmission from map + color += objects[object_id].emission.xyz * GetTextureColor(uv, object_id, 3); + //color += normal; + reflection_ray = camera_ray; + + // recast ray multiple times + for(int i = 0; i < _iterations; i++){ + + roulette = Rand(); + + // get specular and albedo + specular = objects[object_id].specular.xyz * GetTextureColor(uv, object_id, 1); + albedo = min(1.0f - specular, objects[object_id].albedo.xyz * GetTextureColor(uv, object_id, 0)); + + // check if object is translucent + bool translucent = (objects[object_id].transparency > 0.01f); + + if(translucent){ + // refractive indicies + float n1; + float n2; + + // 0 -> 1 + if(!inside_object[object_id]){ + // n1 is set to last index + n1 = refractive_indices_queue[refractive_indices_count-1]; + // n2 is set to new object + n2 = objects[object_id].refractive_index; + } + else{ // 1 -> 0 + // n1 is set to last index + n1 = refractive_indices_queue[refractive_indices_count-1]; + // n2 is set to the one before that + n2 = refractive_indices_queue[refractive_indices_count-2]; + } + + f = 1.0f; + if(objects[object_id].smoothness <= 0.9999f){ + alpha = SmoothnessToPhongAlpha(objects[object_id].smoothness); + normal = SampleHemisphere(normal, alpha); + f = (alpha + 2) / (alpha + 1); + } + + // calculate reflection and transmission + float val_R = GetReflectance(reflection_ray.direction.xyz, normal, n1, n2); + float val_T = 1.0f - val_R; + + bool refract = (roulette < val_T); + + bool entering = !inside_object[object_id]; + // update queue + if(refract){ + inside_object[object_id] = !inside_object[object_id]; + reflection = RefractRay(reflection_ray.direction, normal, n1, n2); + if(entering){ + // add n2 to queue + refractive_indices_count++; + refractive_indices_queue[refractive_indices_count - 1] = n2; + }else{ + // leaving (1 -> 0) + refractive_indices_count--; + } + } + else{ + reflection = reflect(reflection_ray.direction, normal); + // no change to queue + } + + vec3 ray_normal; + if(refract) + ray_normal = normal * -1; + else + ray_normal = normal; + + // create and cast reflection ray + reflection_ray = CreateRay(raycast.xyz + ray_normal * 0.001f, reflection); + + // calculate loss due to partial transparency + float transmittance = 1; + if(!entering) + transmittance = pow(10, -1 * (1.0f - objects[object_id].transparency) * dist); + + // update energy + energy *= specular * transmittance; + } + else{ + // calculate chances + diffuse_chance = GetEnergy(albedo.xyz) + 0.0001f; + specular_chance = GetEnergy(specular.xyz) + 0.0001f; + sum = diffuse_chance + specular_chance; + diffuse_chance /= sum; + specular_chance /= sum; + + if(roulette < diffuse_chance){ + //diffuse + reflection = SampleHemisphere(normal, 1.0f); + + // update energy + energy *= albedo * 2 * sdot(normal, reflection); + }else{ + // specular + reflection = normalize(reflection_ray.direction - 2 * dot(reflection_ray.direction, normal) * normal); + f = 1.0f; + if(objects[object_id].smoothness <= 0.9999f){ + alpha = SmoothnessToPhongAlpha(objects[object_id].smoothness); + reflection = SampleHemisphere(reflection, alpha); + f = (alpha + 2) / (alpha + 1); + } + + // update energy + energy *= specular * 2 * sdot(normal, reflection); + } + + //create and cast reflected ray + reflection_ray = CreateRay(raycast.xyz + normal * 0.001f, reflection); + } + + // cast new ray + raycast_n = CastRay(reflection_ray, normal, uv); + object_id = int(raycast_n.w); + + //if hit sky, break and get color * energy + if(object_id == -1){ + color += energy * GetSkyColor(reflection_ray.direction); + + break; + }else{ + color += energy * objects[object_id].emission.xyz * GetTextureColor(uv, object_id, 3); + + dist = length(raycast_n.xyz - raycast.xyz); + } + + // if energy is low, no need to keep going + if((energy.x + energy.y + energy.z <= 0.01f && i > 1)){ + break; + } + + raycast = raycast_n; + } + } + else{ + // sample skybox + color = GetSkyColor(camera_ray.direction); + } + + // add sample + pixel += vec4(color.xyz, 0.0f); + } + + // get average over samples + pixel = vec4(pixel.xyz/float(_samples_per_frame), 1.0f); + + // update the new average + vec4 old = imageLoad(img_output, id); + pixel = old + (vec4(pixel) - old)/_sample; + + // update pixel in texture + imageStore(img_output, id, pixel); +} \ No newline at end of file diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 0000000..834375c --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,10 @@ +target_sources(${PROJECT_NAME} +PUBLIC +main.cpp +DataStructures.cpp +DataStructures.h +Utils.cpp +Utils.h +Config.cpp +Config.h +) \ No newline at end of file diff --git a/src/Config.cpp b/src/Config.cpp new file mode 100644 index 0000000..4e4f701 --- /dev/null +++ b/src/Config.cpp @@ -0,0 +1,270 @@ +#include + +Config::Config(std::string path) { + LoadConfigFile(path); +} + +std::vector* Config::GetObjects() +{ + return &m_objects; +} + +int Config::GetVertexCount() +{ + return m_buffer.GetVertexCount(); +} + +int Config::GetFaceCount() +{ + return m_buffer.GetFaceCount(); +} +int Config::GetObjectCount() +{ + return (int)m_objects.size(); +} + +Config::Config() { + +} + +bool Config::LoadConfigFile(std::string path) +{ + + std::fstream file(path); + + std::string line; + std::stringstream str; + + std::string prefix; + + int vertex_id = 0; + + float x, y, z; + int ix, iy, iz; + std::string data; + + bool reading_object = false; + while (std::getline(file, line)) { + str.clear(); + str.str(line); + str >> prefix; + + if (line.length() == 0) + continue; + if (line[0] == '#') + continue; + + if (prefix == "window_name") { + m_window_name = line.substr(prefix.length() + 1, line.length() - prefix.length()); + } + else if (prefix == "window_size") { + str >> ix >> iy; + m_window_width = ix; + m_window_height = iy; + } + else if (prefix == "start_focused") { + data = line.substr(prefix.length() + 1, line.length() - prefix.length() - 1); + if (data == "true" || data == "1") + m_start_focused = true; + else + m_start_focused = false; + } + else if (prefix == "pixel_shader_path") { + data = line.substr(prefix.length() + 1, line.length() - prefix.length() - 1); + m_pixel_shader_path = data; + } + else if (prefix == "object_shader_path") { + data = line.substr(prefix.length() + 1, line.length() - prefix.length() - 1); + m_object_shader_path = data; + } + else if (prefix == "texture_sky_path") { + data = line.substr(prefix.length() + 1, line.length() - prefix.length() - 1); + m_texture_sky_path = data; + } + else if (prefix == "texture_1_path") { + data = line.substr(prefix.length() + 1, line.length() - prefix.length() - 1); + m_texture_1_path = data; + } + else if (prefix == "texture_2_path") { + data = line.substr(prefix.length() + 1, line.length() - prefix.length() - 1); + m_texture_2_path = data; + } + else if (prefix == "texture_3_path") { + data = line.substr(prefix.length() + 1, line.length() - prefix.length() - 1); + m_texture_3_path = data; + } + else if (prefix == "texture_4_path") { + data = line.substr(prefix.length() + 1, line.length() - prefix.length() - 1); + m_texture_4_path = data; + } + else if (prefix == "texture_5_path") { + data = line.substr(prefix.length() + 1, line.length() - prefix.length() - 1); + m_texture_5_path = data; + } + else if (prefix == "reflections") { + str >> m_iterations; + } + else if (prefix == "samples") { + str >> m_samples_per_frame; + } + else if (prefix == "fov") { + str >> m_fov; + } + else if (prefix == "sensitivity") { + str >> m_camera_sensitivity; + } + else if (prefix == "camera_position") { + str >> x >> y >> z; + m_camera_position = { x, y, z }; + } + else if (prefix == "camera_rotation") { + str >> x >> y >> z; + m_camera_rotation = { x, y, z }; + } + else if (prefix == "model") { + reading_object = true; + m_objects.push_back(SceneObject()); + } + else if (prefix.find("object_") != -1) { + data = prefix.substr(7, prefix.length() - 6 - 1); + int id = stoi(data); + m_models.push_back(Model3D()); + m_models.back().SetId(id); + data = line.substr(prefix.length() + 1, line.length() - prefix.length() - 1); + m_models.back().Load(data); + } + else if (prefix == "model") { + reading_object = true; + m_objects.push_back(SceneObject()); + } + else if (prefix == "obj_id") { + str >> ix; + m_objects.back().type = 2; + m_objects.back().obj_id = ix; + } + else if (prefix == "texture_albedo") { + str >> ix; + m_objects.back().texture_id[0] = ix; + } + else if (prefix == "texture_specular") { + str >> ix; + m_objects.back().texture_id[1] = ix; + } + else if (prefix == "texture_emission") { + str >> ix; + m_objects.back().texture_id[3] = ix; + } + else if (prefix == "position") { + str >> x >> y >> z; + m_objects.back().position = { x, y, z }; + } + else if (prefix == "rotation") { + str >> x >> y >> z; + m_objects.back().orientation = { x, y, z }; + } + else if (prefix == "size") { + str >> x >> y >> z; + m_objects.back().size = { x, y, z }; + } + else if (prefix == "albedo") { + str >> x >> y >> z; + m_objects.back().albedo = { x, y, z }; + } + else if (prefix == "specular") { + str >> x >> y >> z; + m_objects.back().specular = { x, y, z }; + } + else if (prefix == "emission") { + str >> x >> y >> z; + m_objects.back().emission = { x, y, z }; + } + else if (prefix == "smoothness") { + str >> x; + m_objects.back().smoothness = x; + } + else if (prefix == "refractive_index") { + str >> x; + m_objects.back().refractive_index = x; + } + else if (prefix == "transparency") { + str >> x; + m_objects.back().transparency = x; + } + else if (prefix == "type") { + data = line.substr(prefix.length() + 1, line.length() - prefix.length() - 1); + if (data == "sphere") + m_objects.back().type = 0; + else if (data == "plane") + m_objects.back().type = 1; + } + } + + for (int i = 0; i < m_models.size(); i++) + m_buffer.AddModel(&m_models[i]); + m_buffer.FillBuffers(); + + for (int i = 0; i < m_objects.size(); i++) { + if (m_objects[i].type == 2) { + // find object + for (int j = 0; j < m_models.size(); j++) + if (m_models[j].GetId() == m_objects[i].obj_id) { + // set offsets + m_objects[i].offset = m_models[j].GetIndexOffset(); + m_objects[i].vert_num = m_models[j].GetFaceCount(); + } + } + } + + return true; +} + +bool Config::BindTextures(Program& program) +{ + if (m_texture_sky_path != "") { + m_tex_sky = new Texture("u_skybox", m_texture_sky_path); + } + if (m_texture_1_path != "") { + m_tex_1 = new Texture("u_tex1", m_texture_1_path); + } + if (m_texture_2_path != "") { + m_tex_2 = new Texture("u_tex2", m_texture_2_path); + } + if (m_texture_3_path != "") { + m_tex_3 = new Texture("u_tex3", m_texture_3_path); + } + if (m_texture_4_path != "") { + m_tex_4 = new Texture("u_tex4", m_texture_4_path); + } + if (m_texture_5_path != "") { + m_tex_5 = new Texture("u_tex5", m_texture_5_path); + } + if (m_texture_sky_path != "") { + program.BindTexture(m_tex_sky, 0); + } + if (m_texture_1_path != "") { + program.BindTexture(m_tex_1, 1); + } + if (m_texture_2_path != "") { + program.BindTexture(m_tex_2, 2); + } + if (m_texture_3_path != "") { + program.BindTexture(m_tex_3, 3); + } + if (m_texture_4_path != "") { + program.BindTexture(m_tex_4, 4); + } + if (m_texture_5_path != "") { + program.BindTexture(m_tex_5, 5); + } + return true; +} + +std::vector* Config::GetIndexBuffer() { + return m_buffer.GetIndexBuffer(); +} +std::vector* Config::GetTextureBuffer() { + return m_buffer.GetTextureBuffer(); +} +std::vector* Config::GetVertexBuffer() { + return m_buffer.GetVertexBuffer(); +} diff --git a/src/Config.h b/src/Config.h new file mode 100644 index 0000000..ea92f6f --- /dev/null +++ b/src/Config.h @@ -0,0 +1,54 @@ +#pragma once +#include "DataStructures.h" +#include "ComputeEngine.h" + +class Config { +public: + SceneVertices m_buffer; + + std::vector m_models; + std::vector m_objects; + std::vector m_textures; + + std::string m_window_name = "Window"; + int m_window_width = 512; + int m_window_height = 512; + bool m_start_focused = true; + + std::string m_pixel_shader_path = ""; + std::string m_object_shader_path = ""; + + int m_iterations = 5; + int m_samples_per_frame = 1; + int m_fov = 30; + float m_camera_sensitivity = 10.0f; + std::array m_camera_position = { 0, 0, 0 }; + std::array m_camera_rotation = { 0, 0, 0 }; + + std::string m_texture_sky_path = ""; + std::string m_texture_1_path = ""; + std::string m_texture_2_path = ""; + std::string m_texture_3_path = ""; + std::string m_texture_4_path = ""; + std::string m_texture_5_path = ""; + + Texture* m_tex_sky = (Texture*)(nullptr); + Texture* m_tex_1 = (Texture*)(nullptr); + Texture* m_tex_2 = (Texture*)(nullptr); + Texture* m_tex_3 = (Texture*)(nullptr); + Texture* m_tex_4 = (Texture*)(nullptr); + Texture* m_tex_5 = (Texture*)(nullptr); + + + bool LoadConfigFile(std::string path); + bool BindTextures(Program& program); + std::vector* GetIndexBuffer(); + std::vector* GetTextureBuffer(); + std::vector* GetVertexBuffer(); + std::vector* GetObjects(); + int GetVertexCount(); + int GetFaceCount(); + int GetObjectCount(); + Config(std::string path); + Config(); +}; \ No newline at end of file diff --git a/src/DataStructures.cpp b/src/DataStructures.cpp new file mode 100644 index 0000000..90a9c79 --- /dev/null +++ b/src/DataStructures.cpp @@ -0,0 +1,128 @@ +#define _USE_MATH_DEFINES +#include +#include +#include +#include +#include +#include +#include + +void CameraData::AccelerateCamera(float acc[3]) { + for (int i = 0; i < 3; i++) + acceleration[i] += acc[i] * acc_mul; +} + +void CameraData::RotateCamera(float dx, float dy) { + rotation[1] += dx * sensitivity * (500.0f/m_width); + if (rotation[0] + dy * sensitivity * (500.0f / m_width) < -90) + rotation[0] = -90; + else if (rotation[0] + dy * sensitivity * (500.0f / m_width) > 90) + rotation[0] = 90; + else + rotation[0] += dy * sensitivity * (500.0f / m_width); + + + rotation[1] = (float)fmod(rotation[1], 360); + + if((abs(dx) > 0.0001f) || (abs(dy) > 0.0001f)) + m_changed = true; +} + +void CameraData::CopyData(ShaderData& shader_data) { + shader_data._camera_position = { position[0], position[1], position[2], 0 }; + shader_data._camera_rotation = { rotation[0], rotation[1], rotation[2], 0 }; +} + +bool CameraData::HasChanged() { + return m_changed; +} + +void CameraData::SetChanged(bool ch) { + m_changed = ch; +} + +float DegToRad(float deg) { + return (float)(deg * (M_PI / 180.0f)); +} + +void CameraData::UpdateCameraData(float time) { + std::vector> move_vectors; + + std::vector forward = { -sin(DegToRad(rotation[1])), sin(DegToRad(rotation[0])), cos(DegToRad(rotation[1])) }; + std::vector up = { 0, 1.0f, 0 }; + std::vector right = { cos(DegToRad(rotation[1])), 0, sin(DegToRad(rotation[1])) }; + + move_vectors.push_back(right); + move_vectors.push_back(up); + move_vectors.push_back(forward); + + //update position + for (int i = 0; i < 3; i++) { + temp[0] = position[i]; + temp[1] = rotation[i]; + + // calculate accelleration + float accel = 0; + for (int x = 0; x < 3; x++) + accel += acceleration[x] * move_vectors[x][i]; + velocity[i] += accel * time; + + position[i] += velocity[i] * time; + + // apply friction + float sum = abs(velocity[0]) + abs(velocity[1]) + abs(velocity[2]); + float part_friction = abs((velocity[i] / sum)) * friction; + if (sum != 0) { + if (velocity[i] > 0) { + if (part_friction * time > velocity[i]) + velocity[i] = 0; + else + velocity[i] -= part_friction * time; + } + else if (velocity[i] < 0) { + if (part_friction * time < velocity[i]) + velocity[i] = 0; + else + velocity[i] += part_friction * time; + } + position[i] += velocity[i] * time; + } + + if ((temp[0] != position[i]) || (temp[1] != rotation[i])) + m_changed = true; + } + // reset acceleration + for (int i = 0; i < 3; i++) + acceleration[i] = 0; + + // scale velocity to max velocity + float length = sqrt(pow(velocity[0], 2) + pow(velocity[1], 2) + pow(velocity[2], 2)); + float scaling = 1.0f; + if (length > max_v) { + scaling = ((length - max_v) / max_v) + 1.0f; + for(int i = 0; i < 3; i++) + velocity[i] /= scaling; + } +} + +void ShaderData::UpdateSeed() { + _seed = GetRand(); +} +void ShaderData::UpdateWindowSize(int width, int height) { + _screen_size[0] = width; + _screen_size[1] = height; +} +void ShaderData::GetWindowSize(int& width, int& height) { + width = _screen_size[0]; + height = _screen_size[1]; +} +int ShaderData::GetWidth() { + return _screen_size[0]; +} +int ShaderData::GetHeight() { + return _screen_size[1]; +} +void CameraData::UpdateWindowSize(int width, int height) { + m_width = width; + m_height = height; +} \ No newline at end of file diff --git a/src/DataStructures.h b/src/DataStructures.h new file mode 100644 index 0000000..431dc08 --- /dev/null +++ b/src/DataStructures.h @@ -0,0 +1,72 @@ +#pragma once +#include +#include +#include + +struct ShaderData +{ +public: + std::array _camera_position = { 0, 0, 0, 0 }; + std::array _camera_rotation = { 0, 0, 0, 0 }; + std::array _pixel_offset = { 0.5f, 0.5f }; + std::array _screen_size = { 0, 0 }; + int _iterations = 5; + float _seed = GetRand(); + int _objectcount = 0; + int _sample = 1; + int _samples = 1; + int _fov = 30; + std::array _padding = { 0, 0}; + void UpdateSeed(); + void UpdateWindowSize(int width, int height); + void GetWindowSize(int& width, int& height); + int GetWidth(); + int GetHeight(); +}; +struct CameraData { + std::array velocity = { 0, 0, 0 }; + std::array position = { 0, 0, 0 }; + std::array rotation = { 0, 0, 0 }; + std::array acceleration = { 0, 0, 0 }; + float max_v = 30.0f; + float friction = 30.0f; + float acc_mul = 50.0f; + bool m_changed = false; + bool breakk = false; + float sensitivity = 3.0f; + int m_width = 0, m_height = 0; + void AccelerateCamera(float acc[3]); + void RotateCamera(float dx, float dy); + void CopyData(ShaderData& shader_data); + + bool HasChanged(); + + void SetChanged(bool ch); + + float temp[2] = {0, 0}; + + void UpdateCameraData(float time); + void UpdateWindowSize(int width, int height); +}; + +struct SceneObject { + std::array position = { 0, 0, 0, 0 }; + std::array size = { 1, 1, 1, 1 }; + std::array orientation = { 0, 0, 0, 0 }; + std::array albedo = { 1, 1, 1, 1 }; + std::array specular = { 0, 0, 0, 0 }; + std::array emission = { 0, 0, 0, 0 }; + //0 - diffuse + //1 - specular + //2 - normal + //3 - emission + std::array texture_id = { 0, 0, 0, 0 }; + float refractive_index = 1; + float transparency = 0; + float smoothness = 0; + int type = 0; + int offset = 0; + int vert_num = 0; + int obj_id = 0; + int padding = 0; +}; \ No newline at end of file diff --git a/src/Utils.cpp b/src/Utils.cpp new file mode 100644 index 0000000..8880085 --- /dev/null +++ b/src/Utils.cpp @@ -0,0 +1,10 @@ +#include "Utils.h" + +float GetRand() { + return (float)((double)rand() / (RAND_MAX)); +} + +bool FileExists(const std::string& name) { + struct stat buffer; + return (stat(name.c_str(), &buffer) == 0); +} \ No newline at end of file diff --git a/src/Utils.h b/src/Utils.h new file mode 100644 index 0000000..de0d348 --- /dev/null +++ b/src/Utils.h @@ -0,0 +1,8 @@ +#pragma once +#include + +#define LOG_ERROR(msg) \ + std::cout << '[' << __TIME__ << "] ERROR: " << msg << std::endl + +float GetRand(); +bool FileExists(const std::string& name); \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp new file mode 100644 index 0000000..b32dc73 --- /dev/null +++ b/src/main.cpp @@ -0,0 +1,196 @@ +#include +#include +#include +#include + +#include + +#include "Utils.h" +#include "DataStructures.h" +#include "Config.h" + +#define UPDATE_OBJECT_BUFFERS 0 + +void UpdateKeys(ComputeEngine& renderer, CameraData& camera, std::vector& objects, ShaderData& shader_data, Texture& tex_output) { + if (renderer.IsKeyClicked(GLFW_KEY_P)) { + renderer.SwitchInput(); + } + if (renderer.GetInput()) { + if (renderer.IsKeyPressed(GLFW_KEY_W)) + camera.AccelerateCamera(new float[3]{ 0, 0, 1.0f }); + if (renderer.IsKeyPressed(GLFW_KEY_A)) + camera.AccelerateCamera(new float[3]{ -1.0f, 0, 0 }); + if (renderer.IsKeyPressed(GLFW_KEY_S)) + camera.AccelerateCamera(new float[3]{ 0, 0, -1.0f }); + if (renderer.IsKeyPressed(GLFW_KEY_D)) + camera.AccelerateCamera(new float[3]{ 1.0f, 0, 0 }); + if (renderer.IsKeyPressed(GLFW_KEY_SPACE)) + camera.AccelerateCamera(new float[3]{ 0, 1.0f, 0 }); + if (renderer.IsKeyPressed(GLFW_KEY_LEFT_CONTROL)) + camera.AccelerateCamera(new float[3]{ 0, -1.0f, 0 }); + if (renderer.IsKeyPressed(GLFW_KEY_E)) { + } + if (renderer.IsKeyPressed(GLFW_KEY_Q)) { + } + if (renderer.IsKeyClicked(GLFW_KEY_F11)) { + renderer.SwitchFullScreen(); + } + if (renderer.IsKeyClicked(GLFW_KEY_ESCAPE)) + renderer.CloseWindow(); + if (renderer.IsKeyClicked(GLFW_KEY_L)) { + renderer.SaveScreen("screenshot"); + } + } + int width, height; + shader_data.GetWindowSize(width, height); + renderer.GetWindowSize(shader_data._screen_size[0], shader_data._screen_size[1]); + if (width != shader_data.GetWidth() || height != shader_data.GetHeight()) + tex_output.Resize(shader_data.GetWidth(), shader_data.GetHeight()); +} + +void UpdateInput(ComputeEngine& renderer, CameraData& camera, std::vector& objects, ShaderData& shader_data, Texture& tex_output) { + renderer.PollEvents(); + UpdateKeys(renderer, camera, objects, shader_data, tex_output); + + double dx, dy; + renderer.GetMouseDelta(dx, dy); + dx *= (renderer.GetFrametime() / 1000.0); + dy *= (renderer.GetFrametime() / 1000.0); + + double xp, yp; + int w, h; + renderer.GetWindowSize(w, h); + renderer.GetMousePos(xp, yp); + + bool in_window = xp > 0 && yp > 0 && xp < w && yp < h; + + if (renderer.IsMouseButtonClicked(GLFW_MOUSE_BUTTON_1) && !renderer.GetInput()) + { + renderer.SetInput(true); + } + + camera.RotateCamera((float)dx, (float)dy); + camera.UpdateCameraData((float)(renderer.GetFrametime() / 1000.0)); +} + +int main(int argc, char** argv) +{ + srand((unsigned)time(0)); + + std::string config_filename = "configs/config.txt"; + + if (argc > 1) + config_filename = argv[1]; + + if (!FileExists(config_filename)) { + LOG_ERROR(config_filename + " does not exist"); + return -1; + } + + std::cout << "config file name: " << config_filename << std::endl; + + Config config(config_filename); + + int width = config.m_window_width; + int height = config.m_window_height; + + // init renderer + ComputeEngine renderer(width, height, config.m_window_name, config.m_start_focused, true); + + Shader pixel_compute_shader(config.m_pixel_shader_path); + if (!pixel_compute_shader.Compiled()) { + LOG_ERROR("shader compilation fail"); + return -1; + } + + Program pixel_compute_program(pixel_compute_shader); + + // init data for shader + ShaderData shader_data = {}; + shader_data._screen_size = { width, height }; + shader_data._iterations = config.m_iterations; + shader_data._samples = config.m_samples_per_frame; + shader_data._fov = config.m_fov; + + // init textures + Texture tex_output("img_output", width, height); + + // bind textures + pixel_compute_program.BindTextureImage(tex_output, 0); + config.BindTextures(pixel_compute_program); + + // init buffers + UBO data_buffer(2); + UBO objects_buffer(3); + SSBO index_buffer(4); + SSBO vert_buffer(5); + SSBO texture_vert_buffer(6); + + // fill buffers with data + data_buffer.Set(&shader_data); + objects_buffer.Set(config.GetObjects()); + index_buffer.Set(config.GetIndexBuffer()); + vert_buffer.Set(config.GetVertexBuffer()); + texture_vert_buffer.Set(config.GetTextureBuffer()); + + // init camera + CameraData camera; + camera.position = config.m_camera_position; + camera.rotation = config.m_camera_rotation; + camera.sensitivity = config.m_camera_sensitivity; + camera.m_width = width; + camera.m_height = height; + camera.CopyData(shader_data); + + printf("faces: %d\nvertices: %d\nobjects: %d\n", config.GetFaceCount(), config.GetVertexCount(), config.GetObjectCount()); + + while (!renderer.ShouldClose()) { + // update input + camera.SetChanged(false); + UpdateInput(renderer, camera, *config.GetObjects(), shader_data, tex_output); + + // update data for shader + if (camera.HasChanged()) { + shader_data._sample = 1; + shader_data._pixel_offset = { 0.5f, 0.5f }; + } + else { + shader_data._sample++; + shader_data._pixel_offset = { (GetRand() - 0.5f), (GetRand() - 0.5f) }; + } + shader_data.UpdateSeed(); + shader_data._objectcount = config.GetObjectCount(); + camera.UpdateWindowSize(shader_data.GetWidth(), shader_data.GetHeight()); + camera.CopyData(shader_data); + + // update buffers + data_buffer.Update(&shader_data); + +#if UPDATE_OBJECT_BUFFERS + objects_buffer.Update(config.GetObjects()); + index_buffer.Update(config.GetIndexBuffer()); + vert_buffer.Update(config.GetVertexBuffer()); + texture_vert_buffer.Update(config.GetTextureBuffer()); +#endif + + // dispatch compute shader + pixel_compute_program.DispatchCompute(shader_data.GetWidth(), shader_data.GetHeight()); + + renderer.UpdateFrametime(); + + // draw rendered image + renderer.DrawTexture(tex_output); + + // glFinish call + renderer.Finish(); + + //print frametime every 50 frames + if(renderer.GetFramecount()%50 == 0) + printf("f:%.2fms w:%d h:%d samples:%d\n", renderer.GetFrametime(), renderer.GetWidth(), renderer.GetHeight(), shader_data._sample * shader_data._samples); + } + + //print average frametime + printf("average frametime: %.3fms", renderer.GetAverageFrametime()); + + return 0; +} \ No newline at end of file