diff --git a/Step 2/cmake-build-debug/.cmake/api/v1/reply/codemodel-v2-c89fcd438d6ff892e367.json b/Step 2/cmake-build-debug/.cmake/api/v1/reply/codemodel-v2-cd07775fdd2e364d3d72.json similarity index 93% rename from Step 2/cmake-build-debug/.cmake/api/v1/reply/codemodel-v2-c89fcd438d6ff892e367.json rename to Step 2/cmake-build-debug/.cmake/api/v1/reply/codemodel-v2-cd07775fdd2e364d3d72.json index abce7e9..5f62779 100644 --- a/Step 2/cmake-build-debug/.cmake/api/v1/reply/codemodel-v2-c89fcd438d6ff892e367.json +++ b/Step 2/cmake-build-debug/.cmake/api/v1/reply/codemodel-v2-cd07775fdd2e364d3d72.json @@ -39,7 +39,7 @@ { "directoryIndex" : 0, "id" : "Step_2::@6890427a1f51a3e7e1df", - "jsonFile" : "target-Step_2-Debug-b27f884bab06827a0b8a.json", + "jsonFile" : "target-Step_2-Debug-c817dd65f416e821189b.json", "name" : "Step_2", "projectIndex" : 0 } diff --git a/Step 2/cmake-build-debug/.cmake/api/v1/reply/index-2022-10-17T22-08-11-0712.json b/Step 2/cmake-build-debug/.cmake/api/v1/reply/index-2022-10-18T03-59-17-0542.json similarity index 93% rename from Step 2/cmake-build-debug/.cmake/api/v1/reply/index-2022-10-17T22-08-11-0712.json rename to Step 2/cmake-build-debug/.cmake/api/v1/reply/index-2022-10-18T03-59-17-0542.json index 0c72b75..9269037 100644 --- a/Step 2/cmake-build-debug/.cmake/api/v1/reply/index-2022-10-17T22-08-11-0712.json +++ b/Step 2/cmake-build-debug/.cmake/api/v1/reply/index-2022-10-18T03-59-17-0542.json @@ -26,7 +26,7 @@ "objects" : [ { - "jsonFile" : "codemodel-v2-c89fcd438d6ff892e367.json", + "jsonFile" : "codemodel-v2-cd07775fdd2e364d3d72.json", "kind" : "codemodel", "version" : { @@ -86,7 +86,7 @@ }, "codemodel-v2" : { - "jsonFile" : "codemodel-v2-c89fcd438d6ff892e367.json", + "jsonFile" : "codemodel-v2-cd07775fdd2e364d3d72.json", "kind" : "codemodel", "version" : { diff --git a/Step 2/cmake-build-debug/.cmake/api/v1/reply/target-Step_2-Debug-b27f884bab06827a0b8a.json b/Step 2/cmake-build-debug/.cmake/api/v1/reply/target-Step_2-Debug-c817dd65f416e821189b.json similarity index 88% rename from Step 2/cmake-build-debug/.cmake/api/v1/reply/target-Step_2-Debug-b27f884bab06827a0b8a.json rename to Step 2/cmake-build-debug/.cmake/api/v1/reply/target-Step_2-Debug-c817dd65f416e821189b.json index eacccb3..a1120ea 100644 --- a/Step 2/cmake-build-debug/.cmake/api/v1/reply/target-Step_2-Debug-b27f884bab06827a0b8a.json +++ b/Step 2/cmake-build-debug/.cmake/api/v1/reply/target-Step_2-Debug-c817dd65f416e821189b.json @@ -71,7 +71,9 @@ 2, 3, 4, - 5 + 5, + 6, + 7 ] } ], @@ -109,12 +111,20 @@ 2, 3, 4, - 5 + 5, + 6, + 7 ] } ], "sources" : [ + { + "backtrace" : 1, + "compileGroupIndex" : 0, + "path" : "src/globals.cpp", + "sourceGroupIndex" : 0 + }, { "backtrace" : 1, "compileGroupIndex" : 0, @@ -127,6 +137,12 @@ "path" : "src/main.cpp", "sourceGroupIndex" : 0 }, + { + "backtrace" : 1, + "compileGroupIndex" : 0, + "path" : "src/math/colliders.cpp", + "sourceGroupIndex" : 0 + }, { "backtrace" : 1, "compileGroupIndex" : 0, diff --git a/Step 2/cmake-build-debug/.ninja_deps b/Step 2/cmake-build-debug/.ninja_deps index 224aa89..49eb88a 100644 Binary files a/Step 2/cmake-build-debug/.ninja_deps and b/Step 2/cmake-build-debug/.ninja_deps differ diff --git a/Step 2/cmake-build-debug/.ninja_log b/Step 2/cmake-build-debug/.ninja_log index 1a0dca5..1c82fbe 100644 --- a/Step 2/cmake-build-debug/.ninja_log +++ b/Step 2/cmake-build-debug/.ninja_log @@ -1,40 +1,15 @@ # ninja log v5 -0 915 1666044004009674564 CMakeFiles/Step_2.dir/src/main.cpp.o 2fb1ddffcef25127 -1 1080 1666041865974063754 CMakeFiles/Step_2.dir/src/util/parser.cpp.o dc1044c577ff67b5 -1 919 1666044004017674800 CMakeFiles/Step_2.dir/src/raytracing.cpp.o cfda37b51895cd7e -919 981 1666044004077676562 Step_2 513d6b5f7b82bcb -1 831 1666044003929672214 CMakeFiles/Step_2.dir/src/world.cpp.o abef135c83fe5bb1 -0 934 1666041865830059555 CMakeFiles/Step_2.dir/src/image/image.cpp.o 13adbb05fcabbeec -1 746 1666046081093003733 CMakeFiles/Step_2.dir/src/util/models.cpp.o 637cb95d94c45aa5 -1 927 1666046081273009106 CMakeFiles/Step_2.dir/src/world.cpp.o abef135c83fe5bb1 -1 942 1666046081289009585 CMakeFiles/Step_2.dir/src/raytracing.cpp.o cfda37b51895cd7e -1 1031 1666046081377012214 CMakeFiles/Step_2.dir/src/main.cpp.o 2fb1ddffcef25127 -1031 1114 1666046081457014603 Step_2 7fa048d28deec3eb -0 928 1666046122330234924 CMakeFiles/Step_2.dir/src/main.cpp.o 2fb1ddffcef25127 -928 993 1666046122394236835 Step_2 7fa048d28deec3eb -0 932 1666046219013119982 CMakeFiles/Step_2.dir/src/world.cpp.o abef135c83fe5bb1 -0 1023 1666046219105122725 CMakeFiles/Step_2.dir/src/main.cpp.o 2fb1ddffcef25127 -1023 1092 1666046219173124755 Step_2 7fa048d28deec3eb -1 999 1666046241685796261 CMakeFiles/Step_2.dir/src/main.cpp.o 2fb1ddffcef25127 -999 1062 1666046241749798170 Step_2 7fa048d28deec3eb -0 1002 1666046252390115513 CMakeFiles/Step_2.dir/src/main.cpp.o 2fb1ddffcef25127 -1002 1073 1666046252462117662 Step_2 7fa048d28deec3eb -0 791 1666047936840238827 CMakeFiles/Step_2.dir/src/world.cpp.o abef135c83fe5bb1 -0 927 1666047936976242871 CMakeFiles/Step_2.dir/src/main.cpp.o 2fb1ddffcef25127 -927 992 1666047937040244774 Step_2 7fa048d28deec3eb -0 903 1666047991325858795 CMakeFiles/Step_2.dir/src/main.cpp.o 2fb1ddffcef25127 -903 964 1666047991389860698 Step_2 7fa048d28deec3eb -1 914 1666048033211104116 CMakeFiles/Step_2.dir/src/main.cpp.o 2fb1ddffcef25127 -914 978 1666048033275106019 Step_2 7fa048d28deec3eb -1 894 1666048070228204690 CMakeFiles/Step_2.dir/src/main.cpp.o 2fb1ddffcef25127 -894 955 1666048070288206475 Step_2 7fa048d28deec3eb -1 918 1666048117581612568 CMakeFiles/Step_2.dir/src/main.cpp.o 2fb1ddffcef25127 -918 981 1666048117645614472 Step_2 7fa048d28deec3eb -0 833 1666048278626400562 CMakeFiles/Step_2.dir/src/world.cpp.o abef135c83fe5bb1 -833 897 1666048278686402346 Step_2 7fa048d28deec3eb -1 886 1666048336304115348 CMakeFiles/Step_2.dir/src/main.cpp.o 2fb1ddffcef25127 -886 947 1666048336364117131 Step_2 7fa048d28deec3eb -1 921 1666048358240767530 CMakeFiles/Step_2.dir/src/main.cpp.o 2fb1ddffcef25127 -921 990 1666048358312769670 Step_2 7fa048d28deec3eb -0 823 1666048503185076728 CMakeFiles/Step_2.dir/src/world.cpp.o abef135c83fe5bb1 -823 887 1666048503249078633 Step_2 7fa048d28deec3eb +1 1043 1666064132960672809 CMakeFiles/Step_2.dir/src/main.cpp.o 2fb1ddffcef25127 +1 754 1666063960682945134 CMakeFiles/Step_2.dir/src/math/colliders.cpp.o a8a5f894b3fe853c +1 943 1666053389345551413 CMakeFiles/Step_2.dir/src/util/parser.cpp.o dc1044c577ff67b5 +1 848 1666063960778948360 CMakeFiles/Step_2.dir/src/raytracing.cpp.o cfda37b51895cd7e +1043 1115 1666064133032675183 Step_2 a444ddadd61997d2 +1 923 1666063960854950913 CMakeFiles/Step_2.dir/src/util/models.cpp.o 637cb95d94c45aa5 +0 10 1666063876984117759 CMakeFiles/Step_2.dir/src/globals.cpp.o 9579c877d4b65af0 +1 869 1666064119040213917 CMakeFiles/Step_2.dir/src/world.cpp.o abef135c83fe5bb1 +0 883 1666053389289549931 CMakeFiles/Step_2.dir/src/image/image.cpp.o 13adbb05fcabbeec +0 891 1666065564826630786 CMakeFiles/Step_2.dir/src/util/models.cpp.o 637cb95d94c45aa5 +0 823 1666065649113302898 CMakeFiles/Step_2.dir/src/raytracing.cpp.o cfda37b51895cd7e +0 851 1666065649141303787 CMakeFiles/Step_2.dir/src/world.cpp.o abef135c83fe5bb1 +0 1014 1666065649305308983 CMakeFiles/Step_2.dir/src/main.cpp.o 2fb1ddffcef25127 +1014 1084 1666065649373311137 Step_2 a444ddadd61997d2 diff --git a/Step 2/cmake-build-debug/CMakeFiles/Step_2.dir/src/globals.cpp.o b/Step 2/cmake-build-debug/CMakeFiles/Step_2.dir/src/globals.cpp.o new file mode 100644 index 0000000..02ffc7c Binary files /dev/null and b/Step 2/cmake-build-debug/CMakeFiles/Step_2.dir/src/globals.cpp.o differ diff --git a/Step 2/cmake-build-debug/CMakeFiles/Step_2.dir/src/image/image.cpp.o b/Step 2/cmake-build-debug/CMakeFiles/Step_2.dir/src/image/image.cpp.o index 32a0652..3649ae7 100644 Binary files a/Step 2/cmake-build-debug/CMakeFiles/Step_2.dir/src/image/image.cpp.o and b/Step 2/cmake-build-debug/CMakeFiles/Step_2.dir/src/image/image.cpp.o differ diff --git a/Step 2/cmake-build-debug/CMakeFiles/Step_2.dir/src/main.cpp.o b/Step 2/cmake-build-debug/CMakeFiles/Step_2.dir/src/main.cpp.o index e3b76ad..3fcec95 100644 Binary files a/Step 2/cmake-build-debug/CMakeFiles/Step_2.dir/src/main.cpp.o and b/Step 2/cmake-build-debug/CMakeFiles/Step_2.dir/src/main.cpp.o differ diff --git a/Step 2/cmake-build-debug/CMakeFiles/Step_2.dir/src/math/colliders.cpp.o b/Step 2/cmake-build-debug/CMakeFiles/Step_2.dir/src/math/colliders.cpp.o new file mode 100644 index 0000000..f53debf Binary files /dev/null and b/Step 2/cmake-build-debug/CMakeFiles/Step_2.dir/src/math/colliders.cpp.o differ diff --git a/Step 2/cmake-build-debug/CMakeFiles/Step_2.dir/src/raytracing.cpp.o b/Step 2/cmake-build-debug/CMakeFiles/Step_2.dir/src/raytracing.cpp.o index c3ffad7..c215a4b 100644 Binary files a/Step 2/cmake-build-debug/CMakeFiles/Step_2.dir/src/raytracing.cpp.o and b/Step 2/cmake-build-debug/CMakeFiles/Step_2.dir/src/raytracing.cpp.o differ diff --git a/Step 2/cmake-build-debug/CMakeFiles/Step_2.dir/src/util/models.cpp.o b/Step 2/cmake-build-debug/CMakeFiles/Step_2.dir/src/util/models.cpp.o index 27ab7a9..a6bd7f7 100644 Binary files a/Step 2/cmake-build-debug/CMakeFiles/Step_2.dir/src/util/models.cpp.o and b/Step 2/cmake-build-debug/CMakeFiles/Step_2.dir/src/util/models.cpp.o differ diff --git a/Step 2/cmake-build-debug/CMakeFiles/Step_2.dir/src/util/parser.cpp.o b/Step 2/cmake-build-debug/CMakeFiles/Step_2.dir/src/util/parser.cpp.o index a91009f..3970613 100644 Binary files a/Step 2/cmake-build-debug/CMakeFiles/Step_2.dir/src/util/parser.cpp.o and b/Step 2/cmake-build-debug/CMakeFiles/Step_2.dir/src/util/parser.cpp.o differ diff --git a/Step 2/cmake-build-debug/CMakeFiles/Step_2.dir/src/world.cpp.o b/Step 2/cmake-build-debug/CMakeFiles/Step_2.dir/src/world.cpp.o index 9814893..9657c31 100644 Binary files a/Step 2/cmake-build-debug/CMakeFiles/Step_2.dir/src/world.cpp.o and b/Step 2/cmake-build-debug/CMakeFiles/Step_2.dir/src/world.cpp.o differ diff --git a/Step 2/cmake-build-debug/Step_2 b/Step 2/cmake-build-debug/Step_2 index 0ee55eb..84cb06b 100755 Binary files a/Step 2/cmake-build-debug/Step_2 and b/Step 2/cmake-build-debug/Step_2 differ diff --git a/Step 2/cmake-build-debug/Testing/Temporary/LastTest.log b/Step 2/cmake-build-debug/Testing/Temporary/LastTest.log index a866554..ed63145 100644 --- a/Step 2/cmake-build-debug/Testing/Temporary/LastTest.log +++ b/Step 2/cmake-build-debug/Testing/Temporary/LastTest.log @@ -1,3 +1,3 @@ -Start testing: Oct 17 19:15 EDT +Start testing: Oct 18 00:00 EDT ---------------------------------------------------------- -End testing: Oct 17 19:15 EDT +End testing: Oct 18 00:00 EDT diff --git a/Step 2/cmake-build-debug/build.ninja b/Step 2/cmake-build-debug/build.ninja index c7f7a94..f84d63b 100644 --- a/Step 2/cmake-build-debug/build.ninja +++ b/Step 2/cmake-build-debug/build.ninja @@ -49,6 +49,13 @@ cmake_ninja_workdir = /home/brett/Documents/Brock/CS$ 3P93/Project/Step$ 2/cmake build cmake_object_order_depends_target_Step_2: phony || CMakeFiles/Step_2.dir +build CMakeFiles/Step_2.dir/src/globals.cpp.o: CXX_COMPILER__Step_2_Debug /home/brett/Documents/Brock/CS$ 3P93/Project/Step$ 2/src/globals.cpp || cmake_object_order_depends_target_Step_2 + DEP_FILE = CMakeFiles/Step_2.dir/src/globals.cpp.o.d + FLAGS = -g -std=gnu++20 + INCLUDES = -I"/home/brett/Documents/Brock/CS 3P93/Project/Step 2/include" + OBJECT_DIR = CMakeFiles/Step_2.dir + OBJECT_FILE_DIR = CMakeFiles/Step_2.dir/src + build CMakeFiles/Step_2.dir/src/image/image.cpp.o: CXX_COMPILER__Step_2_Debug /home/brett/Documents/Brock/CS$ 3P93/Project/Step$ 2/src/image/image.cpp || cmake_object_order_depends_target_Step_2 DEP_FILE = CMakeFiles/Step_2.dir/src/image/image.cpp.o.d FLAGS = -g -std=gnu++20 @@ -63,6 +70,13 @@ build CMakeFiles/Step_2.dir/src/main.cpp.o: CXX_COMPILER__Step_2_Debug /home/bre OBJECT_DIR = CMakeFiles/Step_2.dir OBJECT_FILE_DIR = CMakeFiles/Step_2.dir/src +build CMakeFiles/Step_2.dir/src/math/colliders.cpp.o: CXX_COMPILER__Step_2_Debug /home/brett/Documents/Brock/CS$ 3P93/Project/Step$ 2/src/math/colliders.cpp || cmake_object_order_depends_target_Step_2 + DEP_FILE = CMakeFiles/Step_2.dir/src/math/colliders.cpp.o.d + FLAGS = -g -std=gnu++20 + INCLUDES = -I"/home/brett/Documents/Brock/CS 3P93/Project/Step 2/include" + OBJECT_DIR = CMakeFiles/Step_2.dir + OBJECT_FILE_DIR = CMakeFiles/Step_2.dir/src/math + build CMakeFiles/Step_2.dir/src/raytracing.cpp.o: CXX_COMPILER__Step_2_Debug /home/brett/Documents/Brock/CS$ 3P93/Project/Step$ 2/src/raytracing.cpp || cmake_object_order_depends_target_Step_2 DEP_FILE = CMakeFiles/Step_2.dir/src/raytracing.cpp.o.d FLAGS = -g -std=gnu++20 @@ -99,7 +113,7 @@ build CMakeFiles/Step_2.dir/src/world.cpp.o: CXX_COMPILER__Step_2_Debug /home/br ############################################# # Link the executable Step_2 -build Step_2: CXX_EXECUTABLE_LINKER__Step_2_Debug CMakeFiles/Step_2.dir/src/image/image.cpp.o CMakeFiles/Step_2.dir/src/main.cpp.o CMakeFiles/Step_2.dir/src/raytracing.cpp.o CMakeFiles/Step_2.dir/src/util/models.cpp.o CMakeFiles/Step_2.dir/src/util/parser.cpp.o CMakeFiles/Step_2.dir/src/world.cpp.o +build Step_2: CXX_EXECUTABLE_LINKER__Step_2_Debug CMakeFiles/Step_2.dir/src/globals.cpp.o CMakeFiles/Step_2.dir/src/image/image.cpp.o CMakeFiles/Step_2.dir/src/main.cpp.o CMakeFiles/Step_2.dir/src/math/colliders.cpp.o CMakeFiles/Step_2.dir/src/raytracing.cpp.o CMakeFiles/Step_2.dir/src/util/models.cpp.o CMakeFiles/Step_2.dir/src/util/parser.cpp.o CMakeFiles/Step_2.dir/src/world.cpp.o FLAGS = -g OBJECT_DIR = CMakeFiles/Step_2.dir POST_BUILD = : diff --git a/Step 2/cmake-build-debug/cube.obj b/Step 2/cmake-build-debug/cube.obj new file mode 100644 index 0000000..cadb6d1 --- /dev/null +++ b/Step 2/cmake-build-debug/cube.obj @@ -0,0 +1,47 @@ +# Blender 3.3.1 +# www.blender.org +mtllib cube.mtl +o Cube +v -250.000000 -250.000000 250.000000 +v -250.000000 250.000000 250.000000 +v -250.000000 -250.000000 -250.000000 +v -250.000000 250.000000 -250.000000 +v 250.000000 -250.000000 250.000000 +v 250.000000 250.000000 250.000000 +v 250.000000 -250.000000 -250.000000 +v 250.000000 250.000000 -250.000000 +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 +vt 0.000000 0.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vt 0.000000 0.000000 +vt 0.000000 1.000000 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 0.000000 1.000000 +vt 1.000000 1.000000 +vt 1.000000 0.000000 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt 1.000000 1.000000 +s 0 +f 3/6/1 2/2/1 1/1/1 +f 7/14/2 4/8/2 3/4/2 +f 5/9/3 8/16/3 7/14/3 +f 1/1/4 6/12/4 5/10/4 +f 1/1/5 7/15/5 3/5/5 +f 6/13/6 4/8/6 8/16/6 +f 3/6/1 4/7/1 2/2/1 +f 7/14/2 8/16/2 4/8/2 +f 5/9/3 6/11/3 8/16/3 +f 1/1/4 2/2/4 6/12/4 +f 1/1/5 5/10/5 7/15/5 +f 6/13/6 2/3/6 4/8/6 diff --git a/Step 2/cmake-build-debug/cubeflipped.obj b/Step 2/cmake-build-debug/cubeflipped.obj new file mode 100644 index 0000000..35c3c94 --- /dev/null +++ b/Step 2/cmake-build-debug/cubeflipped.obj @@ -0,0 +1,47 @@ +# Blender 3.3.1 +# www.blender.org +mtllib cubeflipped.mtl +o Cube +v -250.000000 -250.000000 250.000000 +v -250.000000 250.000000 250.000000 +v -250.000000 -250.000000 -250.000000 +v -250.000000 250.000000 -250.000000 +v 250.000000 -250.000000 250.000000 +v 250.000000 250.000000 250.000000 +v 250.000000 -250.000000 -250.000000 +v 250.000000 250.000000 -250.000000 +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 +vt 0.000000 0.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vt 0.000000 0.000000 +vt 0.000000 1.000000 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 0.000000 1.000000 +vt 1.000000 1.000000 +vt 1.000000 0.000000 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt 1.000000 1.000000 +s 0 +f 3/6/1 1/1/1 2/2/1 +f 7/14/2 3/4/2 4/8/2 +f 5/9/3 7/14/3 8/16/3 +f 1/1/4 5/10/4 6/12/4 +f 1/1/5 3/5/5 7/15/5 +f 6/13/6 8/16/6 4/8/6 +f 3/6/1 2/2/1 4/7/1 +f 7/14/2 4/8/2 8/16/2 +f 5/9/3 8/16/3 6/11/3 +f 1/1/4 6/12/4 2/2/4 +f 1/1/5 7/15/5 5/10/5 +f 6/13/6 4/8/6 2/3/6 diff --git a/Step 2/cmake-build-debug/spider.obj b/Step 2/cmake-build-debug/spider.obj new file mode 100755 index 0000000..a0d90cd --- /dev/null +++ b/Step 2/cmake-build-debug/spider.obj @@ -0,0 +1,1244 @@ +# Blender v2.83.1 OBJ File: 'spider.blend' +# www.blender.org +mtllib spider.mtl +o Icosphere +v 0.000000 -0.639720 0.000000 +v 1.251673 -0.286095 0.525725 +v -0.478087 -0.286096 0.850649 +v -1.547150 -0.286093 0.000000 +v -0.478087 -0.286096 -0.850649 +v 1.251673 -0.286095 -0.525725 +v 0.478087 0.286096 0.850649 +v -1.251673 0.286095 0.525725 +v -1.251673 0.286095 -0.525725 +v 0.478087 0.286096 -0.850649 +v 1.547150 0.286093 0.000000 +v 0.000000 0.639720 0.000000 +v -0.281010 -0.544181 0.499995 +v 0.735710 -0.544181 0.309011 +v 0.454702 -0.336325 0.809012 +v 1.471424 -0.336324 0.000000 +v 0.735710 -0.544181 -0.309011 +v -0.909391 -0.544179 0.000000 +v -1.190408 -0.336324 0.499997 +v -0.281010 -0.544181 -0.499995 +v -1.190408 -0.336324 -0.499997 +v 0.454702 -0.336325 -0.809012 +v 1.645110 0.000000 0.309013 +v 1.645110 0.000000 -0.309013 +v 0.000000 0.000000 1.000000 +v 1.016733 0.000000 0.809017 +v -1.645110 0.000000 0.309013 +v -1.016733 0.000000 0.809017 +v -1.016733 0.000000 -0.809017 +v -1.645110 0.000000 -0.309013 +v 1.016733 0.000000 -0.809017 +v 0.000000 0.000000 -1.000000 +v 1.190408 0.336324 0.499997 +v -0.454702 0.336325 0.809012 +v -1.471424 0.336324 0.000000 +v -0.454702 0.336325 -0.809012 +v 1.190408 0.336324 -0.499997 +v 0.281010 0.544181 0.499995 +v 0.909391 0.544179 0.000000 +v -0.735710 0.544181 0.309011 +v -0.735710 0.544181 -0.309011 +v 0.281010 0.544181 -0.499995 +vt 0.894631 0.600965 +vt 0.877483 0.575144 +vt 0.890372 0.578167 +vt 0.877483 0.696946 +vt 0.877483 0.665862 +vt 0.886522 0.675615 +vt 0.917457 0.603731 +vt 0.921307 0.616508 +vt 0.894631 0.640040 +vt 0.921307 0.624497 +vt 0.896601 0.642166 +vt 0.894919 0.712068 +vt 0.899411 0.549203 +vt 0.880293 0.544718 +vt 0.903958 0.519184 +vt 0.945491 0.592696 +vt 0.920267 0.573306 +vt 0.955749 0.562418 +vt 0.952041 0.614433 +vt 0.951202 0.611647 +vt 0.978718 0.598890 +vt 0.910009 0.656632 +vt 0.930346 0.634250 +vt 0.941123 0.662807 +vt 0.891069 0.724844 +vt 0.928664 0.536853 +vt 0.974868 0.586114 +vt 0.952041 0.626573 +vt 0.978718 0.642115 +vt 0.965828 0.645138 +vt 0.914038 0.688372 +vt 0.917746 0.740387 +vt 0.918585 0.737601 +vt 0.948480 0.742462 +vt 0.959778 0.530678 +vt 0.939441 0.508296 +vt 0.973186 0.516212 +vt 0.992304 0.570992 +vt 0.983265 0.549661 +vt 0.992304 0.539908 +vt 0.970375 0.675157 +vt 0.989494 0.670672 +vt 0.979415 0.704121 +vt 0.924295 0.718650 +vt 0.949520 0.699260 +vt 0.952330 0.729685 +vt 0.975156 0.726919 +vt 0.992304 0.701098 +vt 0.992304 0.670013 +vt 0.975156 0.514086 +vt 0.948480 0.498543 +vt 0.917746 0.500619 +vt 0.891069 0.516161 +vt 0.877483 0.544059 +vn 0.0392 -0.9772 0.2088 +vn 0.3543 -0.9052 0.2346 +vn -0.1036 -0.9861 0.1302 +vn -0.1036 -0.9861 -0.1302 +vn 0.0392 -0.9772 -0.2088 +vn 0.6686 -0.6600 0.3425 +vn 0.0133 -0.4801 0.8771 +vn -0.6477 -0.6504 0.3968 +vn -0.3430 -0.5333 -0.7732 +vn 0.3142 -0.5251 -0.7909 +vn 0.6021 -0.2548 0.7567 +vn -0.1809 -0.2004 0.9629 +vn -0.9461 -0.3239 0.0000 +vn -0.1809 -0.2004 -0.9629 +vn 0.6021 -0.2548 -0.7567 +vn 0.1917 0.8388 0.5096 +vn -0.2236 0.8490 0.4787 +vn -0.3543 0.9052 -0.2346 +vn 0.0174 0.8099 -0.5863 +vn 0.3695 0.9132 -0.1719 +vn 0.1036 0.9861 -0.1302 +vn 0.2146 0.9387 -0.2697 +vn 0.1917 0.8388 -0.5096 +vn -0.0392 0.9772 -0.2088 +vn -0.0789 0.9040 -0.4202 +vn -0.2236 0.8490 -0.4787 +vn -0.1288 0.9917 0.0000 +vn -0.2719 0.9623 0.0000 +vn -0.3543 0.9052 0.2346 +vn -0.0392 0.9772 0.2088 +vn -0.0789 0.9040 0.4202 +vn 0.0174 0.8099 0.5863 +vn 0.1036 0.9861 0.1302 +vn 0.2146 0.9387 0.2697 +vn 0.3695 0.9132 0.1719 +vn 0.6477 0.6504 -0.3968 +vn 0.5786 0.3693 -0.7272 +vn 0.3430 0.5333 -0.7732 +vn -0.0133 0.4801 -0.8771 +vn -0.1764 0.2948 -0.9391 +vn -0.3142 0.5251 -0.7909 +vn -0.6686 0.6600 -0.3425 +vn -0.8885 0.4589 0.0000 +vn -0.6686 0.6600 0.3425 +vn -0.3142 0.5251 0.7909 +vn -0.1764 0.2948 0.9391 +vn -0.0133 0.4801 0.8771 +vn 0.3430 0.5333 0.7732 +vn 0.5786 0.3693 0.7272 +vn 0.6477 0.6504 0.3968 +vn 0.1809 0.2004 -0.9629 +vn 0.1764 -0.2948 -0.9391 +vn 0.0133 -0.4801 -0.8771 +vn -0.6021 0.2548 -0.7567 +vn -0.5786 -0.3693 -0.7272 +vn -0.6477 -0.6504 -0.3968 +vn -0.6021 0.2548 0.7567 +vn -0.5786 -0.3693 0.7272 +vn -0.3430 -0.5333 0.7732 +vn 0.1809 0.2004 0.9629 +vn 0.1764 -0.2948 0.9391 +vn 0.3142 -0.5251 0.7909 +vn 0.9461 0.3239 0.0000 +vn 0.8885 -0.4589 0.0000 +vn 0.6686 -0.6600 -0.3425 +vn 0.2236 -0.8490 -0.4787 +vn 0.0789 -0.9040 -0.4202 +vn -0.0174 -0.8099 -0.5863 +vn -0.1917 -0.8388 -0.5096 +vn -0.2146 -0.9387 -0.2697 +vn -0.3695 -0.9132 -0.1719 +vn -0.3695 -0.9132 0.1719 +vn -0.2146 -0.9387 0.2697 +vn -0.1917 -0.8388 0.5096 +vn 0.3543 -0.9052 -0.2346 +vn 0.2719 -0.9623 0.0000 +vn 0.1288 -0.9917 0.0000 +vn -0.0174 -0.8099 0.5863 +vn 0.0789 -0.9040 0.4202 +vn 0.2236 -0.8490 0.4787 +usemtl yes +s off +f 1/1/1 14/2/1 13/3/1 +f 2/4/2 14/5/2 16/6/2 +f 1/1/3 13/3/3 18/7/3 +f 1/1/4 18/7/4 20/8/4 +f 1/9/5 20/10/5 17/11/5 +f 2/4/6 16/6/6 23/12/6 +f 3/13/7 15/14/7 25/15/7 +f 4/16/8 19/17/8 27/18/8 +f 5/19/9 21/20/9 29/21/9 +f 6/22/10 22/23/10 31/24/10 +f 2/4/11 23/12/11 26/25/11 +f 3/13/12 25/15/12 28/26/12 +f 4/16/13 27/18/13 30/27/13 +f 5/28/14 29/29/14 32/30/14 +f 6/22/15 31/24/15 24/31/15 +f 7/32/16 33/33/16 38/34/16 +f 8/35/17 34/36/17 40/37/17 +f 9/38/18 35/39/18 41/40/18 +f 10/41/19 36/42/19 42/43/19 +f 11/44/20 37/45/20 39/46/20 +f 39/46/21 42/43/21 12/47/21 +f 39/46/22 37/45/22 42/43/22 +f 37/45/23 10/41/23 42/43/23 +f 42/43/24 41/48/24 12/47/24 +f 42/43/25 36/42/25 41/48/25 +f 36/42/26 9/49/26 41/48/26 +f 41/40/27 40/37/27 12/50/27 +f 41/40/28 35/39/28 40/37/28 +f 35/39/29 8/35/29 40/37/29 +f 40/37/30 38/51/30 12/50/30 +f 40/37/31 34/36/31 38/51/31 +f 34/36/32 7/52/32 38/51/32 +f 38/34/33 39/46/33 12/47/33 +f 38/34/34 33/33/34 39/46/34 +f 33/33/35 11/44/35 39/46/35 +f 24/31/36 37/45/36 11/44/36 +f 24/31/37 31/24/37 37/45/37 +f 31/24/38 10/41/38 37/45/38 +f 32/30/39 36/42/39 10/41/39 +f 32/30/40 29/29/40 36/42/40 +f 29/29/41 9/49/41 36/42/41 +f 30/27/42 35/39/42 9/38/42 +f 30/27/43 27/18/43 35/39/43 +f 27/18/44 8/35/44 35/39/44 +f 28/26/45 34/36/45 8/35/45 +f 28/26/46 25/15/46 34/36/46 +f 25/15/47 7/52/47 34/36/47 +f 26/25/48 33/33/48 7/32/48 +f 26/25/49 23/12/49 33/33/49 +f 23/12/50 11/44/50 33/33/50 +f 31/24/51 32/30/51 10/41/51 +f 31/24/52 22/23/52 32/30/52 +f 22/23/53 5/28/53 32/30/53 +f 29/21/54 30/27/54 9/38/54 +f 29/21/55 21/20/55 30/27/55 +f 21/20/56 4/16/56 30/27/56 +f 27/18/57 28/26/57 8/35/57 +f 27/18/58 19/17/58 28/26/58 +f 19/17/59 3/13/59 28/26/59 +f 25/15/60 26/53/60 7/52/60 +f 25/15/61 15/14/61 26/53/61 +f 15/14/62 2/54/62 26/53/62 +f 23/12/63 24/31/63 11/44/63 +f 23/12/64 16/6/64 24/31/64 +f 16/6/65 6/22/65 24/31/65 +f 17/11/66 22/23/66 6/22/66 +f 17/11/67 20/10/67 22/23/67 +f 20/10/68 5/28/68 22/23/68 +f 20/8/69 21/20/69 5/19/69 +f 20/8/70 18/7/70 21/20/70 +f 18/7/71 4/16/71 21/20/71 +f 18/7/72 19/17/72 4/16/72 +f 18/7/73 13/3/73 19/17/73 +f 13/3/74 3/13/74 19/17/74 +f 16/6/75 17/11/75 6/22/75 +f 16/6/76 14/5/76 17/11/76 +f 14/5/77 1/9/77 17/11/77 +f 13/3/78 15/14/78 3/13/78 +f 13/3/79 14/2/79 15/14/79 +f 14/2/80 2/54/80 15/14/80 +o Cube_Cube.001 +v -1.168705 -1.257079 2.143840 +v -0.824656 0.106843 0.722100 +v -1.136625 -1.403357 2.011274 +v -0.792577 -0.039434 0.589534 +v -0.974315 -1.257079 2.190881 +v -0.630267 0.106843 0.769140 +v -0.942236 -1.403357 2.058315 +v -0.598187 -0.039434 0.636574 +vt 0.612665 0.123532 +vt 0.732678 0.002422 +vt 0.732678 0.123532 +vt 0.002400 0.547896 +vt 0.122413 0.426786 +vt 0.122413 0.547896 +vt 0.128704 0.367808 +vt 0.248718 0.246698 +vt 0.248718 0.367808 +vt 0.002400 0.552740 +vt 0.122413 0.673850 +vt 0.002400 0.673850 +vt 0.128704 0.997578 +vt 0.248718 0.876468 +vt 0.248718 0.997578 +vt 0.747972 0.871624 +vt 0.627959 0.750514 +vt 0.747972 0.750514 +vt 0.612665 0.002422 +vt 0.002400 0.426786 +vt 0.128704 0.246698 +vt 0.122413 0.552740 +vt 0.128704 0.876468 +vt 0.627959 0.871624 +vn -0.9719 0.0000 -0.2352 +vn 0.1604 -0.7314 -0.6628 +vn 0.9719 -0.0000 0.2352 +vn -0.1604 0.7314 0.6628 +vn -0.1720 -0.6820 0.7109 +vn 0.1720 0.6820 -0.7109 +usemtl None +s off +f 44/55/81 45/56/81 43/57/81 +f 46/58/82 49/59/82 45/60/82 +f 50/61/83 47/62/83 49/63/83 +f 48/64/84 43/65/84 47/66/84 +f 49/67/85 43/68/85 45/69/85 +f 46/70/86 48/71/86 50/72/86 +f 44/55/81 46/73/81 45/56/81 +f 46/58/82 50/74/82 49/59/82 +f 50/61/83 48/75/83 47/62/83 +f 48/64/84 44/76/84 43/65/84 +f 49/67/85 47/77/85 43/68/85 +f 46/70/86 44/78/86 48/71/86 +o Cube.001_Cube.002 +v -0.100000 -0.018407 0.617654 +v -0.100000 -1.437380 2.027092 +v -0.100000 0.122537 0.759552 +v -0.100000 -1.296436 2.168990 +v 0.100000 -0.018407 0.617654 +v 0.100000 -1.437380 2.027092 +v 0.100000 0.122537 0.759552 +v 0.100000 -1.296436 2.168990 +vt 0.253518 0.745670 +vt 0.373531 0.624560 +vt 0.373531 0.745670 +vt 0.487851 0.123532 +vt 0.607864 0.002422 +vt 0.607864 0.123532 +vt 0.253518 0.367808 +vt 0.373531 0.246698 +vt 0.373531 0.367808 +vt 0.128704 0.624560 +vt 0.248718 0.745670 +vt 0.128704 0.745670 +vt 0.253518 0.997578 +vt 0.373531 0.876468 +vt 0.373531 0.997578 +vt 0.872786 0.367808 +vt 0.752773 0.246698 +vt 0.872786 0.246698 +vt 0.253518 0.624560 +vt 0.487851 0.002422 +vt 0.253518 0.246698 +vt 0.248718 0.624560 +vt 0.253518 0.876468 +vt 0.752773 0.367808 +vn -1.0000 -0.0000 0.0000 +vn 0.0000 0.7047 0.7095 +vn 1.0000 0.0000 0.0000 +vn 0.0000 -0.7047 -0.7095 +vn 0.0000 0.7095 -0.7047 +vn 0.0000 -0.7095 0.7047 +usemtl None +s off +f 52/79/87 53/80/87 51/81/87 +f 54/82/88 57/83/88 53/84/88 +f 58/85/89 55/86/89 57/87/89 +f 56/88/90 51/89/90 55/90/90 +f 57/91/91 51/92/91 53/93/91 +f 54/94/92 56/95/92 58/96/92 +f 52/79/87 54/97/87 53/80/87 +f 54/82/88 58/98/88 57/83/88 +f 58/85/89 56/99/89 55/86/89 +f 56/88/90 52/100/90 51/89/90 +f 57/91/91 55/101/91 51/92/91 +f 54/94/92 52/102/92 56/95/92 +o Cube.002_Cube.003 +v 1.189099 -1.273681 2.080395 +v 0.651476 0.053127 0.683777 +v 1.141434 -1.423333 1.956571 +v 0.603811 -0.096525 0.559953 +v 1.375748 -1.273681 2.008545 +v 0.838124 0.053127 0.611927 +v 1.328082 -1.423333 1.884722 +v 0.790459 -0.096525 0.488104 +vt 0.503146 0.745670 +vt 0.623159 0.624560 +vt 0.623159 0.745670 +vt 0.128704 0.619716 +vt 0.248718 0.498606 +vt 0.248718 0.619716 +vt 0.002400 0.421942 +vt 0.122413 0.300832 +vt 0.122413 0.421942 +vt 0.378332 0.624560 +vt 0.498345 0.745670 +vt 0.378332 0.745670 +vt 0.378332 0.997578 +vt 0.498345 0.876468 +vt 0.498345 0.997578 +vt 0.872786 0.493762 +vt 0.752773 0.372652 +vt 0.872786 0.372652 +vt 0.503146 0.624560 +vt 0.128704 0.498606 +vt 0.002400 0.300833 +vt 0.498345 0.624560 +vt 0.378332 0.876468 +vt 0.752773 0.493762 +vn -0.9332 0.0000 0.3592 +vn -0.2383 -0.7483 -0.6191 +vn 0.9332 -0.0000 -0.3592 +vn 0.2383 0.7483 0.6191 +vn 0.2688 -0.6634 0.6983 +vn -0.2688 0.6634 -0.6983 +usemtl None +s off +f 60/103/93 61/104/93 59/105/93 +f 62/106/94 65/107/94 61/108/94 +f 66/109/95 63/110/95 65/111/95 +f 64/112/96 59/113/96 63/114/96 +f 65/115/97 59/116/97 61/117/97 +f 62/118/98 64/119/98 66/120/98 +f 60/103/93 62/121/93 61/104/93 +f 62/106/94 66/122/94 65/107/94 +f 66/109/95 64/123/95 63/110/95 +f 64/112/96 60/124/96 59/113/96 +f 65/115/97 63/125/97 59/116/97 +f 62/118/98 60/126/98 64/119/98 +o Cube.003_Cube.004 +v -0.100000 -1.378174 -1.981819 +v -0.100000 0.086182 -0.619591 +v -0.100000 -1.241951 -2.128254 +v -0.100000 0.222404 -0.766027 +v 0.100000 -1.378174 -1.981819 +v 0.100000 0.086182 -0.619591 +v 0.100000 -1.241951 -2.128254 +v 0.100000 0.222404 -0.766027 +vt 0.627959 0.493762 +vt 0.747972 0.372652 +vt 0.747972 0.493762 +vt 0.253518 0.619716 +vt 0.373531 0.498606 +vt 0.373531 0.619716 +vt 0.363037 0.123532 +vt 0.483050 0.002422 +vt 0.483050 0.123532 +vt 0.627959 0.246698 +vt 0.747972 0.367808 +vt 0.627959 0.367808 +vt 0.503145 0.997578 +vt 0.623159 0.876468 +vt 0.623159 0.997578 +vt 0.872786 0.619716 +vt 0.752773 0.498606 +vt 0.872786 0.498606 +vt 0.627959 0.372652 +vt 0.253518 0.498606 +vt 0.363037 0.002422 +vt 0.747972 0.246698 +vt 0.503145 0.876468 +vt 0.752773 0.619716 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.6811 -0.7322 +vn 1.0000 -0.0000 0.0000 +vn 0.0000 -0.6811 0.7322 +vn 0.0000 -0.7322 -0.6811 +vn 0.0000 0.7322 0.6811 +usemtl None +s off +f 68/127/99 69/128/99 67/129/99 +f 70/130/100 73/131/100 69/132/100 +f 74/133/101 71/134/101 73/135/101 +f 72/136/102 67/137/102 71/138/102 +f 73/139/103 67/140/103 69/141/103 +f 70/142/104 72/143/104 74/144/104 +f 68/127/99 70/145/99 69/128/99 +f 70/130/100 74/146/100 73/131/100 +f 74/133/101 72/147/101 71/134/101 +f 72/136/102 68/148/102 67/137/102 +f 73/139/103 71/149/103 67/140/103 +f 70/142/104 68/150/104 72/143/104 +o Cube.004_Cube.005 +v 0.972214 -1.400771 -1.801529 +v 0.562293 0.078854 -0.519861 +v 1.017289 -1.266209 -1.942459 +v 0.607367 0.213416 -0.660790 +v 1.162708 -1.400771 -1.740603 +v 0.752787 0.078854 -0.458934 +v 1.207783 -1.266209 -1.881533 +v 0.797861 0.213416 -0.599864 +vt 0.627959 0.745670 +vt 0.747972 0.624560 +vt 0.747972 0.745670 +vt 0.378332 0.619716 +vt 0.498345 0.498606 +vt 0.498345 0.619716 +vt 0.128704 0.493762 +vt 0.248718 0.372652 +vt 0.248718 0.493762 +vt 0.627959 0.498606 +vt 0.747972 0.619716 +vt 0.627959 0.619716 +vt 0.627959 0.997578 +vt 0.747972 0.876468 +vt 0.747972 0.997578 +vt 0.872786 0.745670 +vt 0.752773 0.624560 +vt 0.872786 0.624560 +vt 0.627959 0.624560 +vt 0.378332 0.498606 +vt 0.128704 0.372652 +vt 0.747972 0.498606 +vt 0.627959 0.876468 +vt 0.752773 0.745670 +vn -0.9525 -0.0000 -0.3046 +vn 0.2254 0.6728 -0.7046 +vn 0.9525 0.0000 0.3046 +vn -0.2254 -0.6728 0.7046 +vn 0.2050 -0.7398 -0.6408 +vn -0.2050 0.7398 0.6408 +usemtl None +s off +f 76/151/105 77/152/105 75/153/105 +f 78/154/106 81/155/106 77/156/106 +f 82/157/107 79/158/107 81/159/107 +f 80/160/108 75/161/108 79/162/108 +f 81/163/109 75/164/109 77/165/109 +f 78/166/110 80/167/110 82/168/110 +f 76/151/105 78/169/105 77/152/105 +f 78/154/106 82/170/106 81/155/106 +f 82/157/107 80/171/107 79/158/107 +f 80/160/108 76/172/108 75/161/108 +f 81/163/109 79/173/109 75/164/109 +f 78/166/110 76/174/110 80/167/110 +o Cube.005_Cube.006 +v -1.379684 -1.375488 -1.855551 +v -0.867886 -0.051444 -0.446662 +v -1.431736 -1.225692 -1.977418 +v -0.919938 0.098353 -0.568529 +v -1.193482 -1.370006 -1.928344 +v -0.681684 -0.045962 -0.519455 +v -1.245534 -1.220210 -2.050211 +v -0.733736 0.103835 -0.641322 +vt 0.737478 0.123532 +vt 0.857491 0.002422 +vt 0.857491 0.123532 +vt 0.503146 0.367808 +vt 0.623159 0.246698 +vt 0.623159 0.367808 +vt 0.253518 0.493762 +vt 0.373531 0.372652 +vt 0.373531 0.493762 +vt 0.002400 0.678694 +vt 0.122413 0.799804 +vt 0.002400 0.799804 +vt 0.752773 0.997578 +vt 0.872786 0.876468 +vt 0.872786 0.997578 +vt 0.872786 0.871624 +vt 0.752773 0.750514 +vt 0.872786 0.750514 +vt 0.737478 0.002422 +vt 0.503146 0.246698 +vt 0.253518 0.372652 +vt 0.122413 0.678694 +vt 0.752773 0.876468 +vt 0.752773 0.871624 +vn -0.9310 -0.0274 0.3640 +vn -0.2603 0.7490 -0.6093 +vn 0.9310 0.0274 -0.3640 +vn 0.2603 -0.7490 0.6093 +vn -0.2559 -0.6620 -0.7044 +vn 0.2559 0.6620 0.7044 +usemtl None +s off +f 84/175/111 85/176/111 83/177/111 +f 86/178/112 89/179/112 85/180/112 +f 90/181/113 87/182/113 89/183/113 +f 88/184/114 83/185/114 87/186/114 +f 89/187/115 83/188/115 85/189/115 +f 86/190/116 88/191/116 90/192/116 +f 84/175/111 86/193/111 85/176/111 +f 86/178/112 90/194/112 89/179/112 +f 90/181/113 88/195/113 87/182/113 +f 88/184/114 84/196/114 83/185/114 +f 89/187/115 87/197/115 83/188/115 +f 86/190/116 84/198/116 88/191/116 +o Icosphere.001 +v 1.681861 -0.073431 0.007016 +v 2.018523 0.183753 0.251613 +v 1.553270 0.183753 0.402786 +v 1.262236 0.169665 0.007919 +v 1.553270 0.183753 -0.388753 +v 2.021341 0.185671 -0.242560 +v 1.810452 0.599896 0.402786 +v 1.345198 0.599896 0.251613 +v 1.345198 0.599896 -0.237581 +v 1.810452 0.599896 -0.388753 +v 2.097997 0.599894 0.007016 +v 1.681861 0.857081 0.007016 +v 1.606277 -0.003947 0.239642 +v 1.879744 -0.003947 0.150786 +v 1.804162 0.147222 0.383414 +v 2.076988 0.143651 0.007896 +v 1.879744 -0.003947 -0.136753 +v 1.437262 -0.003946 0.007016 +v 1.361676 0.147223 0.239643 +v 1.606277 -0.003947 -0.225609 +v 1.359481 0.143738 -0.232652 +v 1.804162 0.147222 -0.369381 +v 2.154710 0.402293 0.151401 +v 2.124346 0.391825 -0.136754 +v 1.681861 0.391825 0.472272 +v 1.959627 0.391822 0.389697 +v 1.209012 0.402295 0.151403 +v 1.404091 0.391847 0.389695 +v 1.408390 0.391825 -0.369383 +v 1.239375 0.391825 -0.136754 +v 1.955331 0.391825 -0.369383 +v 1.681861 0.391825 -0.458239 +v 2.002045 0.636427 0.239643 +v 1.559559 0.636427 0.383414 +v 1.286092 0.636427 0.007016 +v 1.559559 0.636427 -0.369381 +v 2.002045 0.636427 -0.225610 +v 1.757444 0.787597 0.239642 +v 1.926459 0.787595 0.007016 +v 1.483977 0.787597 0.150786 +v 1.483977 0.787597 -0.136753 +v 1.757444 0.787597 -0.225609 +vt 0.693978 0.227864 +vt 0.675849 0.201658 +vt 0.693801 0.205056 +vt 0.622482 0.226132 +vt 0.592407 0.218964 +vt 0.603685 0.213111 +vt 0.720039 0.231175 +vt 0.557833 0.139620 +vt 0.569961 0.166573 +vt 0.539018 0.148913 +vt 0.527292 0.128002 +vt 0.642965 0.214530 +vt 0.705314 0.176326 +vt 0.682512 0.171364 +vt 0.708437 0.146367 +vt 0.749014 0.222117 +vt 0.726702 0.200882 +vt 0.765343 0.190920 +vt 0.516005 0.169310 +vt 0.545194 0.183740 +vt 0.512992 0.202264 +vt 0.590996 0.185417 +vt 0.573928 0.160489 +vt 0.604035 0.156668 +vt 0.652909 0.219692 +vt 0.735775 0.164254 +vt 0.569961 0.198247 +vt 0.569057 0.228198 +vt 0.543935 0.219923 +vt 0.486621 0.178425 +vt 0.622642 0.189036 +vt 0.464625 0.206890 +vt 0.446106 0.233972 +vt 0.443814 0.210306 +vt 0.439696 0.151764 +vt 0.459308 0.177904 +vt 0.429161 0.177904 +vt 0.376901 0.157956 +vt 0.407745 0.149141 +vt 0.392252 0.181544 +vt 0.363020 0.216910 +vt 0.362676 0.187433 +vt 0.384093 0.216196 +vt 0.654138 0.185599 +vt 0.641121 0.156591 +vt 0.671020 0.160286 +vt 0.415960 0.233972 +vt 0.413337 0.206890 +vt 0.652414 0.127918 +vt 0.622483 0.130532 +vt 0.671020 0.195014 +vt 0.485181 0.214324 +vt 0.468689 0.189829 +vt 0.513555 0.230385 +vt 0.387745 0.135004 +vt 0.424416 0.128072 +vt 0.743721 0.136215 +vt 0.765343 0.159054 +vt 0.718879 0.128017 +vt 0.463873 0.216643 +vt 0.592408 0.128044 +vt 0.502706 0.145453 +vt 0.689799 0.142275 +vt 0.674773 0.170545 +vt 0.573928 0.195218 +vt 0.550988 0.132736 +vn 0.1024 -0.9435 0.3151 +vn 0.6960 -0.6629 0.2760 +vn -0.2680 -0.9435 0.1947 +vn -0.2680 -0.9435 -0.1947 +vn 0.1024 -0.9435 -0.3151 +vn 0.8674 -0.4139 0.2762 +vn 0.0247 -0.3304 0.9435 +vn -0.8561 -0.3987 0.3288 +vn -0.5551 -0.3149 -0.7699 +vn 0.5193 -0.3210 -0.7920 +vn 0.7634 -0.1930 0.6165 +vn -0.2821 -0.1425 0.9488 +vn -0.9816 -0.1645 -0.0975 +vn -0.3066 -0.1256 -0.9435 +vn 0.8048 -0.1020 -0.5847 +vn 0.4089 0.6617 0.6284 +vn -0.4713 0.6617 0.5831 +vn -0.7002 0.6617 -0.2680 +vn 0.0385 0.6617 -0.7488 +vn 0.7240 0.6617 -0.1947 +vn 0.2680 0.9435 -0.1947 +vn 0.4911 0.7947 -0.3568 +vn 0.4089 0.6617 -0.6284 +vn -0.1024 0.9435 -0.3151 +vn -0.1876 0.7947 -0.5773 +vn -0.4713 0.6617 -0.5831 +vn -0.3313 0.9435 0.0000 +vn -0.6071 0.7947 0.0000 +vn -0.7002 0.6617 0.2680 +vn -0.1024 0.9435 0.3151 +vn -0.1876 0.7947 0.5773 +vn 0.0385 0.6617 0.7488 +vn 0.2680 0.9435 0.1947 +vn 0.4911 0.7947 0.3568 +vn 0.7240 0.6617 0.1947 +vn 0.8897 0.3304 -0.3151 +vn 0.7947 0.1876 -0.5773 +vn 0.5746 0.3304 -0.7488 +vn -0.0247 0.3304 -0.9435 +vn -0.3035 0.1876 -0.9342 +vn -0.5346 0.3304 -0.7779 +vn -0.9050 0.3304 -0.2680 +vn -0.9623 0.2487 -0.1104 +vn -0.8512 0.4484 0.2727 +vn -0.5326 0.3582 0.7669 +vn -0.2791 0.2015 0.9389 +vn -0.0247 0.3304 0.9435 +vn 0.5648 0.3581 0.7435 +vn 0.7435 0.2512 0.6197 +vn 0.8490 0.4481 0.2798 +vn 0.3066 0.1256 -0.9435 +vn 0.3035 -0.1876 -0.9342 +vn 0.0247 -0.3304 -0.9435 +vn -0.8026 0.1256 -0.5831 +vn -0.7983 -0.1623 -0.5800 +vn -0.8937 -0.3058 -0.3283 +vn -0.7535 0.2020 0.6257 +vn -0.7559 -0.2420 0.6082 +vn -0.5648 -0.3581 0.7435 +vn 0.2820 0.1425 0.9488 +vn 0.2791 -0.2015 0.9389 +vn 0.5326 -0.3582 0.7669 +vn 0.9738 0.1992 -0.1098 +vn 0.9666 -0.2388 -0.0932 +vn 0.9108 -0.3234 -0.2566 +vn 0.4595 -0.6691 -0.5841 +vn 0.1876 -0.7947 -0.5773 +vn -0.0385 -0.6617 -0.7488 +vn -0.3800 -0.6656 -0.6423 +vn -0.4747 -0.8097 -0.3449 +vn -0.6899 -0.6945 -0.2040 +vn -0.6852 -0.6920 0.2270 +vn -0.4911 -0.7947 0.3568 +vn -0.4089 -0.6617 0.6284 +vn 0.6951 -0.6677 -0.2665 +vn 0.5991 -0.8007 0.0000 +vn 0.3313 -0.9435 0.0000 +vn -0.0385 -0.6617 0.7488 +vn 0.1876 -0.7947 0.5773 +vn 0.4713 -0.6617 0.5831 +usemtl None +s off +f 91/199/117 104/200/117 103/201/117 +f 92/202/118 104/203/118 106/204/118 +f 91/199/119 103/201/119 108/205/119 +f 91/206/120 108/207/120 110/208/120 +f 91/206/121 110/208/121 107/209/121 +f 92/202/122 106/204/122 113/210/122 +f 93/211/123 105/212/123 115/213/123 +f 94/214/124 109/215/124 117/216/124 +f 95/217/125 111/218/125 119/219/125 +f 96/220/126 112/221/126 121/222/126 +f 92/202/127 113/210/127 116/223/127 +f 93/211/128 115/213/128 118/224/128 +f 94/225/129 117/226/129 120/227/129 +f 95/217/130 119/219/130 122/228/130 +f 96/220/131 121/222/131 114/229/131 +f 97/230/132 123/231/132 128/232/132 +f 98/233/133 124/234/133 130/235/133 +f 99/236/134 125/237/134 131/238/134 +f 100/239/135 126/240/135 132/241/135 +f 101/242/136 127/243/136 129/244/136 +f 129/245/137 132/241/137 102/246/137 +f 129/244/138 127/243/138 132/247/138 +f 127/243/139 100/248/139 132/247/139 +f 132/241/140 131/238/140 102/246/140 +f 132/241/141 126/240/141 131/238/141 +f 126/240/142 99/236/142 131/238/142 +f 131/238/143 130/235/143 102/246/143 +f 131/238/144 125/237/144 130/235/144 +f 125/237/145 98/233/145 130/235/145 +f 130/235/146 128/232/146 102/246/146 +f 130/235/147 124/234/147 128/232/147 +f 124/234/148 97/230/148 128/232/148 +f 128/232/149 129/245/149 102/246/149 +f 128/232/150 123/231/150 129/245/150 +f 123/249/151 101/242/151 129/244/151 +f 114/229/152 127/243/152 101/242/152 +f 114/229/153 121/222/153 127/243/153 +f 121/222/154 100/248/154 127/243/154 +f 122/228/155 126/250/155 100/251/155 +f 122/228/156 119/219/156 126/250/156 +f 119/219/157 99/252/157 126/250/157 +f 120/253/158 125/237/158 99/236/158 +f 120/253/159 117/254/159 125/237/159 +f 117/254/160 98/233/160 125/237/160 +f 118/224/161 124/255/161 98/256/161 +f 118/224/162 115/213/162 124/255/162 +f 115/213/163 97/257/163 124/255/163 +f 116/258/164 123/231/164 97/230/164 +f 116/223/165 113/210/165 123/249/165 +f 113/210/166 101/242/166 123/249/166 +f 121/222/167 122/259/167 100/248/167 +f 121/222/168 112/221/168 122/259/168 +f 112/260/169 95/217/169 122/228/169 +f 119/219/170 120/227/170 99/252/170 +f 119/219/171 111/218/171 120/227/171 +f 111/218/172 94/225/172 120/227/172 +f 117/216/173 118/224/173 98/256/173 +f 117/216/174 109/215/174 118/224/174 +f 109/215/175 93/211/175 118/224/175 +f 115/213/176 116/261/176 97/257/176 +f 115/213/177 105/212/177 116/261/177 +f 105/212/178 92/262/178 116/261/178 +f 113/210/179 114/229/179 101/242/179 +f 113/210/180 106/204/180 114/229/180 +f 106/204/181 96/220/181 114/229/181 +f 107/263/182 112/221/182 96/220/182 +f 107/209/183 110/208/183 112/260/183 +f 110/208/184 95/217/184 112/260/184 +f 110/208/185 111/218/185 95/217/185 +f 110/208/186 108/207/186 111/218/186 +f 108/207/187 94/225/187 111/218/187 +f 108/205/188 109/215/188 94/214/188 +f 108/205/189 103/201/189 109/215/189 +f 103/201/190 93/211/190 109/215/190 +f 106/204/191 107/263/191 96/220/191 +f 106/204/192 104/203/192 107/263/192 +f 104/264/193 91/206/193 107/209/193 +f 103/201/194 105/212/194 93/211/194 +f 103/201/195 104/200/195 105/212/195 +f 104/200/196 92/262/196 105/212/196 +o Icosphere.002 +v 2.061433 0.129717 0.008815 +v 2.101074 0.193691 0.229830 +v 2.046248 0.318514 0.343377 +v 2.012501 0.159699 0.008035 +v 2.048383 0.278037 -0.304942 +v 2.107427 0.202289 -0.200188 +v 2.076554 0.348463 0.304546 +v 2.021729 0.235014 0.203426 +v 2.031073 0.250915 -0.183429 +v 2.082651 0.321295 -0.287613 +v 2.110945 0.207573 0.006726 +v 2.062279 0.236789 0.006235 +v 2.052494 0.167456 0.229826 +v 2.084720 0.132124 0.138731 +v 2.075813 0.298522 0.335746 +v 2.108157 0.155444 0.008103 +v 2.088790 0.153046 -0.114136 +v 2.032630 0.137843 0.008607 +v 2.023670 0.182780 0.220741 +v 2.057901 0.177984 -0.191387 +v 2.029993 0.195734 -0.186342 +v 2.078370 0.262972 -0.297353 +v 2.113544 0.176802 0.125353 +v 2.119181 0.196420 -0.112008 +v 2.061401 0.387560 0.355702 +v 2.093627 0.316833 0.313486 +v 2.009259 0.176802 0.125353 +v 2.029175 0.316833 0.313486 +v 2.034408 0.291089 -0.280426 +v 2.014960 0.198102 -0.108729 +v 2.098404 0.288674 -0.287682 +v 2.061401 0.331031 -0.340272 +v 2.099132 0.232366 0.191339 +v 2.046989 0.335141 0.291223 +v 2.015315 0.211791 0.006791 +v 2.054500 0.316694 -0.270512 +v 2.108389 0.248055 -0.178989 +v 2.070308 0.247688 0.182252 +v 2.090990 0.228915 0.006308 +v 2.038082 0.221480 0.111974 +v 2.045741 0.241129 -0.104766 +v 2.080728 0.265537 -0.172776 +vt 0.059205 0.292672 +vt 0.037326 0.284709 +vt 0.078470 0.249135 +vt 0.029325 0.213800 +vt 0.011982 0.258159 +vt 0.091252 0.287793 +vt 0.293632 0.004264 +vt 0.326267 0.005769 +vt 0.306814 0.053480 +vt 0.268762 0.035110 +vt 0.011446 0.232203 +vt 0.106350 0.083357 +vt 0.071844 0.101205 +vt 0.098787 0.005739 +vt 0.115629 0.266741 +vt 0.111225 0.236552 +vt 0.123875 0.246619 +vt 0.340055 0.157582 +vt 0.340912 0.065594 +vt 0.358410 0.168313 +vt 0.259947 0.091929 +vt 0.304551 0.148983 +vt 0.289630 0.181700 +vt 0.054390 0.079129 +vt 0.123875 0.088038 +vt 0.929680 0.900811 +vt 0.906877 0.891008 +vt 0.938476 0.855895 +vt 0.338739 0.217465 +vt 0.247052 0.089341 +vt 0.201080 0.048365 +vt 0.226381 0.177597 +vt 0.195031 0.160811 +vt 0.141691 0.174542 +vt 0.168847 0.063198 +vt 0.160386 0.190485 +vt 0.102511 0.167786 +vt 0.118976 0.209545 +vt 0.087267 0.175152 +vt 0.053214 0.085576 +vt 0.083383 0.094208 +vt 0.051018 0.144797 +vt 0.015359 0.200928 +vt 0.018905 0.160145 +vt 0.039488 0.180411 +vt 0.071407 0.175791 +vt 0.768449 0.195386 +vt 0.790288 0.161386 +vt 0.809249 0.171081 +vt 0.833163 0.152574 +vt 0.820913 0.127315 +vt 0.136477 0.202346 +vt 0.832928 0.195386 +vt 0.219246 0.183477 +vt 0.187903 0.174799 +vt 0.240964 0.206996 +vt 0.002429 0.213892 +vt 0.270364 0.141519 +vt 0.032215 0.118986 +vt 0.076134 0.078750 +vt 0.843292 0.127012 +vt 0.843292 0.179902 +vt 0.834631 0.146345 +vt 0.101670 0.125079 +vt 0.916003 0.848077 +vt 0.933569 0.793864 +vt 0.876427 0.832732 +vt 0.149094 0.083126 +vt 0.184184 0.004698 +vt 0.219526 0.083126 +vt 0.242545 0.239579 +vt 0.035308 0.172505 +vt 0.314370 0.212793 +vt 0.938476 0.747880 +vt 0.358410 0.065046 +vt 0.353024 0.024196 +vt 0.128583 0.239579 +vt 0.955239 0.902055 +vt 0.940021 0.886869 +vt 0.955239 0.747904 +vt 0.250191 0.043609 +vt 0.270982 0.013823 +vn -0.5657 -0.8164 0.1165 +vn 0.9177 -0.3855 0.0958 +vn -0.2694 -0.9510 0.1515 +vn -0.2633 -0.9389 -0.2217 +vn -0.2037 -0.9526 -0.2261 +vn 0.1213 -0.9775 0.1725 +vn 0.1164 -0.1992 0.9730 +vn -0.4187 -0.9002 0.1197 +vn -0.8886 -0.3007 -0.3464 +vn 0.7677 -0.4146 -0.4885 +vn 0.9922 -0.0230 0.1221 +vn -0.8662 0.1028 0.4890 +vn -0.9996 -0.0139 -0.0256 +vn -0.8848 -0.0878 -0.4577 +vn 0.9904 -0.0324 -0.1342 +vn 0.5197 0.6461 -0.5590 +vn -0.8830 0.4151 -0.2193 +vn -0.2847 0.9433 0.1704 +vn 0.1186 0.8924 0.4353 +vn 0.7221 0.6779 0.1378 +vn 0.2598 0.9489 0.1792 +vn 0.5510 0.8232 0.1368 +vn 0.5542 0.7451 0.3710 +vn -0.4321 0.8963 0.0994 +vn 0.1871 0.8901 0.4157 +vn -0.7912 0.5712 0.2186 +vn -0.2686 0.9601 0.0776 +vn -0.5866 0.8081 0.0525 +vn 0.1389 0.9829 -0.1206 +vn -0.6015 0.7986 -0.0220 +vn 0.4695 0.7349 -0.4893 +vn -0.0626 0.7718 -0.6328 +vn 0.2640 0.9619 -0.0716 +vn 0.4782 0.8774 -0.0374 +vn 0.7302 0.6818 -0.0448 +vn 0.9654 0.2573 0.0428 +vn 0.9848 0.1717 -0.0263 +vn 0.8977 0.4334 0.0795 +vn -0.0402 0.9795 0.1973 +vn -0.7944 0.6056 0.0459 +vn -0.8069 0.5550 0.2021 +vn -0.9663 0.2561 -0.0274 +vn -0.9915 0.1298 -0.0123 +vn -0.9801 0.1985 0.0085 +vn -0.8375 0.4642 -0.2884 +vn -0.8239 0.5157 -0.2351 +vn -0.0732 0.7818 -0.6192 +vn 0.8808 0.4071 -0.2418 +vn 0.5882 0.6773 -0.4419 +vn 0.9765 0.2131 0.0339 +vn 0.8663 0.4189 -0.2721 +vn 0.6742 -0.2663 -0.6889 +vn -0.0610 -0.5432 -0.8374 +vn -0.8355 0.5173 0.1855 +vn -0.9733 -0.1368 -0.1843 +vn -0.8899 -0.4274 -0.1593 +vn -0.0192 0.8030 -0.5957 +vn -0.9860 -0.0654 0.1531 +vn -0.8203 -0.3022 0.4855 +vn 0.8866 0.4546 -0.0848 +vn 0.7854 -0.0116 0.6189 +vn 0.8472 -0.2626 0.4619 +vn 0.9673 0.2499 0.0436 +vn 0.9671 -0.2545 0.0019 +vn 0.7654 -0.6273 -0.1438 +vn -0.0869 -0.8564 -0.5089 +vn 0.5616 -0.6950 -0.4489 +vn -0.2118 -0.7420 -0.6360 +vn -0.5190 -0.6624 -0.5402 +vn -0.5515 -0.8016 -0.2306 +vn -0.7199 -0.6679 -0.1886 +vn -0.7325 -0.6716 0.1113 +vn -0.5020 -0.8501 0.1589 +vn -0.4990 -0.5338 0.6827 +vn 0.8384 -0.5312 -0.1224 +vn 0.5049 -0.8609 -0.0631 +vn 0.4592 -0.8859 -0.0659 +vn -0.2005 -0.5939 0.7791 +vn 0.7381 -0.4986 0.4545 +vn -0.5039 -0.6710 0.5439 +usemtl None +s off +f 133/265/197 146/266/197 145/267/197 +f 134/268/198 146/266/198 148/269/198 +f 133/265/199 145/267/199 150/270/199 +f 133/271/200 150/272/200 152/273/200 +f 133/271/201 152/273/201 149/274/201 +f 134/268/202 148/269/202 155/275/202 +f 135/276/203 147/277/203 157/278/203 +f 136/279/204 151/280/204 159/281/204 +f 137/282/205 153/283/205 161/284/205 +f 138/285/206 154/286/206 163/287/206 +f 134/268/207 155/275/207 158/288/207 +f 135/276/208 157/278/208 160/289/208 +f 136/290/209 159/291/209 162/292/209 +f 137/282/210 161/284/210 164/293/210 +f 138/285/211 163/287/211 156/294/211 +f 139/295/212 165/296/212 170/297/212 +f 140/298/213 166/299/213 172/300/213 +f 141/301/214 167/302/214 173/303/214 +f 142/304/215 168/305/215 174/306/215 +f 143/307/216 169/308/216 171/309/216 +f 171/309/217 174/306/217 144/310/217 +f 171/309/218 169/308/218 174/306/218 +f 169/308/219 142/304/219 174/306/219 +f 174/311/220 173/312/220 144/313/220 +f 174/306/221 168/305/221 173/303/221 +f 168/305/222 141/301/222 173/303/222 +f 173/312/223 172/314/223 144/313/223 +f 173/312/224 167/315/224 172/314/224 +f 167/316/225 140/298/225 172/300/225 +f 172/314/226 170/317/226 144/313/226 +f 172/300/227 166/299/227 170/297/227 +f 166/299/228 139/295/228 170/297/228 +f 170/297/229 171/318/229 144/319/229 +f 170/297/230 165/296/230 171/318/230 +f 165/296/231 143/320/231 171/318/231 +f 156/321/232 169/308/232 143/307/232 +f 156/294/233 163/287/233 169/322/233 +f 163/323/234 142/304/234 169/308/234 +f 164/324/235 168/305/235 142/304/235 +f 164/325/236 161/326/236 168/327/236 +f 161/328/237 141/301/237 168/305/237 +f 162/292/238 167/329/238 141/330/238 +f 162/292/239 159/291/239 167/329/239 +f 159/291/240 140/331/240 167/329/240 +f 160/332/241 166/299/241 140/298/241 +f 160/332/242 157/333/242 166/299/242 +f 157/333/243 139/295/243 166/299/243 +f 158/334/244 165/296/244 139/295/244 +f 158/334/245 155/335/245 165/296/245 +f 155/275/246 143/307/246 165/336/246 +f 163/287/247 164/293/247 142/337/247 +f 163/287/248 154/286/248 164/293/248 +f 154/286/249 137/282/249 164/293/249 +f 161/338/250 162/292/250 141/330/250 +f 161/284/251 153/283/251 162/339/251 +f 153/283/252 136/340/252 162/339/252 +f 159/341/253 160/332/253 140/298/253 +f 159/342/254 151/343/254 160/344/254 +f 151/280/255 135/276/255 160/289/255 +f 157/333/256 158/334/256 139/295/256 +f 157/278/257 147/277/257 158/288/257 +f 147/277/258 134/268/258 158/288/258 +f 155/275/259 156/321/259 143/307/259 +f 155/275/260 148/269/260 156/321/260 +f 148/345/261 138/285/261 156/294/261 +f 149/274/262 154/286/262 138/285/262 +f 149/274/263 152/273/263 154/286/263 +f 152/273/264 137/282/264 154/286/264 +f 152/273/265 153/283/265 137/282/265 +f 152/273/266 150/272/266 153/283/266 +f 150/272/267 136/340/267 153/283/267 +f 150/270/268 151/280/268 136/279/268 +f 150/270/269 145/267/269 151/280/269 +f 145/267/270 135/276/270 151/280/270 +f 148/345/271 149/274/271 138/285/271 +f 148/345/272 146/346/272 149/274/272 +f 146/346/273 133/271/273 149/274/273 +f 145/267/274 147/277/274 135/276/274 +f 145/267/275 146/266/275 147/277/275 +f 146/266/276 134/268/276 147/277/276 +o Cube.006_Cube.007 +v 1.937780 0.546872 0.283218 +v 1.937780 0.676160 0.283218 +v 1.937780 0.546872 0.153931 +v 1.937780 0.676160 0.153931 +v 2.067068 0.546872 0.283218 +v 2.067068 0.676160 0.283218 +v 2.067068 0.546872 0.153931 +v 2.067068 0.676160 0.153931 +vt 0.253518 0.871624 +vt 0.373531 0.750514 +vt 0.373531 0.871624 +vt 0.503146 0.493762 +vt 0.623159 0.372652 +vt 0.623159 0.493762 +vt 0.378332 0.367808 +vt 0.498345 0.246698 +vt 0.498345 0.367808 +vt 0.128704 0.750514 +vt 0.248718 0.871624 +vt 0.128704 0.871624 +vt 0.877587 0.367808 +vt 0.997600 0.246698 +vt 0.997600 0.367808 +vt 0.122413 0.925758 +vt 0.002400 0.804648 +vt 0.122413 0.804648 +vt 0.253518 0.750514 +vt 0.503146 0.372652 +vt 0.378332 0.246698 +vt 0.248718 0.750514 +vt 0.877587 0.246698 +vt 0.002400 0.925758 +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 None +s off +f 176/347/277 177/348/277 175/349/277 +f 178/350/278 181/351/278 177/352/278 +f 182/353/279 179/354/279 181/355/279 +f 180/356/280 175/357/280 179/358/280 +f 181/359/281 175/360/281 177/361/281 +f 178/362/282 180/363/282 182/364/282 +f 176/347/277 178/365/277 177/348/277 +f 178/350/278 182/366/278 181/351/278 +f 182/353/279 180/367/279 179/354/279 +f 180/356/280 176/368/280 175/357/280 +f 181/359/281 179/369/281 175/360/281 +f 178/362/282 176/370/282 180/363/282 +o Cube.007_Cube.008 +v 1.937780 0.546872 -0.137109 +v 1.937780 0.676160 -0.137109 +v 1.937780 0.546872 -0.266397 +v 1.937780 0.676160 -0.266397 +v 2.067068 0.546872 -0.137109 +v 2.067068 0.676160 -0.137109 +v 2.067068 0.546872 -0.266397 +v 2.067068 0.676160 -0.266397 +vt 0.503146 0.871624 +vt 0.623159 0.750514 +vt 0.623159 0.871624 +vt 0.503146 0.619716 +vt 0.623159 0.498606 +vt 0.623159 0.619716 +vt 0.378332 0.493762 +vt 0.498345 0.372652 +vt 0.498345 0.493762 +vt 0.378332 0.750514 +vt 0.498345 0.871624 +vt 0.378332 0.871624 +vt 0.877587 0.493762 +vt 0.997600 0.372652 +vt 0.997600 0.493762 +vt 0.982305 0.123532 +vt 0.862292 0.002422 +vt 0.982305 0.002422 +vt 0.503146 0.750514 +vt 0.503146 0.498606 +vt 0.378332 0.372652 +vt 0.498345 0.750514 +vt 0.877587 0.372652 +vt 0.862292 0.123532 +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 None +s off +f 184/371/283 185/372/283 183/373/283 +f 186/374/284 189/375/284 185/376/284 +f 190/377/285 187/378/285 189/379/285 +f 188/380/286 183/381/286 187/382/286 +f 189/383/287 183/384/287 185/385/287 +f 186/386/288 188/387/288 190/388/288 +f 184/371/283 186/389/283 185/372/283 +f 186/374/284 190/390/284 189/375/284 +f 190/377/285 188/391/285 187/378/285 +f 188/380/286 184/392/286 183/381/286 +f 189/383/287 187/393/287 183/384/287 +f 186/386/288 184/394/288 188/387/288 diff --git a/Step 2/cmake-build-debug/test.png b/Step 2/cmake-build-debug/test.png index c79b7b3..87efbd3 100644 Binary files a/Step 2/cmake-build-debug/test.png and b/Step 2/cmake-build-debug/test.png differ diff --git a/Step 2/cmake-build-release/.cmake/api/v1/reply/codemodel-v2-01890b5125a9a100c3e5.json b/Step 2/cmake-build-release/.cmake/api/v1/reply/codemodel-v2-7b5e10a772884891e931.json similarity index 93% rename from Step 2/cmake-build-release/.cmake/api/v1/reply/codemodel-v2-01890b5125a9a100c3e5.json rename to Step 2/cmake-build-release/.cmake/api/v1/reply/codemodel-v2-7b5e10a772884891e931.json index e814e18..8ba8f19 100644 --- a/Step 2/cmake-build-release/.cmake/api/v1/reply/codemodel-v2-01890b5125a9a100c3e5.json +++ b/Step 2/cmake-build-release/.cmake/api/v1/reply/codemodel-v2-7b5e10a772884891e931.json @@ -39,7 +39,7 @@ { "directoryIndex" : 0, "id" : "Step_2::@6890427a1f51a3e7e1df", - "jsonFile" : "target-Step_2-Release-1f9724322786b4b63326.json", + "jsonFile" : "target-Step_2-Release-447fa4d814ec7f408004.json", "name" : "Step_2", "projectIndex" : 0 } diff --git a/Step 2/cmake-build-release/.cmake/api/v1/reply/index-2022-10-17T22-08-11-0713.json b/Step 2/cmake-build-release/.cmake/api/v1/reply/index-2022-10-18T03-59-17-0626.json similarity index 93% rename from Step 2/cmake-build-release/.cmake/api/v1/reply/index-2022-10-17T22-08-11-0713.json rename to Step 2/cmake-build-release/.cmake/api/v1/reply/index-2022-10-18T03-59-17-0626.json index ab8904b..ddb3471 100644 --- a/Step 2/cmake-build-release/.cmake/api/v1/reply/index-2022-10-17T22-08-11-0713.json +++ b/Step 2/cmake-build-release/.cmake/api/v1/reply/index-2022-10-18T03-59-17-0626.json @@ -26,7 +26,7 @@ "objects" : [ { - "jsonFile" : "codemodel-v2-01890b5125a9a100c3e5.json", + "jsonFile" : "codemodel-v2-7b5e10a772884891e931.json", "kind" : "codemodel", "version" : { @@ -86,7 +86,7 @@ }, "codemodel-v2" : { - "jsonFile" : "codemodel-v2-01890b5125a9a100c3e5.json", + "jsonFile" : "codemodel-v2-7b5e10a772884891e931.json", "kind" : "codemodel", "version" : { diff --git a/Step 2/cmake-build-release/.cmake/api/v1/reply/target-Step_2-Release-1f9724322786b4b63326.json b/Step 2/cmake-build-release/.cmake/api/v1/reply/target-Step_2-Release-447fa4d814ec7f408004.json similarity index 88% rename from Step 2/cmake-build-release/.cmake/api/v1/reply/target-Step_2-Release-1f9724322786b4b63326.json rename to Step 2/cmake-build-release/.cmake/api/v1/reply/target-Step_2-Release-447fa4d814ec7f408004.json index 8613bc7..2715f70 100644 --- a/Step 2/cmake-build-release/.cmake/api/v1/reply/target-Step_2-Release-1f9724322786b4b63326.json +++ b/Step 2/cmake-build-release/.cmake/api/v1/reply/target-Step_2-Release-447fa4d814ec7f408004.json @@ -71,7 +71,9 @@ 2, 3, 4, - 5 + 5, + 6, + 7 ] } ], @@ -109,12 +111,20 @@ 2, 3, 4, - 5 + 5, + 6, + 7 ] } ], "sources" : [ + { + "backtrace" : 1, + "compileGroupIndex" : 0, + "path" : "src/globals.cpp", + "sourceGroupIndex" : 0 + }, { "backtrace" : 1, "compileGroupIndex" : 0, @@ -127,6 +137,12 @@ "path" : "src/main.cpp", "sourceGroupIndex" : 0 }, + { + "backtrace" : 1, + "compileGroupIndex" : 0, + "path" : "src/math/colliders.cpp", + "sourceGroupIndex" : 0 + }, { "backtrace" : 1, "compileGroupIndex" : 0, diff --git a/Step 2/cmake-build-release/build.ninja b/Step 2/cmake-build-release/build.ninja index bc66691..2386a3f 100644 --- a/Step 2/cmake-build-release/build.ninja +++ b/Step 2/cmake-build-release/build.ninja @@ -49,6 +49,13 @@ cmake_ninja_workdir = /home/brett/Documents/Brock/CS$ 3P93/Project/Step$ 2/cmake build cmake_object_order_depends_target_Step_2: phony || CMakeFiles/Step_2.dir +build CMakeFiles/Step_2.dir/src/globals.cpp.o: CXX_COMPILER__Step_2_Release /home/brett/Documents/Brock/CS$ 3P93/Project/Step$ 2/src/globals.cpp || cmake_object_order_depends_target_Step_2 + DEP_FILE = CMakeFiles/Step_2.dir/src/globals.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I"/home/brett/Documents/Brock/CS 3P93/Project/Step 2/include" + OBJECT_DIR = CMakeFiles/Step_2.dir + OBJECT_FILE_DIR = CMakeFiles/Step_2.dir/src + build CMakeFiles/Step_2.dir/src/image/image.cpp.o: CXX_COMPILER__Step_2_Release /home/brett/Documents/Brock/CS$ 3P93/Project/Step$ 2/src/image/image.cpp || cmake_object_order_depends_target_Step_2 DEP_FILE = CMakeFiles/Step_2.dir/src/image/image.cpp.o.d FLAGS = -O3 -DNDEBUG -std=gnu++20 @@ -63,6 +70,13 @@ build CMakeFiles/Step_2.dir/src/main.cpp.o: CXX_COMPILER__Step_2_Release /home/b OBJECT_DIR = CMakeFiles/Step_2.dir OBJECT_FILE_DIR = CMakeFiles/Step_2.dir/src +build CMakeFiles/Step_2.dir/src/math/colliders.cpp.o: CXX_COMPILER__Step_2_Release /home/brett/Documents/Brock/CS$ 3P93/Project/Step$ 2/src/math/colliders.cpp || cmake_object_order_depends_target_Step_2 + DEP_FILE = CMakeFiles/Step_2.dir/src/math/colliders.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I"/home/brett/Documents/Brock/CS 3P93/Project/Step 2/include" + OBJECT_DIR = CMakeFiles/Step_2.dir + OBJECT_FILE_DIR = CMakeFiles/Step_2.dir/src/math + build CMakeFiles/Step_2.dir/src/raytracing.cpp.o: CXX_COMPILER__Step_2_Release /home/brett/Documents/Brock/CS$ 3P93/Project/Step$ 2/src/raytracing.cpp || cmake_object_order_depends_target_Step_2 DEP_FILE = CMakeFiles/Step_2.dir/src/raytracing.cpp.o.d FLAGS = -O3 -DNDEBUG -std=gnu++20 @@ -99,7 +113,7 @@ build CMakeFiles/Step_2.dir/src/world.cpp.o: CXX_COMPILER__Step_2_Release /home/ ############################################# # Link the executable Step_2 -build Step_2: CXX_EXECUTABLE_LINKER__Step_2_Release CMakeFiles/Step_2.dir/src/image/image.cpp.o CMakeFiles/Step_2.dir/src/main.cpp.o CMakeFiles/Step_2.dir/src/raytracing.cpp.o CMakeFiles/Step_2.dir/src/util/models.cpp.o CMakeFiles/Step_2.dir/src/util/parser.cpp.o CMakeFiles/Step_2.dir/src/world.cpp.o +build Step_2: CXX_EXECUTABLE_LINKER__Step_2_Release CMakeFiles/Step_2.dir/src/globals.cpp.o CMakeFiles/Step_2.dir/src/image/image.cpp.o CMakeFiles/Step_2.dir/src/main.cpp.o CMakeFiles/Step_2.dir/src/math/colliders.cpp.o CMakeFiles/Step_2.dir/src/raytracing.cpp.o CMakeFiles/Step_2.dir/src/util/models.cpp.o CMakeFiles/Step_2.dir/src/util/parser.cpp.o CMakeFiles/Step_2.dir/src/world.cpp.o FLAGS = -O3 -DNDEBUG OBJECT_DIR = CMakeFiles/Step_2.dir POST_BUILD = : diff --git a/Step 2/include/globals.h b/Step 2/include/globals.h new file mode 100644 index 0000000..e5566b7 --- /dev/null +++ b/Step 2/include/globals.h @@ -0,0 +1,13 @@ +/* + * Created by Brett Terpstra 6920201 on 17/10/22. + * Copyright (c) 2022 Brett Terpstra. All Rights Reserved. + */ + +#ifndef STEP_2_GLOBALS_H +#define STEP_2_GLOBALS_H + +namespace Raytracing { + +} + +#endif //STEP_2_GLOBALS_H diff --git a/Step 2/include/math/bvh.h b/Step 2/include/math/bvh.h new file mode 100644 index 0000000..28b29a8 --- /dev/null +++ b/Step 2/include/math/bvh.h @@ -0,0 +1,52 @@ +/* + * Created by Brett Terpstra 6920201 on 17/10/22. + * Copyright (c) 2022 Brett Terpstra. All Rights Reserved. + */ + +#ifndef STEP_2_BVH_H +#define STEP_2_BVH_H + +#include +#include + +// A currently pure header implementation of a BVH. TODO: make source file. +// this is also for testing and might not make it into the step 2. + +namespace Raytracing { + + class BVHNode { + private: + void* obj; + AABB aabb; + BVHNode* left; + BVHNode* right; + public: + BVHNode(void* obj, AABB aabb, BVHNode* left, BVHNode* right): obj(obj), aabb(std::move(aabb)), left(left), right(right) {} + ~BVHNode() { + delete(left); + delete(right); + } + }; + + class BVHTree { + private: + BVHNode* root = nullptr; + public: + explicit BVHTree(const std::vector& objectsInWorld) { + // create a volume for the entire world. + AABB world; + for (const auto& obj : objectsInWorld) + if (!obj->getAABB().isEmpty()) + world.expand(obj->getAABB()); + // world sized bvh node isn't associated with a specific object + // only leafs should be non-null, and we might need to change it to a vector. + root = new BVHNode(nullptr, world, nullptr, nullptr); + } + ~BVHTree(){ + delete(root); + } + }; + +} + +#endif //STEP_2_BVH_H diff --git a/Step 2/include/math/colliders.h b/Step 2/include/math/colliders.h new file mode 100644 index 0000000..f7cf9b4 --- /dev/null +++ b/Step 2/include/math/colliders.h @@ -0,0 +1,99 @@ +/* + * Created by Brett Terpstra 6920201 on 17/10/22. + * Copyright (c) 2022 Brett Terpstra. All Rights Reserved. + */ + +#ifndef STEP_2_COLLIDERS_H +#define STEP_2_COLLIDERS_H + +#include + +namespace Raytracing { + // 3D Axis Aligned Bounding Box + class AABB { + protected: + vec4 min; + vec4 max; + bool empty = false; + public: + AABB() { + empty = true; + }; + + AABB(PRECISION_TYPE minX, PRECISION_TYPE minY, PRECISION_TYPE minZ, PRECISION_TYPE maxX, PRECISION_TYPE maxY, PRECISION_TYPE maxZ): + min{minX, minY, minZ}, max{maxX, maxY, maxZ} { + } + + AABB(const vec4& min, const vec4& max): min(min), max(max) {} + + // creates an AABB extending of size centered on x, y, z + AABB(PRECISION_TYPE x, PRECISION_TYPE y, PRECISION_TYPE z, PRECISION_TYPE size): + min{x - size, y - size, z - size}, max{x + size, y + size, z + size} { + } + + // translates the AABB to position x,y,z for world collision detection + [[nodiscard]] AABB translate(PRECISION_TYPE x, PRECISION_TYPE y, PRECISION_TYPE z) const { + vec4 pos = {x, y, z}; + return {min + pos, max + pos}; + } + + // returns an expanded version of this AABB is the other AABB is larger then this AABB + [[nodiscard]] AABB expand(const AABB& other) const { + PRECISION_TYPE minX = std::min(min.x(), other.min.x()); + PRECISION_TYPE minY = std::min(min.y(), other.min.y()); + PRECISION_TYPE minZ = std::min(min.z(), other.min.z()); + PRECISION_TYPE maxX = std::max(max.x(), other.max.x()); + PRECISION_TYPE maxY = std::max(max.y(), other.max.y()); + PRECISION_TYPE maxZ = std::max(max.z(), other.max.z()); + return {minX, minY, minZ, maxX, maxY, maxZ}; + } + + [[nodiscard]] inline bool intersects(PRECISION_TYPE minX, PRECISION_TYPE minY, PRECISION_TYPE minZ, PRECISION_TYPE maxX, PRECISION_TYPE maxY, + PRECISION_TYPE maxZ) const { + return min.x() < maxX && max.x() > minX && min.y() < maxY && max.y() > minY && min.z() < maxZ && max.z() > minZ; + } + + [[nodiscard]] inline bool intersects(const vec4& minV, const vec4& maxV) const { + return intersects(minV.x(), minV.y(), minV.z(), maxV.x(), maxV.y(), maxV.z()); + } + + [[nodiscard]] inline bool intersects(const AABB& other) const { + return intersects(other.min, other.max); + } + + [[nodiscard]] inline bool isInside(PRECISION_TYPE x, PRECISION_TYPE y, PRECISION_TYPE z) const { + return x > min.x() && x < max.x() && y > min.y() && y < max.y() && z > min.z() && z < max.z(); + } + + [[nodiscard]] inline bool intersectsWithYZ(PRECISION_TYPE y, PRECISION_TYPE z) const { + return y >= min.y() && y <= max.y() && z >= min.z() && z <= max.z(); + } + + [[nodiscard]] inline bool intersectsWithXZ(PRECISION_TYPE x, PRECISION_TYPE z) const { + return x >= min.x() && x <= max.x() && z >= min.z() && z <= max.z(); + } + + [[nodiscard]] inline bool intersectsWithXY(PRECISION_TYPE x, PRECISION_TYPE y) const { + return x >= min.x() && x <= max.x() && y >= min.y() && y <= max.y(); + } + + [[nodiscard]] inline vec4 getCenter() const { + return {min.x() + (max.x() - min.x()) * 0.5, min.y() + (max.y() - min.y()) * 0.5, min.z() + (max.z() - min.z()) * 0.5}; + } + + [[nodiscard]] PRECISION_TYPE longestDistanceFromCenter() const; + // 0 - x + // 1 - y + // 2 - z + [[nodiscard]] int longestAxis() const; + [[nodiscard]] PRECISION_TYPE longestAxisLength() const; + [[nodiscard]] std::vector splitByLongestAxis() const; + + [[nodiscard]] PRECISION_TYPE avgDistanceFromCenter() const; + + [[nodiscard]] inline bool isEmpty() const {return empty;} + + }; +} + +#endif //STEP_2_COLLIDERS_H diff --git a/Step 2/include/types.h b/Step 2/include/types.h new file mode 100644 index 0000000..873b608 --- /dev/null +++ b/Step 2/include/types.h @@ -0,0 +1,69 @@ +/* + * Created by Brett Terpstra 6920201 on 18/10/22. + * Copyright (c) 2022 Brett Terpstra. All Rights Reserved. + */ + +#ifndef STEP_2_TYPES_H +#define STEP_2_TYPES_H + +#include +#include + +// there were some files which needed access to these types +// but including them from world.h would've resulted in circular includes, +// so I moved them here. + +namespace Raytracing { + struct HitData { + // all the other values only matter if this is true + bool hit{false}; + // the hit point on the object + vec4 hitPoint{}; + // the normal of that hit point + vec4 normal{}; + // the length of the vector from its origin in its direction. + PRECISION_TYPE length{0}; + }; + + struct ScatterResults { + // returns true to recast the ray with the provided ray + bool scattered; + // the new ray to be cast if scattered + Ray newRay; + // the color of the material + vec4 attenuationColor; + }; + + class Material { + private: + // most materials will need an albedo + vec4 baseColor; + public: + explicit Material(const vec4& baseColor): baseColor(baseColor) {} + + // returns true if the ray was scattered along with the scattered ray, otherwise will return false with empty ray. + // the returned vec4 is the attenuation color + [[nodiscard]] virtual ScatterResults scatter(const Ray& ray, const HitData& hitData) const = 0; + + [[nodiscard]] vec4 getBaseColor() const { return baseColor; } + }; + + class Object { + protected: + vec4 position; + Material* material; + AABB aabb; + public: + explicit Object(Material* material, const vec4& position): material(material), position(position) {}; + // return true if the ray intersects with this object, only between min and max + [[nodiscard]] virtual HitData checkIfHit(const Ray& ray, PRECISION_TYPE min, PRECISION_TYPE max) const = 0; + + [[nodiscard]] Material* getMaterial() const { return material; } + [[nodiscard]] vec4 getPosition() const {return position;} + [[nodiscard]] AABB getAABB() const {return aabb;} + + virtual ~Object() = default; + }; +} + +#endif //STEP_2_TYPES_H diff --git a/Step 2/include/util/models.h b/Step 2/include/util/models.h index 308e3cf..25e8742 100644 --- a/Step 2/include/util/models.h +++ b/Step 2/include/util/models.h @@ -8,35 +8,96 @@ #include #include +#include namespace Raytracing { struct Triangle { - vec4 vertex1, vertex2, vertex3; - bool hasNormals = false; - vec4 normal1, normal2, normal3; - vec4 uv1, uv2, uv3; + public: + vec4 vertex1, vertex2, vertex3; + bool hasNormals = false; + vec4 normal1, normal2, normal3; + vec4 uv1, uv2, uv3; + AABB aabb; - Triangle(const vec4& v1, const vec4& v2, const vec4& v3): vertex1(v1), vertex2(v2), vertex3(v3) {} + Triangle(const vec4& v1, const vec4& v2, const vec4& v3): vertex1(v1), vertex2(v2), vertex3(v3) {} - Triangle(const vec4& v1, const vec4& v2, const vec4& v3, - const vec4& n1, const vec4& n2, const vec4& n3): vertex1(v1), vertex2(v2), vertex3(v3), - hasNormals(true), normal1(n1), normal2(n2), normal3(n3) {} + Triangle(const vec4& v1, const vec4& v2, const vec4& v3, + const vec4& n1, const vec4& n2, const vec4& n3): vertex1(v1), vertex2(v2), vertex3(v3), + hasNormals(true), normal1(n1), normal2(n2), normal3(n3) {} + + Triangle(const vec4& v1, const vec4& v2, const vec4& v3, + const vec4& uv1, const vec4& uv2, const vec4& uv3, + const vec4& n1, const vec4& n2, const vec4& n3): vertex1(v1), vertex2(v2), vertex3(v3), + uv1(uv1), uv2(uv2), uv3(uv3), + hasNormals(true), normal1(n1), normal2(n2), normal3(n3) {} + + [[nodiscard]] vec4 findClosestNormal(const vec4& point) const { + // no need to sqrt as exact distance doesn't matter + auto n1Dist = (point - normal1).lengthSquared(); + auto n2Dist = (point - normal2).lengthSquared(); + auto n3Dist = (point - normal3).lengthSquared(); + return (n1Dist < n2Dist && n1Dist < n3Dist) ? normal1 : (n2Dist < n3Dist ? normal2 : normal3); + } + }; + + struct face { + int v1, v2, v3; + int uv1, uv2, uv3; + int n1, n2, n3; }; struct ModelData { - // storing all this data is memory inefficient - // since normals and vertices are only vec3s - // and uvs are vec2s - // TODO: create lower order vector classes - std::vector vertices; - std::vector uvs; - std::vector normals; - std::vector indices; + public: + // storing all this data is memory inefficient + // since normals and vertices are only vec3s + // and uvs are vec2s + // TODO: create lower order vector classes + std::vector vertices; + std::vector uvs; + std::vector normals; + std::vector faces; + AABB aabb; - std::vector toTriangles() { + std::vector toTriangles() { + std::vector triangles; - } + PRECISION_TYPE minX = INFINITY, minY = INFINITY, minZ = INFINITY, maxX = -INFINITY, maxY = -INFINITY, maxZ = -INFINITY; + + for (face f: faces) { + Triangle t {vertices[f.v1], vertices[f.v2], vertices[f.v3], + uvs[f.uv1], uvs[f.uv2], uvs[f.uv3], + normals[f.n1], normals[f.n2], normals[f.n3]}; + + PRECISION_TYPE tMinX = INFINITY, tMinY = INFINITY, tMinZ = INFINITY, tMaxX = -INFINITY, tMaxY = -INFINITY, tMaxZ = -INFINITY; + // find the min and max of all the triangles + tMinX = std::min(t.vertex1.x(), std::min(t.vertex2.x(), std::min(t.vertex3.x(), tMinX))); + tMinY = std::min(t.vertex1.y(), std::min(t.vertex2.y(), std::min(t.vertex3.y(), tMinY))); + tMinZ = std::min(t.vertex1.z(), std::min(t.vertex2.z(), std::min(t.vertex3.z(), tMinZ))); + + tMaxX = std::max(t.vertex1.x(), std::max(t.vertex2.x(), std::max(t.vertex3.x(), tMaxX))); + tMaxY = std::max(t.vertex1.y(), std::max(t.vertex2.y(), std::max(t.vertex3.y(), tMaxY))); + tMaxZ = std::max(t.vertex1.z(), std::max(t.vertex2.z(), std::max(t.vertex3.z(), tMaxZ))); + + // create a AABB for model local BVH + t.aabb = {tMinX, tMinY, tMinZ, tMaxX, tMaxY, tMaxZ}; + + // and of course for a model AABB, + minX = std::min(tMinX, minX); + minY = std::min(tMinY, minY); + minZ = std::min(tMinZ, minZ); + + maxX = std::max(tMaxX, maxX); + maxY = std::max(tMaxY, maxY); + maxZ = std::max(tMaxZ, maxZ); + + triangles.push_back(t); + } + // to generate a AABB + aabb = {minX, minY, minZ, maxX, maxY, maxZ}; + + return triangles; + } }; class ModelLoader { diff --git a/Step 2/include/util/std.h b/Step 2/include/util/std.h index 4836af7..6f1772e 100644 --- a/Step 2/include/util/std.h +++ b/Step 2/include/util/std.h @@ -79,6 +79,19 @@ namespace Raytracing { }); return str.str(); } + // taken from https://stackoverflow.com/questions/14265581/parse-split-a-string-in-c-using-string-delimiter-standard-c + // extended to return a vector + static inline std::vector split(std::string s, const std::string& delim){ + size_t pos = 0; + std::vector tokens; + while ((pos = s.find(delim)) != std::string::npos) { + auto token = s.substr(0, pos); + tokens.push_back(token); + s.erase(0, pos + delim.length()); + } + tokens.push_back(s); + return tokens; + } // taken from https://stackoverflow.com/questions/216823/how-to-trim-an-stdstring // would've preferred to use boost lib but instructions said to avoid external libs // trim from start (in place) diff --git a/Step 2/include/world.h b/Step 2/include/world.h index 825e51c..f584e8c 100644 --- a/Step 2/include/world.h +++ b/Step 2/include/world.h @@ -9,78 +9,42 @@ #include #include #include +#include +#include #include namespace Raytracing { - struct HitData { - // all the other values only matter if this is true - bool hit{false}; - // the hit point on the object - vec4 hitPoint{}; - // the normal of that hit point - vec4 normal{}; - // the length of the vector from its origin in its direction. - PRECISION_TYPE length{0}; - }; - - struct ScatterResults { - // returns true to recast the ray with the provided ray - bool scattered; - // the new ray to be cast if scattered - Ray newRay; - // the color of the material - vec4 attenuationColor; - }; - - class Material { - private: - // most materials will need an albedo - vec4 baseColor; - public: - explicit Material(const vec4& baseColor): baseColor(baseColor) {} - - // returns true if the ray was scattered along with the scattered ray, otherwise will return false with empty ray. - // the returned vec4 is the attenuation color - [[nodiscard]] virtual ScatterResults scatter(const Ray& ray, const HitData& hitData) const = 0; - - [[nodiscard]] vec4 getBaseColor() const { return baseColor; } - }; - - class Object { - private: - Material* material; - public: - explicit Object(Material* material): material(material) {}; - // return true if the ray intersects with this object, only between min and max - [[nodiscard]] virtual HitData checkIfHit(const Ray& ray, PRECISION_TYPE min, PRECISION_TYPE max) const = 0; - - Material* getMaterial() { return material; } - - virtual ~Object() = default; - }; - class SphereObject : public Object { private: - vec4 position; PRECISION_TYPE radius; public: - SphereObject(const vec4& position, PRECISION_TYPE radius, Material* material): position(position), radius(radius), Object(material) {} + SphereObject(const vec4& position, PRECISION_TYPE radius, Material* material): radius(radius), Object(material, position) {} [[nodiscard]] virtual HitData checkIfHit(const Ray& ray, PRECISION_TYPE min, PRECISION_TYPE max) const; }; class TriangleObject : public Object { private: - vec4 position; Triangle theTriangle; public: - TriangleObject(const vec4& position, Triangle theTriangle, Material* material): Object(material), position(position), + TriangleObject(const vec4& position, Triangle theTriangle, Material* material): Object(material, position), theTriangle(std::move(theTriangle)) {} [[nodiscard]] virtual HitData checkIfHit(const Ray& ray, PRECISION_TYPE min, PRECISION_TYPE max) const; }; + class ModelObject : public Object { + private: + std::vector triangles; + public: + ModelObject(const vec4& position, ModelData data, Material* material): Object(material, position) { + triangles = data.toTriangles(); + this->aabb = data.aabb; + } + [[nodiscard]] virtual HitData checkIfHit(const Ray& ray, PRECISION_TYPE min, PRECISION_TYPE max) const; + }; + class DiffuseMaterial : public Material { private: public: diff --git a/Step 2/src/globals.cpp b/Step 2/src/globals.cpp new file mode 100644 index 0000000..51e4bf0 --- /dev/null +++ b/Step 2/src/globals.cpp @@ -0,0 +1,8 @@ +/* + * Created by Brett Terpstra 6920201 on 17/10/22. + * Copyright (c) 2022 Brett Terpstra. All Rights Reserved. + */ +// Yes, globals are bad. +namespace Raytracing { + +} \ No newline at end of file diff --git a/Step 2/src/main.cpp b/Step 2/src/main.cpp index 6f88dee..68f3258 100644 --- a/Step 2/src/main.cpp +++ b/Step 2/src/main.cpp @@ -46,11 +46,14 @@ int main(int argc, char** args) { Raytracing::Image image(445, 256); Raytracing::Camera camera(140, image); - camera.setPosition({0, 0, 0}); + camera.setPosition({0, 0, 1}); //camera.lookAt(Raytracing::vec4(0,1,0), Raytracing::vec4(0, 0, -1), Raytracing::vec4(0, 1, 0)); Raytracing::World world; + Raytracing::OBJLoader loader; + Raytracing::ModelData testData = loader.loadModel("spider.obj"); + world.addMaterial("greenDiffuse", new Raytracing::DiffuseMaterial{Raytracing::vec4{0, 1.0, 0, 1}}); world.addMaterial("redDiffuse", new Raytracing::DiffuseMaterial{Raytracing::vec4{1.0, 0, 0, 1}}); world.addMaterial("blueDiffuse", new Raytracing::DiffuseMaterial{Raytracing::vec4{0, 0, 1.0, 1}}); @@ -59,11 +62,12 @@ int main(int argc, char** args) { world.addMaterial("redMetal", new Raytracing::BrushedMetalMaterial{Raytracing::vec4{1.0, 0.4, 0.4, 1}, 0.6f}); world.addMaterial("blueMetal", new Raytracing::MetalMaterial{Raytracing::vec4{0.4, 0.4, 1.0, 1}}); - world.add(new Raytracing::SphereObject(Raytracing::vec4(0,0,-1,0), 0.5, world.getMaterial("redDiffuse"))); - world.add(new Raytracing::SphereObject(Raytracing::vec4(-1,0,-1,0), 0.5, world.getMaterial("blueMetal"))); - world.add(new Raytracing::SphereObject(Raytracing::vec4(1,0,-1,0), 0.5, world.getMaterial("redMetal"))); - world.add(new Raytracing::SphereObject(Raytracing::vec4(0,-100.5,-1,0), 100, world.getMaterial("greenDiffuse"))); - world.add(new Raytracing::TriangleObject(Raytracing::vec4(0,0.1,-0.5f,0), {{-0.5, -0.5, 0.0}, {0.5, -0.5, 0.0}, {0.0, 0.5, 0.0}}, world.getMaterial("greenDiffuse"))); + //world.add(new Raytracing::SphereObject(Raytracing::vec4(0,0,-1,0), 0.5, world.getMaterial("redDiffuse"))); + //world.add(new Raytracing::SphereObject(Raytracing::vec4(-1,0,-1,0), 0.5, world.getMaterial("blueMetal"))); + //world.add(new Raytracing::SphereObject(Raytracing::vec4(1,0,-1,0), 0.5, world.getMaterial("redMetal"))); + //world.add(new Raytracing::SphereObject(Raytracing::vec4(0,-100.5,-1,0), 100, world.getMaterial("greenDiffuse"))); + //world.add(new Raytracing::TriangleObject(Raytracing::vec4(0,0.1,-0.5f,0), {{-0.5, -0.5, 0.0}, {0.5, -0.5, 0.0}, {0.0, 0.5, 0}}, world.getMaterial("greenDiffuse"))); + world.add(new Raytracing::ModelObject({0, 0, -1}, testData, world.getMaterial("redDiffuse"))); Raytracing::Raycaster raycaster {camera, image, world, parser}; diff --git a/Step 2/src/math/colliders.cpp b/Step 2/src/math/colliders.cpp new file mode 100644 index 0000000..fda5f40 --- /dev/null +++ b/Step 2/src/math/colliders.cpp @@ -0,0 +1,64 @@ +/* + * Created by Brett Terpstra 6920201 on 17/10/22. + * Copyright (c) 2022 Brett Terpstra. All Rights Reserved. + */ +#include + +namespace Raytracing { + + PRECISION_TYPE AABB::longestDistanceFromCenter() const { + vec4 center = getCenter(); + PRECISION_TYPE maxX = std::abs(max.x() - center.x()); + PRECISION_TYPE minX = std::abs(min.x() - center.x()); + PRECISION_TYPE maxY = std::abs(max.y() - center.y()); + PRECISION_TYPE minY = std::abs(min.y() - center.y()); + PRECISION_TYPE maxZ = std::abs(max.z() - center.z()); + PRECISION_TYPE minZ = std::abs(min.z() - center.z()); + return std::max(maxX, std::max(minX, std::max(maxY, std::max(minY, std::max(maxZ, minZ))))); + } + + PRECISION_TYPE AABB::avgDistanceFromCenter() const { + vec4 center = getCenter(); + PRECISION_TYPE maxX = std::abs(max.x() - center.x()); + PRECISION_TYPE minX = std::abs(min.x() - center.x()); + PRECISION_TYPE maxY = std::abs(max.y() - center.y()); + PRECISION_TYPE minY = std::abs(min.y() - center.y()); + PRECISION_TYPE maxZ = std::abs(max.z() - center.z()); + PRECISION_TYPE minZ = std::abs(min.z() - center.z()); + maxX *= maxX; + minX *= minX; + maxY *= maxY; + minY *= minY; + maxZ *= maxZ; + minZ *= minZ; + return std::sqrt(maxX + minX + maxY + minY + maxZ + minZ); + } + + int AABB::longestAxis() const { + PRECISION_TYPE X = std::abs(max.x() - min.x()); + PRECISION_TYPE Y = std::abs(max.y() - min.y()); + PRECISION_TYPE Z = std::abs(max.z() - min.z()); + return X > Y && X > Z ? 0 : Y > Z ? 1 : 2; + } + + PRECISION_TYPE AABB::longestAxisLength() const { + PRECISION_TYPE X = std::abs(max.x() - min.x()); + PRECISION_TYPE Y = std::abs(max.y() - min.y()); + PRECISION_TYPE Z = std::abs(max.z() - min.z()); + return X > Y && X > Z ? X : Y > Z ? Y : Z; + } + + std::vector AABB::splitByLongestAxis() const { + PRECISION_TYPE X = std::abs(max.x() - min.x()); + PRECISION_TYPE Y = std::abs(max.y() - min.y()); + PRECISION_TYPE Z = std::abs(max.z() - min.z()); + if (X > Y && X > Z) { + PRECISION_TYPE x2 = X/2.0; + + } else if (Y > Z) { + + } else { + + } + } +} \ No newline at end of file diff --git a/Step 2/src/raytracing.cpp b/Step 2/src/raytracing.cpp index 72702d9..445c009 100644 --- a/Step 2/src/raytracing.cpp +++ b/Step 2/src/raytracing.cpp @@ -59,6 +59,7 @@ namespace Raytracing { // if the material scatters the ray, ie casts a new one, if (scatterResults.scattered) // attenuate the recursive raycast by the material's color return scatterResults.attenuationColor * raycast(scatterResults.newRay, depth + 1); + tlog << "Not scattered? " << object->getMaterial(); return {0,0,0}; } diff --git a/Step 2/src/util/models.cpp b/Step 2/src/util/models.cpp index 480818f..f8ef7cd 100644 --- a/Step 2/src/util/models.cpp +++ b/Step 2/src/util/models.cpp @@ -3,8 +3,62 @@ * Copyright (c) 2022 Brett Terpstra. All Rights Reserved. */ #include +#include +#include Raytracing::ModelData Raytracing::OBJLoader::loadModel(std::string file) { + std::ifstream modelFile; - return Raytracing::ModelData(); + modelFile.exceptions(std::ifstream::failbit | std::ifstream::badbit); + modelFile.open(file); + std::stringstream modelSource; + + // read the entire file into a string + modelSource << modelFile.rdbuf(); + + modelFile.close(); + std::string modelUnprocessedSource = modelSource.str(); + + auto lines = String::split(modelUnprocessedSource, "\n"); + ilog << "Loading of model file " << file << " complete! Now processing " << lines.size() << " lines.\n"; + + ModelData data; + + for (const auto& line : lines){ + auto spaces = String::split(line, " "); + if (line.starts_with("v ")) { // vertex + data.vertices.emplace_back(std::stof(spaces[1]), std::stof(spaces[2]), std::stof(spaces[3])); + } else if (line.starts_with("vt ")){ // uv + data.uvs.emplace_back(std::stof(spaces[1]), std::stof(spaces[2]), 0); + } else if (line.starts_with("vn ")){ // normal + data.normals.emplace_back(std::stof(spaces[1]), std::stof(spaces[2]), std::stof(spaces[3])); + } else if (line.starts_with("f ")){ // face + // we've reached the faces, we'll need to process them later. + auto t1 = String::split(spaces[1], "/"); + auto t2 = String::split(spaces[2], "/"); + auto t3 = String::split(spaces[3], "/"); + face f {}; + + // obj files are 1 indexed, + // but arrays are 0 indexed, + // must be transformed. + f.v1 = std::stoi(t1[0])-1; + f.v2 = std::stoi(t2[0])-1; + f.v3 = std::stoi(t3[0])-1; + + f.uv1 = std::stoi(t1[1])-1; + f.uv2 = std::stoi(t2[1])-1; + f.uv3 = std::stoi(t3[1])-1; + + f.n1 = std::stoi(t1[2])-1; + f.n2 = std::stoi(t2[2])-1; + f.n3 = std::stoi(t3[2])-1; + + data.faces.push_back(f); + } + } + + + ilog << "Completed extracting vertex data from model file " << file << "!\n"; + return data; } diff --git a/Step 2/src/world.cpp b/Step 2/src/world.cpp index 26999b8..7bdfa22 100644 --- a/Step 2/src/world.cpp +++ b/Step 2/src/world.cpp @@ -96,8 +96,9 @@ namespace Raytracing { return {shouldReflect, Ray{hitData.hitPoint, newRay + Raycaster::randomUnitVector() * fuzzyness}, getBaseColor()}; } - HitData TriangleObject::checkIfHit(const Ray& ray, PRECISION_TYPE min, PRECISION_TYPE max) const { + static HitData checkIfTriangleGotHit(Triangle theTriangle, vec4 position, const Ray& ray, PRECISION_TYPE min, PRECISION_TYPE max) { // Möller–Trumbore intersection algorithm + // https://en.wikipedia.org/wiki/M%C3%B6ller%E2%80%93Trumbore_intersection_algorithm vec4 edge1, edge2, h, s, q; PRECISION_TYPE a, f, u, v; edge1 = (theTriangle.vertex2 + position) - (theTriangle.vertex1 + position); @@ -127,7 +128,8 @@ namespace Raytracing { // ray intersects vec4 rayIntersectionPoint = ray.along(t); vec4 normal; - if (theTriangle.hasNormals) // TODO: deal with n2 and n3 + // normal = theTriangle.findClosestNormal(rayIntersectionPoint - position); + if (theTriangle.hasNormals) // returning the closest normal is extra computation when n1 would likely be fine. normal = theTriangle.normal1; else { // standard points to normal algorithm but using already computed edges @@ -138,4 +140,18 @@ namespace Raytracing { } return {false, vec4(), vec4(), 0}; } + + HitData TriangleObject::checkIfHit(const Ray& ray, PRECISION_TYPE min, PRECISION_TYPE max) const { + return checkIfTriangleGotHit(theTriangle, position, ray, min, max); + } + + HitData ModelObject::checkIfHit(const Ray& ray, PRECISION_TYPE min, PRECISION_TYPE max) const { + auto hResult = HitData{false, vec4(), vec4(), max}; + for (const Triangle& t : triangles) { + auto cResult = checkIfTriangleGotHit(t, position, ray, min, hResult.length); + if (cResult.hit) + hResult = cResult; + } + return hResult; + } } \ No newline at end of file