Решение задания по университетскому курсу компьютерной графики. Полный текст задания: текст задания.
Решение написано на C++ (C++23). Нужны компилятор (g++ или clang), CMake не ниже 3.10 и GLFW 3.3+.
Сборка (из корня проекта):
cmake -S . -B build
cmake --build build -jПо умолчанию собирается Release (-O3 -march=native). Для отладки
соберите отдельную Debug-версию в другую папку:
cmake -S . -B build_debug -DCMAKE_BUILD_TYPE=Debug
cmake --build build_debug -jИзмерять скорость растеризатора имеет смысл только в Release-сборке.
Сборка CMake(из корня проекта):
cmake --build build -j --config Release./build/main-cli [mesh.obj] [texture.png|jpg] [output.png]Загружает меш, применяет к нему текстуру (при наличии), рендерит сцену, состоящую из этого меша и после сохраняет изображение в указанный файл.
./build/main-app <width> <height>Открывает окно и каждый кадр и рендерит сцену в реальном времени состояющую из нескольких подвижных объектов. Выводит в стандартный поток вывода FPS, а также время затраченное на вывод изображения и сам процесс растеризации.
Соглашения
- Система координат: правая.
- Хранение матриц: по строкам.
- Векторы: столбцы; преобразование выполняется как v' = M * v.
- Порядок преобразований: clip = P * V * M * position, где M — матрица модели, V — матрица вида, P — матрица проекции.
- Камера: смотрит вдоль отрицательной оси Z.
- Координаты изображения: начало в левом нижнем углу кадрового буфера, X направлена вправо, Y — вверх.
- Границы текстуры: используется повторение текстуры.
| Клавиша | Режим работы |
|---|---|
| 0 | Освещение по ламберту |
| 1 | Отображение цветов |
| 2 | Отображение нормалей |
| 3 | Отображение глубины |
| 4 | Отображение текстурных координат |