- ЛР2 - ЛР7 + КП написаны на C++17. Если версия
g++
или другого вашего компилятора не поддерживает этот язык, то необходимо будет установитьgcc-7
иg++-7
или более новые версии. - Скачайте репозиторий при помощи
git clone
или любым другим удобным способом. - Для ЛР 1 необходимо установить библиотеки
matplotilib, tkinter, numpy
. - Для ЛР 2, ЛР 3 и ЛР 7 - SFML. На Ubuntu это можно сделать при помощи команды
sudo apt install libsfml-dev
. - Для ЛР 4-5 и ЛР 6 потребуются
glad, glfw, glm
. Ниже опишу способ, как я устанавливал эти библиотеки.
- Узнать версию OpenGL и GLSL при помощи
glxinfo | grep "OpenGL"
. Вывод команды будет выглядеть следующим образом:
Поддерживаемая версия OpenGL указана после слов "OpenGL version string" (в данном примере 4.6) Версия GLSL указана после слов "OpenGL shading language version string" (в данном примере 4.60)
- Перейти на сайт https://glad.dav1d.de/ и указать в разделе API версию gl.
- Нажать на кнопку "Generate" и скачать архив.
- Создать директорию
/usr/include/glad
и поместить в неё файлыglad.h
иglad.c
из архива. - Заменить файл в директории
/usr/include/KHR
(если такая есть, если нет - создать) файлом из папки KHR в архиве.
sudo apt install libglfw3-dev
sudo apt install libglm-dev
- Для КП потребуются
glad, glfw, glm, ImGUI
.
Нужные файлы ImGUI уже содержатся в директории с курсовой работой в папке imgui
. Вы также можете скачать один из последних релизов с официального гитхаб-аккаунта разработчика.
Внимание! Если версия GLSL не совпадает с моей (450), то необходимо в файле main.cpp
в строке const char *glsl_version = "#version 450"
указать нужную версию. Список доступных версий есть в начале файла imgui/imgui_impl_opengl3.cpp
.
- Если версия OpenGL меньше 4.5, то в ЛР 4-5, ЛР 6 и КП в файле
main.cpp
будет необходимо заменить вызовы функций
glNamedBufferData(VBO1, vertices.size() * sizeof(float), vertices.data(), GL_DYNAMIC_DRAW);
glNamedBufferData(EBO1, indices.size() * sizeof(unsigned), indices.data(), GL_DYNAMIC_DRAW);
на
glBindBuffer(GL_ARRAY_BUFFER, VBO1);
glBufferData(GL_ARRAY_BUFFER, vertices.size() * sizeof(float), vertices.data(), GL_DYNAMIC_DRAW);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO1);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, indices.size() * sizeof(unsigned), indices.data(), GL_DYNAMIC_DRAW);
- Если версия GLSL отличается от моей, то необходимо в каждом из файлов в директории
shaders
в первой строке указать вашу версию. - Если версия CMake ниже 3.17, то необходимо в файле
CMakeLists.txt
в строкеcmake_minimum_required(VERSION 3.17)
указать вашу версию (cmake --version
). - Если при компиляции появляются ошибки, связанные с санитайзером, то попросту уберите из флагов компиляции в CMakeLists.txt строки
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fno-omit-frame-pointer -fsanitize=address,undefined")
set(CMAKE_LINKER_FLAGS_DEBUG "${CMAKE_LINKER_FLAGS_DEBUG} -fno-omit-frame-pointer -fsanitize=address")
- В зависимости от того, как вы собираете проект, исполняемый файл может находится как в директории с исходниками, так и в директории
cmake-build-debug
или подобной. Это может привести к возникновению ошибки с загрузкой шейдеров в ЛР 4-5, 6, КП. Вmain.cpp
вызывается исключение с сообщением
std::cout << "Failed to open file " << filename << '\n';
std::cout << "If such an error occurs, check executable file path and\n";
std::cout << "set shaders files path relatively to it" << std::endl;
Если исполняемый файл лежит в одной директории с файлом main.cpp
, то можно в коде main.cpp
прописать правильные пути к файлам шейдеров, либо же добавить в CMakeLists.txt после строки add_executable(${PROJECT_NAME} ${SOURCES})
строку
set_target_properties(${PROJECT_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${SRC_DIR})
Написана на C++
. Для работы с графикой использовал OpenGL
, функции загружал при помощи glad
. Для работы с окнами использовал GLFW
, для математики - GLM
. Для пользовательского интерфейса использовал ImGui
.
Написана на Python
. Для совмещения виджетов с графиком использовал Tkinter
. Сам график рисовал при помощи Matplotlib
. Numpy
использовал для математики.
Написана на C++
. Для работы с окнами использовал GLFW
. API для настройки различных буферов, очередей и работы с железом - Vulkan
. GLM
использовал для математики.
Написана на C++
. Для работы с графикой использовал SFML
. Решил переписать с нуля, так как в предыдущей реализации была хрень.
Написана на C++
. Для работы с графикой использовал SFML
. Свет вычисляется как комбинация ambient, diffuse, specular.
Написана на C++
. Для работы с графикой использовал OpenGL
, функции загружал при помощи glad
. Для работы с окнами использовал GLFW
, для математики - GLM
.
Написана на C++
. Для работы с графикой использовал OpenGL
, функции загружал при помощи glad
. Для работы с окнами использовал GLFW
, для математики - GLM
. Фигура растягивается, у неё и источника света динамически меняется цвет.
Написана на C++
. Для работы с окнами и графическими примитивами использовал SFML
. Также написал пару своих примитивов - Checkbox и Button.