From 4378a90f74d6cebb514eea4c4bc01c85bb623433 Mon Sep 17 00:00:00 2001 From: Joshua Goins Date: Tue, 16 Oct 2018 08:49:25 -0400 Subject: [PATCH] Add model loading --- CMakeLists.txt | 6 +- data/suzanne.obj | 1512 +++++++++++++++++++++++++++++++++++++++++ include/mesh.h | 22 + include/renderer.h | 47 +- include/world.h | 10 + include/worldpass.h | 11 +- shaders/triangle.vert | 8 +- src/main.cpp | 58 +- src/renderer.cpp | 74 +- src/worldpass.cpp | 59 +- 10 files changed, 1737 insertions(+), 70 deletions(-) create mode 100644 data/suzanne.obj create mode 100644 include/mesh.h create mode 100644 include/world.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 0da6831..38f330c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,11 +12,11 @@ if(CMAKE_BUILD_TYPE STREQUAL "Debug") add_definitions(-DDEBUG) endif() -add_executable(Graph +add_executable(Graph src/main.cpp src/renderer.cpp src/worldpass.cpp) -target_link_libraries(Graph PUBLIC SDL2::SDL2 SDL2::SDL2main ${Vulkan_LIBRARY}) +target_link_libraries(Graph PUBLIC SDL2::SDL2 SDL2::SDL2main ${Vulkan_LIBRARY} assimp) target_include_directories(Graph PUBLIC include ${Vulkan_INCLUDE_DIRS}) macro(compile_shader src) @@ -34,3 +34,5 @@ compile_shader(triangle.frag) add_custom_target(BuildShaders DEPENDS ${SPV_FILES}) add_dependencies(Graph BuildShaders) + +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/data/suzanne.obj ${CMAKE_CURRENT_SOURCE_DIR}/build/suzanne.obj COPYONLY) diff --git a/data/suzanne.obj b/data/suzanne.obj new file mode 100644 index 0000000..0ff22c9 --- /dev/null +++ b/data/suzanne.obj @@ -0,0 +1,1512 @@ +# Blender v2.79 (sub 0) OBJ File: '' +# www.blender.org +mtllib suzanne.mtl +o Suzanne +v 0.437500 0.164062 0.765625 +v -0.437500 0.164062 0.765625 +v 0.500000 0.093750 0.687500 +v -0.500000 0.093750 0.687500 +v 0.546875 0.054688 0.578125 +v -0.546875 0.054688 0.578125 +v 0.351562 -0.023438 0.617188 +v -0.351562 -0.023438 0.617188 +v 0.351562 0.031250 0.718750 +v -0.351562 0.031250 0.718750 +v 0.351562 0.132812 0.781250 +v -0.351562 0.132812 0.781250 +v 0.273438 0.164062 0.796875 +v -0.273438 0.164062 0.796875 +v 0.203125 0.093750 0.742188 +v -0.203125 0.093750 0.742188 +v 0.156250 0.054688 0.648438 +v -0.156250 0.054688 0.648438 +v 0.078125 0.242188 0.656250 +v -0.078125 0.242188 0.656250 +v 0.140625 0.242188 0.742188 +v -0.140625 0.242188 0.742188 +v 0.242188 0.242188 0.796875 +v -0.242188 0.242188 0.796875 +v 0.273438 0.328125 0.796875 +v -0.273438 0.328125 0.796875 +v 0.203125 0.390625 0.742188 +v -0.203125 0.390625 0.742188 +v 0.156250 0.437500 0.648438 +v -0.156250 0.437500 0.648438 +v 0.351562 0.515625 0.617188 +v -0.351562 0.515625 0.617188 +v 0.351562 0.453125 0.718750 +v -0.351562 0.453125 0.718750 +v 0.351562 0.359375 0.781250 +v -0.351562 0.359375 0.781250 +v 0.437500 0.328125 0.765625 +v -0.437500 0.328125 0.765625 +v 0.500000 0.390625 0.687500 +v -0.500000 0.390625 0.687500 +v 0.546875 0.437500 0.578125 +v -0.546875 0.437500 0.578125 +v 0.625000 0.242188 0.562500 +v -0.625000 0.242188 0.562500 +v 0.562500 0.242188 0.671875 +v -0.562500 0.242188 0.671875 +v 0.468750 0.242188 0.757812 +v -0.468750 0.242188 0.757812 +v 0.476562 0.242188 0.773438 +v -0.476562 0.242188 0.773438 +v 0.445312 0.335938 0.781250 +v -0.445312 0.335938 0.781250 +v 0.351562 0.375000 0.804688 +v -0.351562 0.375000 0.804688 +v 0.265625 0.335938 0.820312 +v -0.265625 0.335938 0.820312 +v 0.226562 0.242188 0.820312 +v -0.226562 0.242188 0.820312 +v 0.265625 0.156250 0.820312 +v -0.265625 0.156250 0.820312 +v 0.351562 0.242188 0.828125 +v -0.351562 0.242188 0.828125 +v 0.351562 0.117188 0.804688 +v -0.351562 0.117188 0.804688 +v 0.445312 0.156250 0.781250 +v -0.445312 0.156250 0.781250 +v 0.000000 0.429688 0.742188 +v 0.000000 0.351562 0.820312 +v 0.000000 -0.679688 0.734375 +v 0.000000 -0.320312 0.781250 +v 0.000000 -0.187500 0.796875 +v 0.000000 -0.773438 0.718750 +v 0.000000 0.406250 0.601562 +v 0.000000 0.570312 0.570312 +v 0.000000 0.898438 -0.546875 +v 0.000000 0.562500 -0.851562 +v 0.000000 0.070312 -0.828125 +v 0.000000 -0.382812 -0.351562 +v 0.203125 -0.187500 0.562500 +v -0.203125 -0.187500 0.562500 +v 0.312500 -0.437500 0.570312 +v -0.312500 -0.437500 0.570312 +v 0.351562 -0.695312 0.570312 +v -0.351562 -0.695312 0.570312 +v 0.367188 -0.890625 0.531250 +v -0.367188 -0.890625 0.531250 +v 0.328125 -0.945312 0.523438 +v -0.328125 -0.945312 0.523438 +v 0.179688 -0.968750 0.554688 +v -0.179688 -0.968750 0.554688 +v 0.000000 -0.984375 0.578125 +v 0.437500 -0.140625 0.531250 +v -0.437500 -0.140625 0.531250 +v 0.632812 -0.039062 0.539062 +v -0.632812 -0.039062 0.539062 +v 0.828125 0.148438 0.445312 +v -0.828125 0.148438 0.445312 +v 0.859375 0.429688 0.593750 +v -0.859375 0.429688 0.593750 +v 0.710938 0.484375 0.625000 +v -0.710938 0.484375 0.625000 +v 0.492188 0.601562 0.687500 +v -0.492188 0.601562 0.687500 +v 0.320312 0.757812 0.734375 +v -0.320312 0.757812 0.734375 +v 0.156250 0.718750 0.757812 +v -0.156250 0.718750 0.757812 +v 0.062500 0.492188 0.750000 +v -0.062500 0.492188 0.750000 +v 0.164062 0.414062 0.773438 +v -0.164062 0.414062 0.773438 +v 0.125000 0.304688 0.765625 +v -0.125000 0.304688 0.765625 +v 0.203125 0.093750 0.742188 +v -0.203125 0.093750 0.742188 +v 0.375000 0.015625 0.703125 +v -0.375000 0.015625 0.703125 +v 0.492188 0.062500 0.671875 +v -0.492188 0.062500 0.671875 +v 0.625000 0.187500 0.648438 +v -0.625000 0.187500 0.648438 +v 0.640625 0.296875 0.648438 +v -0.640625 0.296875 0.648438 +v 0.601562 0.375000 0.664062 +v -0.601562 0.375000 0.664062 +v 0.429688 0.437500 0.718750 +v -0.429688 0.437500 0.718750 +v 0.250000 0.468750 0.757812 +v -0.250000 0.468750 0.757812 +v 0.000000 -0.765625 0.734375 +v 0.109375 -0.718750 0.734375 +v -0.109375 -0.718750 0.734375 +v 0.117188 -0.835938 0.710938 +v -0.117188 -0.835938 0.710938 +v 0.062500 -0.882812 0.695312 +v -0.062500 -0.882812 0.695312 +v 0.000000 -0.890625 0.687500 +v 0.000000 -0.195312 0.750000 +v 0.000000 -0.140625 0.742188 +v 0.101562 -0.148438 0.742188 +v -0.101562 -0.148438 0.742188 +v 0.125000 -0.226562 0.750000 +v -0.125000 -0.226562 0.750000 +v 0.085938 -0.289062 0.742188 +v -0.085938 -0.289062 0.742188 +v 0.398438 -0.046875 0.671875 +v -0.398438 -0.046875 0.671875 +v 0.617188 0.054688 0.625000 +v -0.617188 0.054688 0.625000 +v 0.726562 0.203125 0.601562 +v -0.726562 0.203125 0.601562 +v 0.742188 0.375000 0.656250 +v -0.742188 0.375000 0.656250 +v 0.687500 0.414062 0.726562 +v -0.687500 0.414062 0.726562 +v 0.437500 0.546875 0.796875 +v -0.437500 0.546875 0.796875 +v 0.312500 0.640625 0.835938 +v -0.312500 0.640625 0.835938 +v 0.203125 0.617188 0.851562 +v -0.203125 0.617188 0.851562 +v 0.101562 0.429688 0.843750 +v -0.101562 0.429688 0.843750 +v 0.125000 -0.101562 0.812500 +v -0.125000 -0.101562 0.812500 +v 0.210938 -0.445312 0.710938 +v -0.210938 -0.445312 0.710938 +v 0.250000 -0.703125 0.687500 +v -0.250000 -0.703125 0.687500 +v 0.265625 -0.820312 0.664062 +v -0.265625 -0.820312 0.664062 +v 0.234375 -0.914062 0.632812 +v -0.234375 -0.914062 0.632812 +v 0.164062 -0.929688 0.632812 +v -0.164062 -0.929688 0.632812 +v 0.000000 -0.945312 0.640625 +v 0.000000 0.046875 0.726562 +v 0.000000 0.210938 0.765625 +v 0.328125 0.476562 0.742188 +v -0.328125 0.476562 0.742188 +v 0.164062 0.140625 0.750000 +v -0.164062 0.140625 0.750000 +v 0.132812 0.210938 0.757812 +v -0.132812 0.210938 0.757812 +v 0.117188 -0.687500 0.734375 +v -0.117188 -0.687500 0.734375 +v 0.078125 -0.445312 0.750000 +v -0.078125 -0.445312 0.750000 +v 0.000000 -0.445312 0.750000 +v 0.000000 -0.328125 0.742188 +v 0.093750 -0.273438 0.781250 +v -0.093750 -0.273438 0.781250 +v 0.132812 -0.226562 0.796875 +v -0.132812 -0.226562 0.796875 +v 0.109375 -0.132812 0.781250 +v -0.109375 -0.132812 0.781250 +v 0.039062 -0.125000 0.781250 +v -0.039062 -0.125000 0.781250 +v 0.000000 -0.203125 0.828125 +v 0.046875 -0.148438 0.812500 +v -0.046875 -0.148438 0.812500 +v 0.093750 -0.156250 0.812500 +v -0.093750 -0.156250 0.812500 +v 0.109375 -0.226562 0.828125 +v -0.109375 -0.226562 0.828125 +v 0.078125 -0.250000 0.804688 +v -0.078125 -0.250000 0.804688 +v 0.000000 -0.289062 0.804688 +v 0.257812 -0.312500 0.554688 +v -0.257812 -0.312500 0.554688 +v 0.164062 -0.242188 0.710938 +v -0.164062 -0.242188 0.710938 +v 0.179688 -0.312500 0.710938 +v -0.179688 -0.312500 0.710938 +v 0.234375 -0.250000 0.554688 +v -0.234375 -0.250000 0.554688 +v 0.000000 -0.875000 0.687500 +v 0.046875 -0.867188 0.687500 +v -0.046875 -0.867188 0.687500 +v 0.093750 -0.820312 0.710938 +v -0.093750 -0.820312 0.710938 +v 0.093750 -0.742188 0.726562 +v -0.093750 -0.742188 0.726562 +v 0.000000 -0.781250 0.656250 +v 0.093750 -0.750000 0.664062 +v -0.093750 -0.750000 0.664062 +v 0.093750 -0.812500 0.640625 +v -0.093750 -0.812500 0.640625 +v 0.046875 -0.851562 0.632812 +v -0.046875 -0.851562 0.632812 +v 0.000000 -0.859375 0.632812 +v 0.171875 0.218750 0.781250 +v -0.171875 0.218750 0.781250 +v 0.187500 0.156250 0.773438 +v -0.187500 0.156250 0.773438 +v 0.335938 0.429688 0.757812 +v -0.335938 0.429688 0.757812 +v 0.273438 0.421875 0.773438 +v -0.273438 0.421875 0.773438 +v 0.421875 0.398438 0.773438 +v -0.421875 0.398438 0.773438 +v 0.562500 0.351562 0.695312 +v -0.562500 0.351562 0.695312 +v 0.585938 0.289062 0.687500 +v -0.585938 0.289062 0.687500 +v 0.578125 0.195312 0.679688 +v -0.578125 0.195312 0.679688 +v 0.476562 0.101562 0.718750 +v -0.476562 0.101562 0.718750 +v 0.375000 0.062500 0.742188 +v -0.375000 0.062500 0.742188 +v 0.226562 0.109375 0.781250 +v -0.226562 0.109375 0.781250 +v 0.179688 0.296875 0.781250 +v -0.179688 0.296875 0.781250 +v 0.210938 0.375000 0.781250 +v -0.210938 0.375000 0.781250 +v 0.234375 0.359375 0.757812 +v -0.234375 0.359375 0.757812 +v 0.195312 0.296875 0.757812 +v -0.195312 0.296875 0.757812 +v 0.242188 0.125000 0.757812 +v -0.242188 0.125000 0.757812 +v 0.375000 0.085938 0.726562 +v -0.375000 0.085938 0.726562 +v 0.460938 0.117188 0.703125 +v -0.460938 0.117188 0.703125 +v 0.546875 0.210938 0.671875 +v -0.546875 0.210938 0.671875 +v 0.554688 0.281250 0.671875 +v -0.554688 0.281250 0.671875 +v 0.531250 0.335938 0.679688 +v -0.531250 0.335938 0.679688 +v 0.414062 0.390625 0.750000 +v -0.414062 0.390625 0.750000 +v 0.281250 0.398438 0.765625 +v -0.281250 0.398438 0.765625 +v 0.335938 0.406250 0.750000 +v -0.335938 0.406250 0.750000 +v 0.203125 0.171875 0.750000 +v -0.203125 0.171875 0.750000 +v 0.195312 0.226562 0.750000 +v -0.195312 0.226562 0.750000 +v 0.109375 0.460938 0.609375 +v -0.109375 0.460938 0.609375 +v 0.195312 0.664062 0.617188 +v -0.195312 0.664062 0.617188 +v 0.335938 0.687500 0.593750 +v -0.335938 0.687500 0.593750 +v 0.484375 0.554688 0.554688 +v -0.484375 0.554688 0.554688 +v 0.679688 0.453125 0.492188 +v -0.679688 0.453125 0.492188 +v 0.796875 0.406250 0.460938 +v -0.796875 0.406250 0.460938 +v 0.773438 0.164062 0.375000 +v -0.773438 0.164062 0.375000 +v 0.601562 0.000000 0.414062 +v -0.601562 0.000000 0.414062 +v 0.437500 -0.093750 0.468750 +v -0.437500 -0.093750 0.468750 +v 0.000000 0.898438 0.289062 +v 0.000000 0.984375 -0.078125 +v 0.000000 -0.195312 -0.671875 +v 0.000000 -0.460938 0.187500 +v 0.000000 -0.976562 0.460938 +v 0.000000 -0.804688 0.343750 +v 0.000000 -0.570312 0.320312 +v 0.000000 -0.484375 0.281250 +v 0.851562 0.234375 0.054688 +v -0.851562 0.234375 0.054688 +v 0.859375 0.320312 -0.046875 +v -0.859375 0.320312 -0.046875 +v 0.773438 0.265625 -0.437500 +v -0.773438 0.265625 -0.437500 +v 0.460938 0.437500 -0.703125 +v -0.460938 0.437500 -0.703125 +v 0.734375 -0.046875 0.070312 +v -0.734375 -0.046875 0.070312 +v 0.593750 -0.125000 -0.164062 +v -0.593750 -0.125000 -0.164062 +v 0.640625 -0.007812 -0.429688 +v -0.640625 -0.007812 -0.429688 +v 0.335938 0.054688 -0.664062 +v -0.335938 0.054688 -0.664062 +v 0.234375 -0.351562 0.406250 +v -0.234375 -0.351562 0.406250 +v 0.179688 -0.414062 0.257812 +v -0.179688 -0.414062 0.257812 +v 0.289062 -0.710938 0.382812 +v -0.289062 -0.710938 0.382812 +v 0.250000 -0.500000 0.390625 +v -0.250000 -0.500000 0.390625 +v 0.328125 -0.914062 0.398438 +v -0.328125 -0.914062 0.398438 +v 0.140625 -0.757812 0.367188 +v -0.140625 -0.757812 0.367188 +v 0.125000 -0.539062 0.359375 +v -0.125000 -0.539062 0.359375 +v 0.164062 -0.945312 0.437500 +v -0.164062 -0.945312 0.437500 +v 0.218750 -0.281250 0.429688 +v -0.218750 -0.281250 0.429688 +v 0.210938 -0.226562 0.468750 +v -0.210938 -0.226562 0.468750 +v 0.203125 -0.171875 0.500000 +v -0.203125 -0.171875 0.500000 +v 0.210938 -0.390625 0.164062 +v -0.210938 -0.390625 0.164062 +v 0.296875 -0.312500 -0.265625 +v -0.296875 -0.312500 -0.265625 +v 0.343750 -0.148438 -0.539062 +v -0.343750 -0.148438 -0.539062 +v 0.453125 0.867188 -0.382812 +v -0.453125 0.867188 -0.382812 +v 0.453125 0.929688 -0.070312 +v -0.453125 0.929688 -0.070312 +v 0.453125 0.851562 0.234375 +v -0.453125 0.851562 0.234375 +v 0.460938 0.523438 0.429688 +v -0.460938 0.523438 0.429688 +v 0.726562 0.406250 0.335938 +v -0.726562 0.406250 0.335938 +v 0.632812 0.453125 0.281250 +v -0.632812 0.453125 0.281250 +v 0.640625 0.703125 0.054688 +v -0.640625 0.703125 0.054688 +v 0.796875 0.562500 0.125000 +v -0.796875 0.562500 0.125000 +v 0.796875 0.617188 -0.117188 +v -0.796875 0.617188 -0.117188 +v 0.640625 0.750000 -0.195312 +v -0.640625 0.750000 -0.195312 +v 0.640625 0.679688 -0.445312 +v -0.640625 0.679688 -0.445312 +v 0.796875 0.539062 -0.359375 +v -0.796875 0.539062 -0.359375 +v 0.617188 0.328125 -0.585938 +v -0.617188 0.328125 -0.585938 +v 0.484375 0.023438 -0.546875 +v -0.484375 0.023438 -0.546875 +v 0.820312 0.328125 -0.203125 +v -0.820312 0.328125 -0.203125 +v 0.406250 -0.171875 0.148438 +v -0.406250 -0.171875 0.148438 +v 0.429688 -0.195312 -0.210938 +v -0.429688 -0.195312 -0.210938 +v 0.890625 0.406250 -0.234375 +v -0.890625 0.406250 -0.234375 +v 0.773438 -0.140625 -0.125000 +v -0.773438 -0.140625 -0.125000 +v 1.039062 -0.101562 -0.328125 +v -1.039062 -0.101562 -0.328125 +v 1.281250 0.054688 -0.429688 +v -1.281250 0.054688 -0.429688 +v 1.351562 0.320312 -0.421875 +v -1.351562 0.320312 -0.421875 +v 1.234375 0.507812 -0.421875 +v -1.234375 0.507812 -0.421875 +v 1.023438 0.476562 -0.312500 +v -1.023438 0.476562 -0.312500 +v 1.015625 0.414062 -0.289062 +v -1.015625 0.414062 -0.289062 +v 1.187500 0.437500 -0.390625 +v -1.187500 0.437500 -0.390625 +v 1.265625 0.289062 -0.406250 +v -1.265625 0.289062 -0.406250 +v 1.210938 0.078125 -0.406250 +v -1.210938 0.078125 -0.406250 +v 1.031250 -0.039062 -0.304688 +v -1.031250 -0.039062 -0.304688 +v 0.828125 -0.070312 -0.132812 +v -0.828125 -0.070312 -0.132812 +v 0.921875 0.359375 -0.218750 +v -0.921875 0.359375 -0.218750 +v 0.945312 0.304688 -0.289062 +v -0.945312 0.304688 -0.289062 +v 0.882812 -0.023438 -0.210938 +v -0.882812 -0.023438 -0.210938 +v 1.039062 0.000000 -0.367188 +v -1.039062 0.000000 -0.367188 +v 1.187500 0.093750 -0.445312 +v -1.187500 0.093750 -0.445312 +v 1.234375 0.250000 -0.445312 +v -1.234375 0.250000 -0.445312 +v 1.171875 0.359375 -0.437500 +v -1.171875 0.359375 -0.437500 +v 1.023438 0.343750 -0.359375 +v -1.023438 0.343750 -0.359375 +v 0.843750 0.289062 -0.210938 +v -0.843750 0.289062 -0.210938 +v 0.835938 0.171875 -0.273438 +v -0.835938 0.171875 -0.273438 +v 0.757812 0.093750 -0.273438 +v -0.757812 0.093750 -0.273438 +v 0.820312 0.085938 -0.273438 +v -0.820312 0.085938 -0.273438 +v 0.843750 0.015625 -0.273438 +v -0.843750 0.015625 -0.273438 +v 0.812500 -0.015625 -0.273438 +v -0.812500 -0.015625 -0.273438 +v 0.726562 0.000000 -0.070312 +v -0.726562 0.000000 -0.070312 +v 0.718750 -0.023438 -0.171875 +v -0.718750 -0.023438 -0.171875 +v 0.718750 0.039062 -0.187500 +v -0.718750 0.039062 -0.187500 +v 0.796875 0.203125 -0.210938 +v -0.796875 0.203125 -0.210938 +v 0.890625 0.242188 -0.265625 +v -0.890625 0.242188 -0.265625 +v 0.890625 0.234375 -0.320312 +v -0.890625 0.234375 -0.320312 +v 0.812500 -0.015625 -0.320312 +v -0.812500 -0.015625 -0.320312 +v 0.851562 0.015625 -0.320312 +v -0.851562 0.015625 -0.320312 +v 0.828125 0.078125 -0.320312 +v -0.828125 0.078125 -0.320312 +v 0.765625 0.093750 -0.320312 +v -0.765625 0.093750 -0.320312 +v 0.843750 0.171875 -0.320312 +v -0.843750 0.171875 -0.320312 +v 1.039062 0.328125 -0.414062 +v -1.039062 0.328125 -0.414062 +v 1.187500 0.343750 -0.484375 +v -1.187500 0.343750 -0.484375 +v 1.257812 0.242188 -0.492188 +v -1.257812 0.242188 -0.492188 +v 1.210938 0.085938 -0.484375 +v -1.210938 0.085938 -0.484375 +v 1.046875 0.000000 -0.421875 +v -1.046875 0.000000 -0.421875 +v 0.882812 -0.015625 -0.265625 +v -0.882812 -0.015625 -0.265625 +v 0.953125 0.289062 -0.343750 +v -0.953125 0.289062 -0.343750 +v 0.890625 0.109375 -0.328125 +v -0.890625 0.109375 -0.328125 +v 0.937500 0.062500 -0.335938 +v -0.937500 0.062500 -0.335938 +v 1.000000 0.125000 -0.367188 +v -1.000000 0.125000 -0.367188 +v 0.960938 0.171875 -0.351562 +v -0.960938 0.171875 -0.351562 +v 1.015625 0.234375 -0.375000 +v -1.015625 0.234375 -0.375000 +v 1.054688 0.187500 -0.382812 +v -1.054688 0.187500 -0.382812 +v 1.109375 0.210938 -0.390625 +v -1.109375 0.210938 -0.390625 +v 1.085938 0.273438 -0.390625 +v -1.085938 0.273438 -0.390625 +v 1.023438 0.437500 -0.484375 +v -1.023438 0.437500 -0.484375 +v 1.250000 0.468750 -0.546875 +v -1.250000 0.468750 -0.546875 +v 1.367188 0.296875 -0.500000 +v -1.367188 0.296875 -0.500000 +v 1.312500 0.054688 -0.531250 +v -1.312500 0.054688 -0.531250 +v 1.039062 -0.085938 -0.492188 +v -1.039062 -0.085938 -0.492188 +v 0.789062 -0.125000 -0.328125 +v -0.789062 -0.125000 -0.328125 +v 0.859375 0.382812 -0.382812 +v -0.859375 0.382812 -0.382812 +vn 0.6650 -0.2008 0.7194 +vn -0.6650 -0.2008 0.7194 +vn 0.8294 -0.3036 0.4689 +vn -0.8294 -0.3036 0.4689 +vn 0.4155 -0.7933 0.4449 +vn -0.4155 -0.7933 0.4449 +vn 0.3600 -0.5089 0.7820 +vn -0.3600 -0.5089 0.7820 +vn -0.0787 -0.5394 0.8384 +vn 0.0787 -0.5394 0.8384 +vn -0.2696 -0.8413 0.4685 +vn 0.2696 -0.8413 0.4685 +vn -0.7707 -0.3352 0.5420 +vn 0.7707 -0.3352 0.5420 +vn -0.4689 -0.1940 0.8617 +vn 0.4689 -0.1940 0.8617 +vn -0.4767 0.1907 0.8581 +vn 0.4767 0.1907 0.8581 +vn -0.7672 0.3264 0.5521 +vn 0.7672 0.3264 0.5521 +vn -0.2519 0.8173 0.5182 +vn 0.2519 0.8173 0.5182 +vn -0.0949 0.5696 0.8164 +vn 0.0949 0.5696 0.8164 +vn 0.3667 0.5370 0.7597 +vn -0.3667 0.5370 0.7597 +vn 0.4141 0.7672 0.4898 +vn -0.4141 0.7672 0.4898 +vn 0.8277 0.2952 0.4771 +vn -0.8277 0.2952 0.4771 +vn 0.6713 0.1971 0.7145 +vn -0.6713 0.1971 0.7145 +vn 0.8111 0.3244 -0.4867 +vn -0.8111 0.3244 -0.4867 +vn 0.2052 0.8206 -0.5334 +vn -0.2052 0.8206 -0.5334 +vn -0.4223 0.7806 -0.4607 +vn 0.4223 0.7806 -0.4607 +vn -0.8241 0.3225 -0.4658 +vn 0.8241 0.3225 -0.4658 +vn -0.8137 -0.3487 -0.4650 +vn 0.8137 -0.3487 -0.4650 +vn -0.4223 -0.7806 -0.4607 +vn 0.4223 -0.7806 -0.4607 +vn 0.2052 -0.8206 -0.5334 +vn -0.2052 -0.8206 -0.5334 +vn 0.7995 -0.3510 -0.4875 +vn -0.7995 -0.3510 -0.4875 +vn 0.4000 -0.0623 0.9144 +vn -0.4000 -0.0623 0.9144 +vn 0.3069 -0.1754 0.9354 +vn -0.3069 -0.1754 0.9354 +vn 0.0945 -0.1835 0.9785 +vn -0.0945 -0.1835 0.9785 +vn -0.0624 -0.0283 0.9977 +vn 0.0624 -0.0283 0.9977 +vn -0.0624 0.0260 0.9977 +vn 0.0624 0.0260 0.9977 +vn 0.0996 0.1729 0.9799 +vn -0.0996 0.1729 0.9799 +vn 0.3036 0.1656 0.9383 +vn -0.3036 0.1656 0.9383 +vn 0.4002 0.0572 0.9147 +vn -0.4002 0.0572 0.9147 +vn 0.1231 -0.8616 0.4924 +vn -0.1231 -0.8616 0.4924 +vn 0.2190 -0.8647 0.4520 +vn -0.2190 -0.8647 0.4520 +vn 0.5902 -0.4550 0.6668 +vn -0.5902 -0.4550 0.6668 +vn 0.7689 -0.0506 0.6374 +vn -0.7689 -0.0506 0.6374 +vn 0.7796 0.0900 0.6197 +vn -0.7796 0.0900 0.6197 +vn 0.3241 -0.8188 0.4739 +vn -0.3241 -0.8188 0.4739 +vn 0.3857 -0.6629 0.6417 +vn -0.3857 -0.6629 0.6417 +vn 0.6895 -0.4193 0.5906 +vn -0.6895 -0.4193 0.5906 +vn 0.6588 -0.3634 0.6588 +vn -0.6588 -0.3634 0.6588 +vn 0.5465 0.3707 0.7509 +vn -0.5465 0.3707 0.7509 +vn 0.5064 0.6464 0.5706 +vn -0.5064 0.6464 0.5706 +vn 0.6092 0.5167 0.6015 +vn -0.6092 0.5167 0.6015 +vn -0.0441 0.6610 0.7491 +vn 0.0441 0.6610 0.7491 +vn -0.7246 0.3187 0.6110 +vn 0.7246 0.3187 0.6110 +vn -0.5880 0.5554 0.5880 +vn 0.5880 0.5554 0.5880 +vn 0.5361 -0.3909 0.7482 +vn -0.5361 -0.3909 0.7482 +vn 0.2207 -0.4690 0.8552 +vn -0.2207 -0.4690 0.8552 +vn -0.0794 -0.5321 0.8429 +vn 0.0794 -0.5321 0.8429 +vn -0.0825 -0.6575 0.7490 +vn 0.0825 -0.6575 0.7490 +vn 0.0457 -0.5667 0.8226 +vn -0.0457 -0.5667 0.8226 +vn 0.2784 -0.2130 0.9365 +vn -0.2784 -0.2130 0.9365 +vn 0.3813 -0.1824 0.9063 +vn -0.3813 -0.1824 0.9063 +vn 0.3357 -0.2878 0.8969 +vn -0.3357 -0.2878 0.8969 +vn 0.3762 0.0603 0.9246 +vn -0.3762 0.0603 0.9246 +vn -0.1352 0.2680 0.9539 +vn 0.1352 0.2680 0.9539 +vn 0.3961 -0.4321 0.8102 +vn -0.3961 -0.4321 0.8102 +vn 0.1856 -0.2474 0.9510 +vn -0.1856 -0.2474 0.9510 +vn 0.0099 -0.1948 0.9808 +vn -0.0099 -0.1948 0.9808 +vn 0.0721 -0.6966 0.7138 +vn -0.0721 -0.6966 0.7138 +vn 0.1863 -0.5723 0.7986 +vn -0.1863 -0.5723 0.7986 +vn 0.3157 -0.2708 0.9094 +vn -0.3157 -0.2708 0.9094 +vn 0.3063 -0.0265 0.9516 +vn -0.3063 -0.0265 0.9516 +vn 0.3266 -0.1306 0.9361 +vn -0.3266 -0.1306 0.9361 +vn -0.0137 0.0574 0.9983 +vn 0.0137 0.0574 0.9983 +vn -0.0026 -0.0656 0.9978 +vn 0.0026 -0.0656 0.9978 +vn 0.0000 0.0000 1.0000 +vn 0.8174 -0.5744 -0.0442 +vn -0.8174 -0.5744 -0.0442 +vn 0.9494 0.2297 -0.2144 +vn -0.9494 0.2297 -0.2144 +vn 0.0825 0.9073 -0.4124 +vn -0.0825 0.9073 -0.4124 +vn -0.8836 0.3555 0.3047 +vn 0.8836 0.3555 0.3047 +vn 0.4207 -0.8797 0.2218 +vn -0.4207 -0.8797 0.2218 +vn 0.2873 -0.5747 0.7663 +vn -0.2873 -0.5747 0.7663 +vn -0.6542 0.6019 0.4580 +vn 0.6542 0.6019 0.4580 +vn 0.1052 0.7892 0.6051 +vn -0.1052 0.7892 0.6051 +vn 0.7582 0.2916 0.5832 +vn -0.7582 0.2916 0.5832 +vn 0.3889 -0.7130 0.5834 +vn -0.3889 -0.7130 0.5834 +vn 0.0463 0.2314 0.9718 +vn -0.0463 0.2314 0.9718 +vn 0.0335 -0.4018 0.9151 +vn -0.0335 -0.4018 0.9151 +vn -0.4452 -0.1610 0.8809 +vn 0.4452 -0.1610 0.8809 +vn -0.2182 -0.4364 0.8729 +vn 0.2182 -0.4364 0.8729 +vn 0.4341 -0.1290 0.8916 +vn -0.4341 -0.1290 0.8916 +vn 0.3008 0.0501 0.9524 +vn -0.3008 0.0501 0.9524 +vn 0.8123 0.3010 0.4996 +vn -0.8123 0.3010 0.4996 +vn 0.8753 0.2574 0.4093 +vn -0.8753 0.2574 0.4093 +vn 0.9385 0.1601 0.3060 +vn -0.9385 0.1601 0.3060 +vn 0.2237 -0.6539 0.7227 +vn -0.2237 -0.6539 0.7227 +vn -0.1536 -0.1997 0.9677 +vn 0.1536 -0.1997 0.9677 +vn -0.2733 -0.1025 0.9565 +vn 0.2733 -0.1025 0.9565 +vn -0.0976 0.1952 0.9759 +vn 0.0976 0.1952 0.9759 +vn -0.1582 0.9494 0.2713 +vn 0.1582 0.9494 0.2713 +vn -0.6934 0.7082 0.1328 +vn 0.6934 0.7082 0.1328 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.3051 -0.9450 0.1181 +vn -0.3051 -0.9450 0.1181 +vn 0.0298 -0.2981 0.9541 +vn -0.0298 -0.2981 0.9541 +vn 0.1353 -0.3479 0.9277 +vn -0.1353 -0.3479 0.9277 +vn -0.5085 -0.2755 0.8158 +vn 0.5085 -0.2755 0.8158 +vn -0.3843 -0.0419 0.9223 +vn 0.3843 -0.0419 0.9223 +vn -0.2083 0.0374 0.9774 +vn 0.2083 0.0374 0.9774 +vn -0.5721 -0.4767 0.6674 +vn 0.5721 -0.4767 0.6674 +vn -0.1369 -0.7531 0.6435 +vn 0.1369 -0.7531 0.6435 +vn 0.4088 -0.6071 0.6814 +vn -0.4088 -0.6071 0.6814 +vn 0.5740 -0.4130 0.7070 +vn -0.5740 -0.4130 0.7070 +vn 0.5665 -0.0968 0.8183 +vn -0.5665 -0.0968 0.8183 +vn 0.5703 0.1180 0.8129 +vn -0.5703 0.1180 0.8129 +vn 0.4823 0.5621 0.6719 +vn -0.4823 0.5621 0.6719 +vn 0.2604 0.6114 0.7473 +vn -0.2604 0.6114 0.7473 +vn 0.1640 0.3607 0.9182 +vn -0.1640 0.3607 0.9182 +vn -0.0178 0.2495 0.9682 +vn 0.0178 0.2495 0.9682 +vn 0.3273 -0.4166 0.8481 +vn -0.3273 -0.4166 0.8481 +vn 0.2811 -0.2610 0.9235 +vn -0.2811 -0.2610 0.9235 +vn -0.2542 -0.6514 0.7149 +vn 0.2542 -0.6514 0.7149 +vn -0.0260 -0.8455 0.5333 +vn 0.0260 -0.8455 0.5333 +vn -0.3518 -0.2606 0.8991 +vn 0.3518 -0.2606 0.8991 +vn -0.3523 -0.0110 0.9358 +vn 0.3523 -0.0110 0.9358 +vn -0.1317 0.4608 0.8777 +vn 0.1317 0.4608 0.8777 +vn -0.0342 0.6159 0.7870 +vn 0.0342 0.6159 0.7870 +vn 0.3603 0.5836 0.7277 +vn -0.3603 0.5836 0.7277 +vn 0.4988 0.5300 0.6858 +vn -0.4988 0.5300 0.6858 +vn 0.6667 -0.3333 0.6667 +vn -0.6667 -0.3333 0.6667 +vn 0.8165 -0.0731 0.5727 +vn -0.8165 -0.0731 0.5727 +vn 0.7840 0.1161 0.6098 +vn -0.7840 0.1161 0.6098 +vn -0.5306 0.8111 -0.2461 +vn 0.5306 0.8111 -0.2461 +vn -0.8511 0.3695 -0.3730 +vn 0.8511 0.3695 -0.3730 +vn -0.2446 0.8675 -0.4331 +vn 0.2446 0.8675 -0.4331 +vn 0.5924 0.7465 -0.3030 +vn -0.5924 0.7465 -0.3030 +vn 0.3685 0.8758 -0.3118 +vn -0.3685 0.8758 -0.3118 +vn 0.2821 0.9151 -0.2880 +vn -0.2821 0.9151 -0.2880 +vn 0.8561 0.1340 -0.4991 +vn -0.8561 0.1340 -0.4991 +vn 0.5342 -0.7233 -0.4376 +vn -0.5342 -0.7233 -0.4376 +vn 0.3849 -0.8131 -0.4368 +vn -0.3849 -0.8131 -0.4368 +vn 0.2335 -0.5806 -0.7800 +vn -0.2335 -0.5806 -0.7800 +vn 0.2449 -0.0583 -0.9678 +vn -0.2449 -0.0583 -0.9678 +vn 0.1163 -0.4535 -0.8837 +vn -0.1163 -0.4535 -0.8837 +vn 0.1152 -0.9836 -0.1388 +vn -0.1152 -0.9836 -0.1388 +vn 0.1184 -0.9669 -0.2260 +vn -0.1184 -0.9669 -0.2260 +vn 0.9597 -0.0085 -0.2808 +vn -0.9597 -0.0085 -0.2808 +vn 0.9319 0.1629 -0.3242 +vn -0.9319 0.1629 -0.3242 +vn 0.1626 0.0207 -0.9865 +vn -0.1626 0.0207 -0.9865 +vn -0.0188 -0.2177 -0.9758 +vn 0.0188 -0.2177 -0.9758 +vn 0.7538 -0.2926 -0.5884 +vn -0.7538 -0.2926 -0.5884 +vn 0.9196 0.1379 -0.3678 +vn -0.9196 0.1379 -0.3678 +vn 0.9297 0.3127 -0.1944 +vn -0.9297 0.3127 -0.1944 +vn 0.9120 0.3376 -0.2329 +vn -0.9120 0.3376 -0.2329 +vn 0.9407 0.3338 -0.0607 +vn -0.9407 0.3338 -0.0607 +vn 0.1761 -0.8805 -0.4402 +vn -0.1761 -0.8805 -0.4402 +vn 0.3708 -0.4733 -0.7991 +vn -0.3708 -0.4733 -0.7991 +vn 0.3107 -0.8284 -0.4660 +vn -0.3107 -0.8284 -0.4660 +vn 0.2793 -0.9515 -0.1287 +vn -0.2793 -0.9515 -0.1287 +vn 0.3139 -0.9321 -0.1807 +vn -0.3139 -0.9321 -0.1807 +vn 0.9762 -0.2083 -0.0609 +vn -0.9762 -0.2083 -0.0609 +vn 0.8267 -0.5066 0.2447 +vn -0.8267 -0.5066 0.2447 +vn 0.3449 -0.1158 -0.9315 +vn -0.3449 -0.1158 -0.9315 +vn 0.1203 0.9644 0.2355 +vn -0.1203 0.9644 0.2355 +vn 0.1275 0.9744 -0.1851 +vn -0.1275 0.9744 -0.1851 +vn 0.3492 0.5947 -0.7241 +vn -0.3492 0.5947 -0.7241 +vn 0.4153 0.8981 -0.1449 +vn -0.4153 0.8981 -0.1449 +vn 0.1845 0.7036 0.6863 +vn -0.1845 0.7036 0.6863 +vn 0.6056 0.7794 0.1608 +vn -0.6056 0.7794 0.1608 +vn 0.7033 0.6806 -0.2053 +vn -0.7033 0.6806 -0.2053 +vn 0.6679 0.2007 -0.7166 +vn -0.6679 0.2007 -0.7166 +vn 0.4948 0.4342 -0.7528 +vn -0.4948 0.4342 -0.7528 +vn 0.6423 0.7459 -0.1761 +vn -0.6423 0.7459 -0.1761 +vn 0.7182 0.6788 0.1530 +vn -0.7182 0.6788 0.1530 +vn 0.7388 0.3972 0.5444 +vn -0.7388 0.3972 0.5444 +vn 0.3428 0.9261 -0.1579 +vn -0.3428 0.9261 -0.1579 +vn 0.2270 0.5740 0.7867 +vn -0.2270 0.5740 0.7867 +vn -0.1722 0.1046 -0.9795 +vn 0.1722 0.1046 -0.9795 +vn 0.0425 0.9150 0.4013 +vn -0.0425 0.9150 0.4013 +vn -0.1616 0.1847 0.9694 +vn 0.1616 0.1847 0.9694 +vn 0.9791 0.1973 0.0483 +vn -0.9791 0.1973 0.0483 +vn 0.9470 0.0918 0.3079 +vn -0.9470 0.0918 0.3079 +vn 0.9794 0.1905 -0.0661 +vn -0.9794 0.1905 -0.0661 +vn 0.9938 0.0312 -0.1070 +vn -0.9938 0.0312 -0.1070 +vn 0.7116 -0.7008 0.0501 +vn -0.7116 -0.7008 0.0501 +vn 0.3722 -0.9243 0.0847 +vn -0.3722 -0.9243 0.0847 +vn 0.4465 -0.8644 0.2310 +vn -0.4465 -0.8644 0.2310 +vn 0.6066 -0.7578 0.2405 +vn -0.6066 -0.7578 0.2405 +vn 0.7325 -0.6368 0.2407 +vn -0.7325 -0.6368 0.2407 +vn 0.2637 -0.4499 0.8533 +vn -0.2637 -0.4499 0.8533 +vn 0.5568 -0.3181 -0.7673 +vn -0.5568 -0.3181 -0.7673 +vn 0.5004 -0.2807 -0.8190 +vn -0.5004 -0.2807 -0.8190 +vn 0.3190 -0.8494 -0.4205 +vn -0.3190 -0.8494 -0.4205 +vn 0.7198 -0.6356 -0.2793 +vn -0.7198 -0.6356 -0.2793 +vn 0.4972 -0.4408 -0.7473 +vn -0.4972 -0.4408 -0.7473 +vn 0.3506 0.3807 0.8557 +vn -0.3506 0.3807 0.8557 +vn 0.4566 0.1715 0.8730 +vn -0.4566 0.1715 0.8730 +vn 0.2583 0.1055 0.9603 +vn -0.2583 0.1055 0.9603 +vn 0.2455 -0.0802 0.9661 +vn -0.2455 -0.0802 0.9661 +vn 0.4643 -0.0599 0.8837 +vn -0.4643 -0.0599 0.8837 +vn 0.6225 -0.3045 0.7210 +vn -0.6225 -0.3045 0.7210 +vn 0.4500 0.6590 0.6027 +vn -0.4500 0.6590 0.6027 +vn -0.2667 0.8309 0.4884 +vn 0.2667 0.8309 0.4884 +vn -0.8284 0.2291 0.5111 +vn 0.8284 0.2291 0.5111 +vn -0.5251 -0.3566 0.7727 +vn 0.5251 -0.3566 0.7727 +vn 0.4546 -0.5665 0.6873 +vn -0.4546 -0.5665 0.6873 +vn 0.6996 -0.4497 0.5552 +vn -0.6996 -0.4497 0.5552 +vn 0.7220 -0.6827 -0.1126 +vn -0.7220 -0.6827 -0.1126 +vn -0.1919 0.2860 0.9388 +vn 0.1919 0.2860 0.9388 +vn 0.9048 -0.3734 -0.2047 +vn -0.9048 -0.3734 -0.2047 +vn 0.1034 0.1551 0.9825 +vn -0.1034 0.1551 0.9825 +vn 0.0841 0.9318 0.3530 +vn -0.0841 0.9318 0.3530 +vn 0.6446 -0.0883 0.7594 +vn -0.6446 -0.0883 0.7594 +vn 0.4309 0.4740 0.7678 +vn -0.4309 0.4740 0.7678 +vn 0.8032 -0.4847 0.3462 +vn -0.8032 -0.4847 0.3462 +vn 0.5811 -0.4128 0.7014 +vn -0.5811 -0.4128 0.7014 +vn 0.5910 -0.4305 0.6822 +vn -0.5910 -0.4305 0.6822 +vn 0.9818 -0.1804 -0.0591 +vn -0.9818 -0.1804 -0.0591 +vn 0.9105 -0.3965 -0.1175 +vn -0.9105 -0.3965 -0.1175 +vn 0.9972 -0.0181 -0.0725 +vn -0.9972 -0.0181 -0.0725 +vn 0.7313 -0.6543 0.1925 +vn -0.7313 -0.6543 0.1925 +vn 0.7867 -0.6079 0.1073 +vn -0.7867 -0.6079 0.1073 +vn 0.7022 -0.7022 0.1170 +vn -0.7022 -0.7022 0.1170 +vn 0.1840 0.9816 -0.0511 +vn -0.1840 0.9816 -0.0511 +vn 0.9352 0.3301 0.1284 +vn -0.9352 0.3301 0.1284 +vn 0.6633 -0.7463 0.0553 +vn -0.6633 -0.7463 0.0553 +vn -0.0085 0.9970 0.0767 +vn 0.0085 0.9970 0.0767 +vn 0.6237 -0.7061 0.3354 +vn -0.6237 -0.7061 0.3354 +vn 0.2733 -0.8925 0.3587 +vn -0.2733 -0.8925 0.3587 +vn -0.8328 -0.5080 -0.2200 +vn 0.8328 -0.5080 -0.2200 +vn -0.8339 0.2377 -0.4981 +vn 0.8339 0.2377 -0.4981 +vn -0.5655 0.7847 -0.2539 +vn 0.5655 0.7847 -0.2539 +vn -0.0560 0.9962 0.0672 +vn 0.0560 0.9962 0.0672 +vn 0.1445 0.0222 0.9893 +vn -0.1445 0.0222 0.9893 +vn 0.3275 0.0645 0.9427 +vn -0.3275 0.0645 0.9427 +vn 0.3127 0.0232 0.9496 +vn -0.3127 0.0232 0.9496 +vn 0.1710 0.0274 0.9849 +vn -0.1710 0.0274 0.9849 +vn 0.3487 0.2849 0.8929 +vn -0.3487 0.2849 0.8929 +vn 0.4006 -0.0343 0.9156 +vn -0.4006 -0.0343 0.9156 +vn 0.2572 -0.0603 0.9645 +vn -0.2572 -0.0603 0.9645 +vn 0.0637 -0.0106 0.9979 +vn -0.0637 -0.0106 0.9979 +vn -0.3637 0.7039 0.6101 +vn 0.3637 0.7039 0.6101 +vn 0.6299 0.0355 0.7759 +vn -0.6299 0.0355 0.7759 +vn 0.4472 -0.2002 0.8717 +vn -0.4472 -0.2002 0.8717 +vn 0.5072 -0.2141 0.8348 +vn -0.5072 -0.2141 0.8348 +vn 0.5258 0.2619 0.8093 +vn -0.5258 0.2619 0.8093 +vn 0.2980 0.5802 0.7580 +vn -0.2980 0.5802 0.7580 +vn 0.0930 -0.9924 -0.0805 +vn -0.0930 -0.9924 -0.0805 +vn 0.5006 -0.8657 0.0080 +vn -0.5006 -0.8657 0.0080 +vn 0.9285 -0.2497 0.2748 +vn -0.9285 -0.2497 0.2748 +vn 0.8393 0.5424 -0.0378 +vn -0.8393 0.5424 -0.0378 +vn -0.2355 0.9367 -0.2589 +vn 0.2355 0.9367 -0.2589 +vn -0.4499 0.8838 -0.1285 +vn 0.4499 0.8838 -0.1285 +vn -0.5384 -0.0098 -0.8427 +vn 0.5384 -0.0098 -0.8427 +vn -0.1910 -0.0241 -0.9813 +vn 0.1910 -0.0241 -0.9813 +vn 0.4046 0.0266 -0.9141 +vn -0.4046 0.0266 -0.9141 +vn -0.7819 0.6231 0.0197 +vn 0.7819 0.6231 0.0197 +vn 0.5428 -0.2063 -0.8142 +vn -0.5428 -0.2063 -0.8142 +vn -0.2474 -0.9231 -0.2945 +vn 0.2474 -0.9231 -0.2945 +usemtl None +s off +f 47//1 1//1 3//1 45//1 +f 4//2 2//2 48//2 46//2 +f 45//3 3//3 5//3 43//3 +f 6//4 4//4 46//4 44//4 +f 3//5 9//5 7//5 5//5 +f 8//6 10//6 4//6 6//6 +f 1//7 11//7 9//7 3//7 +f 10//8 12//8 2//8 4//8 +f 11//9 13//9 15//9 9//9 +f 16//10 14//10 12//10 10//10 +f 9//11 15//11 17//11 7//11 +f 18//12 16//12 10//12 8//12 +f 15//13 21//13 19//13 17//13 +f 20//14 22//14 16//14 18//14 +f 13//15 23//15 21//15 15//15 +f 22//16 24//16 14//16 16//16 +f 23//17 25//17 27//17 21//17 +f 28//18 26//18 24//18 22//18 +f 21//19 27//19 29//19 19//19 +f 30//20 28//20 22//20 20//20 +f 27//21 33//21 31//21 29//21 +f 32//22 34//22 28//22 30//22 +f 25//23 35//23 33//23 27//23 +f 34//24 36//24 26//24 28//24 +f 35//25 37//25 39//25 33//25 +f 40//26 38//26 36//26 34//26 +f 33//27 39//27 41//27 31//27 +f 42//28 40//28 34//28 32//28 +f 39//29 45//29 43//29 41//29 +f 44//30 46//30 40//30 42//30 +f 37//31 47//31 45//31 39//31 +f 46//32 48//32 38//32 40//32 +f 47//33 37//33 51//33 49//33 +f 52//34 38//34 48//34 50//34 +f 37//35 35//35 53//35 51//35 +f 54//36 36//36 38//36 52//36 +f 35//37 25//37 55//37 53//37 +f 56//38 26//38 36//38 54//38 +f 25//39 23//39 57//39 55//39 +f 58//40 24//40 26//40 56//40 +f 23//41 13//41 59//41 57//41 +f 60//42 14//42 24//42 58//42 +f 13//43 11//43 63//43 59//43 +f 64//44 12//44 14//44 60//44 +f 11//45 1//45 65//45 63//45 +f 66//46 2//46 12//46 64//46 +f 1//47 47//47 49//47 65//47 +f 50//48 48//48 2//48 66//48 +f 61//49 65//49 49//49 +f 50//50 66//50 62//50 +f 63//51 65//51 61//51 +f 62//52 66//52 64//52 +f 61//53 59//53 63//53 +f 64//54 60//54 62//54 +f 61//55 57//55 59//55 +f 60//56 58//56 62//56 +f 61//57 55//57 57//57 +f 58//58 56//58 62//58 +f 61//59 53//59 55//59 +f 56//60 54//60 62//60 +f 61//61 51//61 53//61 +f 54//62 52//62 62//62 +f 61//63 49//63 51//63 +f 52//64 50//64 62//64 +f 89//65 174//65 176//65 91//65 +f 176//66 175//66 90//66 91//66 +f 87//67 172//67 174//67 89//67 +f 175//68 173//68 88//68 90//68 +f 85//69 170//69 172//69 87//69 +f 173//70 171//70 86//70 88//70 +f 83//71 168//71 170//71 85//71 +f 171//72 169//72 84//72 86//72 +f 81//73 166//73 168//73 83//73 +f 169//74 167//74 82//74 84//74 +f 79//75 92//75 146//75 164//75 +f 147//76 93//76 80//76 165//76 +f 92//77 94//77 148//77 146//77 +f 149//78 95//78 93//78 147//78 +f 94//79 96//79 150//79 148//79 +f 151//80 97//80 95//80 149//80 +f 96//81 98//81 152//81 150//81 +f 153//82 99//82 97//82 151//82 +f 98//83 100//83 154//83 152//83 +f 155//84 101//84 99//84 153//84 +f 100//85 102//85 156//85 154//85 +f 157//86 103//86 101//86 155//86 +f 102//87 104//87 158//87 156//87 +f 159//88 105//88 103//88 157//88 +f 104//89 106//89 160//89 158//89 +f 161//90 107//90 105//90 159//90 +f 106//91 108//91 162//91 160//91 +f 163//92 109//92 107//92 161//92 +f 108//93 67//93 68//93 162//93 +f 68//94 67//94 109//94 163//94 +f 110//95 128//95 160//95 162//95 +f 161//96 129//96 111//96 163//96 +f 128//97 179//97 158//97 160//97 +f 159//98 180//98 129//98 161//98 +f 126//99 156//99 158//99 179//99 +f 159//100 157//100 127//100 180//100 +f 124//101 154//101 156//101 126//101 +f 157//102 155//102 125//102 127//102 +f 122//103 152//103 154//103 124//103 +f 155//104 153//104 123//104 125//104 +f 120//105 150//105 152//105 122//105 +f 153//106 151//106 121//106 123//106 +f 118//107 148//107 150//107 120//107 +f 151//108 149//108 119//108 121//108 +f 116//109 146//109 148//109 118//109 +f 149//110 147//110 117//110 119//110 +f 114//111 164//111 146//111 116//111 +f 147//112 165//112 115//112 117//112 +f 114//113 181//113 177//113 164//113 +f 177//114 182//114 115//114 165//114 +f 110//115 162//115 68//115 112//115 +f 68//116 163//116 111//116 113//116 +f 112//117 68//117 178//117 183//117 +f 178//118 68//118 113//118 184//118 +f 177//119 181//119 183//119 178//119 +f 184//120 182//120 177//120 178//120 +f 135//121 137//121 176//121 174//121 +f 176//122 137//122 136//122 175//122 +f 133//123 135//123 174//123 172//123 +f 175//124 136//124 134//124 173//124 +f 131//125 133//125 172//125 170//125 +f 173//126 134//126 132//126 171//126 +f 166//127 187//127 185//127 168//127 +f 186//128 188//128 167//128 169//128 +f 131//129 170//129 168//129 185//129 +f 169//130 171//130 132//130 186//130 +f 144//131 190//131 189//131 187//131 +f 189//132 190//132 145//132 188//132 +f 185//133 187//133 189//133 69//133 +f 189//134 188//134 186//134 69//134 +f 130//135 131//135 185//135 69//135 +f 186//135 132//135 130//135 69//135 +f 142//136 193//136 191//136 144//136 +f 192//137 194//137 143//137 145//137 +f 140//138 195//138 193//138 142//138 +f 194//139 196//139 141//139 143//139 +f 139//140 197//140 195//140 140//140 +f 196//141 198//141 139//141 141//141 +f 138//142 71//142 197//142 139//142 +f 198//143 71//143 138//143 139//143 +f 190//144 144//144 191//144 70//144 +f 192//145 145//145 190//145 70//145 +f 70//146 191//146 206//146 208//146 +f 207//147 192//147 70//147 208//147 +f 71//148 199//148 200//148 197//148 +f 201//149 199//149 71//149 198//149 +f 197//150 200//150 202//150 195//150 +f 203//151 201//151 198//151 196//151 +f 195//152 202//152 204//152 193//152 +f 205//153 203//153 196//153 194//153 +f 193//154 204//154 206//154 191//154 +f 207//155 205//155 194//155 192//155 +f 199//156 204//156 202//156 200//156 +f 203//157 205//157 199//157 201//157 +f 199//158 208//158 206//158 204//158 +f 207//159 208//159 199//159 205//159 +f 139//160 140//160 164//160 177//160 +f 165//161 141//161 139//161 177//161 +f 140//162 142//162 211//162 164//162 +f 212//163 143//163 141//163 165//163 +f 142//164 144//164 213//164 211//164 +f 214//165 145//165 143//165 212//165 +f 144//166 187//166 166//166 213//166 +f 167//167 188//167 145//167 214//167 +f 81//168 209//168 213//168 166//168 +f 214//169 210//169 82//169 167//169 +f 209//170 215//170 211//170 213//170 +f 212//171 216//171 210//171 214//171 +f 79//172 164//172 211//172 215//172 +f 212//173 165//173 80//173 216//173 +f 131//174 130//174 72//174 222//174 +f 72//175 130//175 132//175 223//175 +f 133//176 131//176 222//176 220//176 +f 223//177 132//177 134//177 221//177 +f 135//178 133//178 220//178 218//178 +f 221//179 134//179 136//179 219//179 +f 137//180 135//180 218//180 217//180 +f 219//181 136//181 137//181 217//181 +f 217//182 218//182 229//182 231//182 +f 230//183 219//183 217//183 231//183 +f 218//184 220//184 227//184 229//184 +f 228//185 221//185 219//185 230//185 +f 220//186 222//186 225//186 227//186 +f 226//187 223//187 221//187 228//187 +f 222//188 72//188 224//188 225//188 +f 224//189 72//189 223//189 226//189 +f 224//190 231//190 229//190 225//190 +f 230//191 231//191 224//191 226//191 +f 225//192 229//192 227//192 +f 228//193 230//193 226//193 +f 183//194 181//194 234//194 232//194 +f 235//195 182//195 184//195 233//195 +f 112//196 183//196 232//196 254//196 +f 233//197 184//197 113//197 255//197 +f 110//198 112//198 254//198 256//198 +f 255//199 113//199 111//199 257//199 +f 181//200 114//200 252//200 234//200 +f 253//201 115//201 182//201 235//201 +f 114//202 116//202 250//202 252//202 +f 251//203 117//203 115//203 253//203 +f 116//204 118//204 248//204 250//204 +f 249//205 119//205 117//205 251//205 +f 118//206 120//206 246//206 248//206 +f 247//207 121//207 119//207 249//207 +f 120//208 122//208 244//208 246//208 +f 245//209 123//209 121//209 247//209 +f 122//210 124//210 242//210 244//210 +f 243//211 125//211 123//211 245//211 +f 124//212 126//212 240//212 242//212 +f 241//213 127//213 125//213 243//213 +f 126//214 179//214 236//214 240//214 +f 237//215 180//215 127//215 241//215 +f 179//216 128//216 238//216 236//216 +f 239//217 129//217 180//217 237//217 +f 128//218 110//218 256//218 238//218 +f 257//219 111//219 129//219 239//219 +f 238//220 256//220 258//220 276//220 +f 259//221 257//221 239//221 277//221 +f 236//222 238//222 276//222 278//222 +f 277//223 239//223 237//223 279//223 +f 240//224 236//224 278//224 274//224 +f 279//225 237//225 241//225 275//225 +f 242//226 240//226 274//226 272//226 +f 275//227 241//227 243//227 273//227 +f 244//228 242//228 272//228 270//228 +f 273//229 243//229 245//229 271//229 +f 246//230 244//230 270//230 268//230 +f 271//231 245//231 247//231 269//231 +f 248//232 246//232 268//232 266//232 +f 269//233 247//233 249//233 267//233 +f 250//234 248//234 266//234 264//234 +f 267//235 249//235 251//235 265//235 +f 252//236 250//236 264//236 262//236 +f 265//237 251//237 253//237 263//237 +f 234//238 252//238 262//238 280//238 +f 263//239 253//239 235//239 281//239 +f 256//240 254//240 260//240 258//240 +f 261//241 255//241 257//241 259//241 +f 254//242 232//242 282//242 260//242 +f 283//243 233//243 255//243 261//243 +f 232//244 234//244 280//244 282//244 +f 281//245 235//245 233//245 283//245 +f 67//246 108//246 284//246 73//246 +f 285//247 109//247 67//247 73//247 +f 108//248 106//248 286//248 284//248 +f 287//249 107//249 109//249 285//249 +f 106//250 104//250 288//250 286//250 +f 289//251 105//251 107//251 287//251 +f 104//252 102//252 290//252 288//252 +f 291//253 103//253 105//253 289//253 +f 102//254 100//254 292//254 290//254 +f 293//255 101//255 103//255 291//255 +f 100//256 98//256 294//256 292//256 +f 295//257 99//257 101//257 293//257 +f 98//258 96//258 296//258 294//258 +f 297//259 97//259 99//259 295//259 +f 96//260 94//260 298//260 296//260 +f 299//261 95//261 97//261 297//261 +f 94//262 92//262 300//262 298//262 +f 301//263 93//263 95//263 299//263 +f 308//264 309//264 328//264 338//264 +f 329//265 309//265 308//265 339//265 +f 307//266 308//266 338//266 336//266 +f 339//267 308//267 307//267 337//267 +f 306//268 307//268 336//268 340//268 +f 337//269 307//269 306//269 341//269 +f 89//270 91//270 306//270 340//270 +f 306//271 91//271 90//271 341//271 +f 87//272 89//272 340//272 334//272 +f 341//273 90//273 88//273 335//273 +f 85//274 87//274 334//274 330//274 +f 335//275 88//275 86//275 331//275 +f 83//276 85//276 330//276 332//276 +f 331//277 86//277 84//277 333//277 +f 330//278 336//278 338//278 332//278 +f 339//279 337//279 331//279 333//279 +f 330//280 334//280 340//280 336//280 +f 341//281 335//281 331//281 337//281 +f 326//282 332//282 338//282 328//282 +f 339//283 333//283 327//283 329//283 +f 81//284 83//284 332//284 326//284 +f 333//285 84//285 82//285 327//285 +f 209//286 342//286 344//286 215//286 +f 345//287 343//287 210//287 216//287 +f 81//288 326//288 342//288 209//288 +f 343//289 327//289 82//289 210//289 +f 79//290 215//290 344//290 346//290 +f 345//291 216//291 80//291 347//291 +f 79//292 346//292 300//292 92//292 +f 301//293 347//293 80//293 93//293 +f 77//294 324//294 352//294 304//294 +f 353//295 325//295 77//295 304//295 +f 304//296 352//296 350//296 78//296 +f 351//297 353//297 304//297 78//297 +f 78//298 350//298 348//298 305//298 +f 349//299 351//299 78//299 305//299 +f 305//300 348//300 328//300 309//300 +f 329//301 349//301 305//301 309//301 +f 326//302 328//302 348//302 342//302 +f 349//303 329//303 327//303 343//303 +f 296//304 298//304 318//304 310//304 +f 319//305 299//305 297//305 311//305 +f 76//306 316//306 324//306 77//306 +f 325//307 317//307 76//307 77//307 +f 302//308 358//308 356//308 303//308 +f 357//309 359//309 302//309 303//309 +f 303//310 356//310 354//310 75//310 +f 355//311 357//311 303//311 75//311 +f 75//312 354//312 316//312 76//312 +f 317//313 355//313 75//313 76//313 +f 292//314 294//314 362//314 364//314 +f 363//315 295//315 293//315 365//315 +f 364//316 362//316 368//316 366//316 +f 369//317 363//317 365//317 367//317 +f 366//318 368//318 370//318 372//318 +f 371//319 369//319 367//319 373//319 +f 372//320 370//320 376//320 374//320 +f 377//321 371//321 373//321 375//321 +f 314//322 378//322 374//322 376//322 +f 375//323 379//323 315//323 377//323 +f 316//324 354//324 374//324 378//324 +f 375//325 355//325 317//325 379//325 +f 354//326 356//326 372//326 374//326 +f 373//327 357//327 355//327 375//327 +f 356//328 358//328 366//328 372//328 +f 367//329 359//329 357//329 373//329 +f 358//330 360//330 364//330 366//330 +f 365//331 361//331 359//331 367//331 +f 290//332 292//332 364//332 360//332 +f 365//333 293//333 291//333 361//333 +f 74//334 360//334 358//334 302//334 +f 359//335 361//335 74//335 302//335 +f 284//336 286//336 288//336 290//336 +f 289//337 287//337 285//337 291//337 +f 284//338 290//338 360//338 74//338 +f 361//339 291//339 285//339 74//339 +f 73//340 284//340 74//340 +f 74//341 285//341 73//341 +f 294//342 296//342 310//342 362//342 +f 311//343 297//343 295//343 363//343 +f 310//344 312//344 368//344 362//344 +f 369//345 313//345 311//345 363//345 +f 312//346 382//346 370//346 368//346 +f 371//347 383//347 313//347 369//347 +f 314//348 376//348 370//348 382//348 +f 371//349 377//349 315//349 383//349 +f 348//350 350//350 386//350 384//350 +f 387//351 351//351 349//351 385//351 +f 318//352 384//352 386//352 320//352 +f 387//353 385//353 319//353 321//353 +f 298//354 300//354 384//354 318//354 +f 385//355 301//355 299//355 319//355 +f 300//356 344//356 342//356 384//356 +f 343//357 345//357 301//357 385//357 +f 342//358 348//358 384//358 +f 385//359 349//359 343//359 +f 300//360 346//360 344//360 +f 345//361 347//361 301//361 +f 314//362 322//362 380//362 378//362 +f 381//363 323//363 315//363 379//363 +f 316//364 378//364 380//364 324//364 +f 381//365 379//365 317//365 325//365 +f 320//366 386//366 380//366 322//366 +f 381//367 387//367 321//367 323//367 +f 350//368 352//368 380//368 386//368 +f 381//369 353//369 351//369 387//369 +f 324//370 380//370 352//370 +f 353//371 381//371 325//371 +f 400//372 388//372 414//372 402//372 +f 415//373 389//373 401//373 403//373 +f 400//374 402//374 404//374 398//374 +f 405//375 403//375 401//375 399//375 +f 398//376 404//376 406//376 396//376 +f 407//377 405//377 399//377 397//377 +f 396//378 406//378 408//378 394//378 +f 409//379 407//379 397//379 395//379 +f 394//380 408//380 410//380 392//380 +f 411//381 409//381 395//381 393//381 +f 392//382 410//382 412//382 390//382 +f 413//383 411//383 393//383 391//383 +f 410//384 420//384 418//384 412//384 +f 419//385 421//385 411//385 413//385 +f 408//386 422//386 420//386 410//386 +f 421//387 423//387 409//387 411//387 +f 406//388 424//388 422//388 408//388 +f 423//389 425//389 407//389 409//389 +f 404//390 426//390 424//390 406//390 +f 425//391 427//391 405//391 407//391 +f 402//392 428//392 426//392 404//392 +f 427//393 429//393 403//393 405//393 +f 402//394 414//394 416//394 428//394 +f 417//395 415//395 403//395 429//395 +f 318//396 320//396 444//396 442//396 +f 445//397 321//397 319//397 443//397 +f 320//398 390//398 412//398 444//398 +f 413//399 391//399 321//399 445//399 +f 310//400 318//400 442//400 312//400 +f 443//401 319//401 311//401 313//401 +f 382//402 430//402 414//402 388//402 +f 415//403 431//403 383//403 389//403 +f 412//404 418//404 440//404 444//404 +f 441//405 419//405 413//405 445//405 +f 438//406 446//406 444//406 440//406 +f 445//407 447//407 439//407 441//407 +f 434//408 446//408 438//408 436//408 +f 439//409 447//409 435//409 437//409 +f 432//410 448//410 446//410 434//410 +f 447//411 449//411 433//411 435//411 +f 430//412 448//412 432//412 450//412 +f 433//413 449//413 431//413 451//413 +f 414//414 430//414 450//414 416//414 +f 451//415 431//415 415//415 417//415 +f 312//416 448//416 430//416 382//416 +f 431//417 449//417 313//417 383//417 +f 312//418 442//418 446//418 448//418 +f 447//419 443//419 313//419 449//419 +f 442//420 444//420 446//420 +f 447//421 445//421 443//421 +f 416//422 450//422 452//422 476//422 +f 453//423 451//423 417//423 477//423 +f 450//424 432//424 462//424 452//424 +f 463//425 433//425 451//425 453//425 +f 432//426 434//426 460//426 462//426 +f 461//427 435//427 433//427 463//427 +f 434//428 436//428 458//428 460//428 +f 459//429 437//429 435//429 461//429 +f 436//430 438//430 456//430 458//430 +f 457//431 439//431 437//431 459//431 +f 438//432 440//432 454//432 456//432 +f 455//433 441//433 439//433 457//433 +f 440//434 418//434 474//434 454//434 +f 475//435 419//435 441//435 455//435 +f 428//436 416//436 476//436 464//436 +f 477//437 417//437 429//437 465//437 +f 426//438 428//438 464//438 466//438 +f 465//439 429//439 427//439 467//439 +f 424//440 426//440 466//440 468//440 +f 467//441 427//441 425//441 469//441 +f 422//442 424//442 468//442 470//442 +f 469//443 425//443 423//443 471//443 +f 420//444 422//444 470//444 472//444 +f 471//445 423//445 421//445 473//445 +f 418//446 420//446 472//446 474//446 +f 473//447 421//447 419//447 475//447 +f 458//448 456//448 480//448 478//448 +f 481//449 457//449 459//449 479//449 +f 478//450 480//450 482//450 484//450 +f 483//451 481//451 479//451 485//451 +f 484//452 482//452 488//452 486//452 +f 489//453 483//453 485//453 487//453 +f 486//454 488//454 490//454 492//454 +f 491//455 489//455 487//455 493//455 +f 464//456 476//456 486//456 492//456 +f 487//457 477//457 465//457 493//457 +f 452//458 484//458 486//458 476//458 +f 487//459 485//459 453//459 477//459 +f 452//460 462//460 478//460 484//460 +f 479//461 463//461 453//461 485//461 +f 458//462 478//462 462//462 460//462 +f 463//463 479//463 459//463 461//463 +f 454//464 474//464 480//464 456//464 +f 481//465 475//465 455//465 457//465 +f 472//466 482//466 480//466 474//466 +f 481//467 483//467 473//467 475//467 +f 470//468 488//468 482//468 472//468 +f 483//469 489//469 471//469 473//469 +f 468//470 490//470 488//470 470//470 +f 489//471 491//471 469//471 471//471 +f 466//472 492//472 490//472 468//472 +f 491//473 493//473 467//473 469//473 +f 464//474 492//474 466//474 +f 467//475 493//475 465//475 +f 392//476 390//476 504//476 502//476 +f 505//477 391//477 393//477 503//477 +f 394//478 392//478 502//478 500//478 +f 503//479 393//479 395//479 501//479 +f 396//480 394//480 500//480 498//480 +f 501//481 395//481 397//481 499//481 +f 398//482 396//482 498//482 496//482 +f 499//483 397//483 399//483 497//483 +f 400//484 398//484 496//484 494//484 +f 497//485 399//485 401//485 495//485 +f 388//486 400//486 494//486 506//486 +f 495//487 401//487 389//487 507//487 +f 494//488 502//488 504//488 506//488 +f 505//489 503//489 495//489 507//489 +f 494//490 496//490 500//490 502//490 +f 501//491 497//491 495//491 503//491 +f 496//492 498//492 500//492 +f 501//493 499//493 497//493 +f 314//494 382//494 388//494 506//494 +f 389//495 383//495 315//495 507//495 +f 314//496 506//496 504//496 322//496 +f 505//497 507//497 315//497 323//497 +f 320//498 322//498 504//498 390//498 +f 505//499 323//499 321//499 391//499 diff --git a/include/mesh.h b/include/mesh.h new file mode 100644 index 0000000..55b2afd --- /dev/null +++ b/include/mesh.h @@ -0,0 +1,22 @@ +#pragma once + +#include +#include +#include +#include + +struct Vertex { + glm::vec3 position; +}; + +class Mesh { +public: + std::vector vertices; + std::vector indices; + + VkBuffer vertexBuffer = nullptr; + VkDeviceMemory vertexMemory = nullptr; + + VkBuffer indexBuffer = nullptr; + VkDeviceMemory indexMemory = nullptr; +}; diff --git a/include/renderer.h b/include/renderer.h index 99e25d2..5faeb8c 100644 --- a/include/renderer.h +++ b/include/renderer.h @@ -7,45 +7,52 @@ struct RenderTarget { VkSurfaceKHR surface = nullptr; VkSwapchainKHR swapchain = nullptr; - + VkExtent2D extent = {}; uint32_t numImages = 0; - + VkImage* images = nullptr; VkImageView* imageViews = nullptr; VkFramebuffer* framebuffers = nullptr; - + VkCommandBuffer* commandBuffers = nullptr; - + VkSemaphore imageAvailableSemaphore = nullptr; VkSemaphore renderFinishedSemaphore = nullptr; VkFence* fences = nullptr; }; +class World; +class Mesh; + class Renderer { public: Renderer(); ~Renderer(); - - void render(RenderTarget* target); - + + void render(World& world, RenderTarget* target); + RenderTarget* createSurfaceRenderTarget(VkSurfaceKHR surface, RenderTarget* oldRenderTarget = nullptr); void destroyRenderTarget(RenderTarget* target); - + VkShaderModule createShader(const char* path); - + + uint32_t findMemoryType(uint32_t typeFilter, VkMemoryPropertyFlags properties); + + void fillMeshBuffers(Mesh* mesh); + VkInstance getInstance() const { return instance_; } - + VkDevice getDevice() const { return device_; } - + VkRenderPass getRenderPass() const { return presentationRenderPass_; } - + private: void createInstance(); #ifdef DEBUG @@ -54,18 +61,18 @@ private: void createLogicalDevice(); void createCommandPool(); void createPresentationRenderPass(); - + VkInstance instance_ = nullptr; - + #ifdef DEBUG bool enableDebug = false; - + PFN_vkCreateDebugUtilsMessengerEXT createMessenger_ = nullptr; PFN_vkDestroyDebugUtilsMessengerEXT destroyMessenger_ = nullptr; - + VkDebugUtilsMessengerEXT messenger_ = nullptr; #endif - + VkPhysicalDevice physicalDevice_ = nullptr; VkDevice device_ = nullptr; @@ -74,10 +81,10 @@ private: } queueIndices; VkQueue graphicsQueue_ = nullptr; - + VkCommandPool commandPool_ = nullptr; - + VkRenderPass presentationRenderPass_ = nullptr; - + WorldPass* worldPass_ = nullptr; }; diff --git a/include/world.h b/include/world.h new file mode 100644 index 0000000..6c3c802 --- /dev/null +++ b/include/world.h @@ -0,0 +1,10 @@ +#pragma once + +#include + +class Mesh; + +class World { +public: + std::vector meshes; +}; diff --git a/include/worldpass.h b/include/worldpass.h index 028037e..258a08d 100644 --- a/include/worldpass.h +++ b/include/worldpass.h @@ -3,19 +3,20 @@ #include class Renderer; +class World; class WorldPass { public: WorldPass(Renderer& renderer); ~WorldPass(); - - void render(VkCommandBuffer commandBuffer); - + + void render(World& world, VkCommandBuffer commandBuffer); + private: void createPipeline(); - + VkPipelineLayout pipelineLayout_ = nullptr; VkPipeline pipeline_ = nullptr; - + Renderer& renderer_; }; diff --git a/shaders/triangle.vert b/shaders/triangle.vert index 87946fc..60d6fa4 100644 --- a/shaders/triangle.vert +++ b/shaders/triangle.vert @@ -1,11 +1,7 @@ #version 460 core -vec2 positions[3] = vec2[]( - vec2(0.0, -0.5), - vec2(0.5, 0.5), - vec2(-0.5, 0.5) -); +layout(location = 0) in vec3 inPosition; void main() { - gl_Position = vec4(positions[gl_VertexIndex], 0.0, 1.0); + gl_Position = vec4(inPosition, 1.0); } diff --git a/src/main.cpp b/src/main.cpp index afe52c7..5fd467c 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2,18 +2,24 @@ #include #include +#include +#include +#include + #include "renderer.h" #include "platform.h" +#include "world.h" +#include "mesh.h" SDL_Window* window = nullptr; std::vector platform::getRequiredExtensions() { uint32_t count = 0; SDL_Vulkan_GetInstanceExtensions(window, &count, nullptr); - + std::vector names(count); SDL_Vulkan_GetInstanceExtensions(window, &count, names.data()); - + return names; } @@ -25,37 +31,61 @@ int main(int, char*[]) { window = SDL_CreateWindow("Graph", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 640, 480, SDL_WINDOW_VULKAN | SDL_WINDOW_RESIZABLE); if(!window) return -1; - + Renderer* renderer = new Renderer(); - + VkSurfaceKHR surface = nullptr; SDL_Vulkan_CreateSurface(window, renderer->getInstance(), &surface); - + RenderTarget* target = renderer->createSurfaceRenderTarget(surface); - + + Assimp::Importer importer; + const aiScene* scene = importer.ReadFile("suzanne.obj", aiProcess_Triangulate); + + aiMesh* m = scene->mMeshes[0]; + Mesh* mesh = new Mesh(); + + for(unsigned int i = 0; i < m->mNumVertices; i++) { + Vertex vertex; + vertex.position = glm::vec3(m->mVertices[i].x, m->mVertices[i].y, m->mVertices[i].z); + + mesh->vertices.push_back(vertex); + } + + for(unsigned int i = 0; i < m->mNumFaces; i++) { + aiFace face = m->mFaces[i]; + for(unsigned int j = 0; j < face.mNumIndices; j++) + mesh->indices.push_back(face.mIndices[j]); + } + + renderer->fillMeshBuffers(mesh); + + World world; + world.meshes.push_back(mesh); + bool running = true; while(running) { SDL_Event event = {}; while(SDL_PollEvent(&event)) { if(event.type == SDL_QUIT) running = false; - + if(event.type == SDL_WINDOWEVENT) { if(event.window.event == SDL_WINDOWEVENT_RESIZED) target = renderer->createSurfaceRenderTarget(surface, target); } } - - renderer->render(target); + + renderer->render(world, target); } - + renderer->destroyRenderTarget(target); - + vkDestroySurfaceKHR(renderer->getInstance(), surface, nullptr); - + delete renderer; - + SDL_DestroyWindow(window); - + return 0; } diff --git a/src/renderer.cpp b/src/renderer.cpp index 94f7951..749af60 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp @@ -8,6 +8,7 @@ #include #include "platform.h" +#include "mesh.h" Renderer::Renderer() { createInstance(); @@ -40,7 +41,7 @@ Renderer::~Renderer() { vkDestroyInstance(instance_, nullptr); } -void Renderer::render(RenderTarget* target) { +void Renderer::render(World& world, RenderTarget* target) { uint32_t imageIndex = 0; vkAcquireNextImageKHR(device_, target->swapchain, UINT64_MAX, target->imageAvailableSemaphore, nullptr, &imageIndex); @@ -81,7 +82,7 @@ void Renderer::render(RenderTarget* target) { vkCmdBeginRenderPass(commandBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE); - worldPass_->render(commandBuffer); + worldPass_->render(world, commandBuffer); vkCmdEndRenderPass(commandBuffer); @@ -277,6 +278,75 @@ VkShaderModule Renderer::createShader(const char* path) { return shaderModule; } +uint32_t Renderer::findMemoryType(uint32_t typeFilter, VkMemoryPropertyFlags properties) { + VkPhysicalDeviceMemoryProperties memProperties; + vkGetPhysicalDeviceMemoryProperties(physicalDevice_, &memProperties); + + for (uint32_t i = 0; i < memProperties.memoryTypeCount; i++) { + if ((typeFilter & (1 << i)) && (memProperties.memoryTypes[i].propertyFlags & properties) == properties) { + return i; + } + } + + return 0; +} + +void Renderer::fillMeshBuffers(Mesh* mesh) { + // vertex + { + VkBufferCreateInfo bufferInfo = {}; + bufferInfo.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO; + bufferInfo.size = sizeof(Vertex) * mesh->vertices.size(); + bufferInfo.usage = VK_BUFFER_USAGE_VERTEX_BUFFER_BIT; + bufferInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE; + + vkCreateBuffer(device_, &bufferInfo, nullptr, &mesh->vertexBuffer); + + VkMemoryRequirements memRequirements; + vkGetBufferMemoryRequirements(device_, mesh->vertexBuffer, &memRequirements); + + VkMemoryAllocateInfo allocInfo = {}; + allocInfo.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO; + allocInfo.allocationSize = memRequirements.size; + allocInfo.memoryTypeIndex = findMemoryType(memRequirements.memoryTypeBits, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT); + + vkAllocateMemory(device_, &allocInfo, nullptr, &mesh->vertexMemory); + vkBindBufferMemory(device_, mesh->vertexBuffer, mesh->vertexMemory, 0); + + void* data; + vkMapMemory(device_, mesh->vertexMemory, 0, bufferInfo.size, 0, &data); + memcpy(data, mesh->vertices.data(), bufferInfo.size); + vkUnmapMemory(device_, mesh->vertexMemory); + } + + // index + { + VkBufferCreateInfo bufferInfo = {}; + bufferInfo.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO; + bufferInfo.size = sizeof(uint32_t) * mesh->indices.size(); + bufferInfo.usage = VK_BUFFER_USAGE_INDEX_BUFFER_BIT; + bufferInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE; + + vkCreateBuffer(device_, &bufferInfo, nullptr, &mesh->indexBuffer); + + VkMemoryRequirements memRequirements; + vkGetBufferMemoryRequirements(device_, mesh->indexBuffer, &memRequirements); + + VkMemoryAllocateInfo allocInfo = {}; + allocInfo.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO; + allocInfo.allocationSize = memRequirements.size; + allocInfo.memoryTypeIndex = findMemoryType(memRequirements.memoryTypeBits, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT); + + vkAllocateMemory(device_, &allocInfo, nullptr, &mesh->indexMemory); + vkBindBufferMemory(device_, mesh->indexBuffer, mesh->indexMemory, 0); + + void* data; + vkMapMemory(device_, mesh->indexMemory, 0, bufferInfo.size, 0, &data); + memcpy(data, mesh->indices.data(), bufferInfo.size); + vkUnmapMemory(device_, mesh->indexMemory); + } +} + void Renderer::createInstance() { uint32_t layerCount = 0; vkEnumerateInstanceLayerProperties(&layerCount, nullptr); diff --git a/src/worldpass.cpp b/src/worldpass.cpp index 87d3cfa..96903e5 100644 --- a/src/worldpass.cpp +++ b/src/worldpass.cpp @@ -3,6 +3,8 @@ #include #include "renderer.h" +#include "world.h" +#include "mesh.h" WorldPass::WorldPass(Renderer& renderer) : renderer_(renderer) { createPipeline(); @@ -13,9 +15,16 @@ WorldPass::~WorldPass() { vkDestroyPipelineLayout(renderer_.getDevice(), pipelineLayout_, nullptr); } -void WorldPass::render(VkCommandBuffer commandBuffer) { +void WorldPass::render(World& world, VkCommandBuffer commandBuffer) { vkCmdBindPipeline(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline_); - vkCmdDraw(commandBuffer, 3, 1, 0, 0); + + for(const auto& mesh : world.meshes) { + VkDeviceSize offsets[] = {0}; + vkCmdBindVertexBuffers(commandBuffer, 0, 1, &mesh->vertexBuffer, offsets); + vkCmdBindIndexBuffer(commandBuffer, mesh->indexBuffer, 0, VK_INDEX_TYPE_UINT32); + + vkCmdDrawIndexed(commandBuffer, mesh->indices.size(), 1, 0, 0, 0); + } } void WorldPass::createPipeline() { @@ -27,64 +36,72 @@ void WorldPass::createPipeline() { vertShaderStageInfo.stage = VK_SHADER_STAGE_VERTEX_BIT; vertShaderStageInfo.module = vertShaderModule; vertShaderStageInfo.pName = "main"; - + VkPipelineShaderStageCreateInfo fragShaderStageInfo = {}; fragShaderStageInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO; fragShaderStageInfo.stage = VK_SHADER_STAGE_FRAGMENT_BIT; fragShaderStageInfo.module = fragShaderModule; fragShaderStageInfo.pName = "main"; - + const std::array shaderStages = {vertShaderStageInfo, fragShaderStageInfo}; - + + VkVertexInputBindingDescription vertexBindingDescription = {}; + vertexBindingDescription.stride = sizeof(Vertex); + + VkVertexInputAttributeDescription positionAttributeDescription = {}; + positionAttributeDescription.format = VK_FORMAT_R32G32B32_SFLOAT; + VkPipelineVertexInputStateCreateInfo vertexInputInfo = {}; vertexInputInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO; - vertexInputInfo.vertexBindingDescriptionCount = 0; - vertexInputInfo.vertexAttributeDescriptionCount = 0; - + vertexInputInfo.vertexBindingDescriptionCount = 1; + vertexInputInfo.pVertexBindingDescriptions = &vertexBindingDescription; + vertexInputInfo.vertexAttributeDescriptionCount = 1; + vertexInputInfo.pVertexAttributeDescriptions = &positionAttributeDescription; + VkPipelineInputAssemblyStateCreateInfo inputAssembly = {}; inputAssembly.sType = VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO; inputAssembly.topology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST; - + VkPipelineViewportStateCreateInfo viewportState = {}; viewportState.sType = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO; viewportState.viewportCount = 1; viewportState.scissorCount = 1; - + VkPipelineRasterizationStateCreateInfo rasterizer = {}; rasterizer.sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO; - rasterizer.polygonMode = VK_POLYGON_MODE_FILL; + rasterizer.polygonMode = VK_POLYGON_MODE_FILL; rasterizer.lineWidth = 1.0f; rasterizer.cullMode = VK_CULL_MODE_BACK_BIT; rasterizer.frontFace = VK_FRONT_FACE_CLOCKWISE; - + VkPipelineMultisampleStateCreateInfo multisampling = {}; multisampling.sType = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO; multisampling.rasterizationSamples = VK_SAMPLE_COUNT_1_BIT; - + VkPipelineColorBlendAttachmentState colorBlendAttachment = {}; colorBlendAttachment.colorWriteMask = VK_COLOR_COMPONENT_R_BIT | VK_COLOR_COMPONENT_G_BIT | VK_COLOR_COMPONENT_B_BIT | VK_COLOR_COMPONENT_A_BIT; colorBlendAttachment.blendEnable = VK_FALSE; - + VkPipelineColorBlendStateCreateInfo colorBlending = {}; colorBlending.sType = VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO; colorBlending.attachmentCount = 1; colorBlending.pAttachments = &colorBlendAttachment; - + const std::array dynamicStates = { VK_DYNAMIC_STATE_VIEWPORT, VK_DYNAMIC_STATE_SCISSOR }; - + VkPipelineDynamicStateCreateInfo dynamicState = {}; dynamicState.sType = VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO; dynamicState.dynamicStateCount = dynamicStates.size(); dynamicState.pDynamicStates = dynamicStates.data(); - + VkPipelineLayoutCreateInfo pipelineLayoutInfo = {}; pipelineLayoutInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO; - + vkCreatePipelineLayout(renderer_.getDevice(), &pipelineLayoutInfo, nullptr, &pipelineLayout_); - + VkGraphicsPipelineCreateInfo pipelineInfo = {}; pipelineInfo.sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO; pipelineInfo.stageCount = shaderStages.size(); @@ -98,9 +115,9 @@ void WorldPass::createPipeline() { pipelineInfo.pDynamicState = &dynamicState; pipelineInfo.layout = pipelineLayout_; pipelineInfo.renderPass = renderer_.getRenderPass(); - + vkCreateGraphicsPipelines(renderer_.getDevice(), nullptr, 1, &pipelineInfo, nullptr, &pipeline_); - + vkDestroyShaderModule(renderer_.getDevice(), fragShaderModule, nullptr); vkDestroyShaderModule(renderer_.getDevice(), vertShaderModule, nullptr); }