Я не написал мэйкфайл, потому что я пока не дучил CMake и вообще он выглядит не оч... Когда-нибудь займусь вопросом.
Итак, для начала вам понадобится установить себе некоторые библиотеки, а именно
- GLFW https://www.glfw.org/download - создание окна вам нужны скомпилированные бинарники
- glm https://github.com/g-truc/glm.git - мотематика
- VulkanSDK https://vulkan.lunarg.com/ - Вулкан(графический API) качаем с инстоллера
- tinyobjloader https://github.com/tinyobjloader/tinyobjloader.git - однофайловая ютилити для загрузки моделей
- stb https://github.com/nothings/stb.git - однофайловая ютилити для загрузки текстур из картинок(png)
- Eigen https://eigen.tuxfamily.org/index.php?title=Main_Page - для математики с матрицами )
Когда вы все это скачали нужно это все подключить. Я делаю в Visual studio, вы хз как будете, если через CMake гуд лак, я не такой умный.
Создаем проект с терминалом(который обычно делаем).
Шаг 1.
В Visual studio нажимаем на проект, затем либо 'Alt + enter' либо пкм и в самый низ.
Шаг 2.
В основном разделе меняем версию плюсов на последнюю (я выбрал 2020, хотя, конечно, есть еще незаконченная 2023).
Шаг 3.
В разделе основное добавляем все вышеперечисленные библиотеки. (у вас, естественно будут другие пути)
- C:\VulkanSDK\1.3.250.0\Include
- D:\dev\includes\glm
- D:\dev\includes\glfw-3.3.8.bin.WIN64\include
- D:\dev\vendor\tinyobjloader
- D:\dev\vendor\stb
Шаг 4.
В разделе линковщика, основное, добавляем двa пути к либам.
- D:\dev\includes\glfw-3.3.8.bin.WIN64\lib-vc2022
- C:\VulkanSDK\1.3.250.0\Lib
Шаг 5.
В разделе линковщика, основное, добавляем непосредственно сами эти библиотеки.
- vulkan-1.lib
- glfw3.lib
Шаг 6.
Наконец в разделе с Build events добавляем фигню чтобы каждый раз при билде перекомпилировались шейдеры.
В целом основные изменения делать в классе Application в функции run или loadGameObjects.
Можно менять очень легко проекцию, например. Просто при создании камеры поставить setPerspectiveProjection/setOrthographicProjection. Остальное придумывайте сами, я не знаю что можно поменять настолько же просто.
Создание объектов в функции loadGameObjects в классе Application