Приложение для визуализации и управления трёхмерной полигональной моделью (кубом) с использованием Windows API и GDI+.
Проект реализует полный цикл 3D-конвейера "с нуля": от математических преобразований вершин до алгоритмов растеризации и удаления невидимых граней. Данная лабораторная работа выполнена в рамках дисциплины «Компьютерная графика» 🎓.
Скачать готовую программу можно в разделе Releases.
- Аффинные преобразования:
↔️ Перемещение (Translate) по осям X, Y, Z.- 🔄 Вращение (Rotate) вокруг осей X, Y, Z.
- 🔍 Масштабирование (Scale).
- Рендеринг:
- Удаление невидимых граней (Back-face culling) через проверку нормали и вектора взгляда.
- Алгоритм закраски граней (Scan-line algorithm / Метод сканирующей строки).
- Проекция перспективы.
- Язык: C++
- Графика: GDI+ (Gdiplus.h)
- Интерфейс: Pure WinAPI (без использования MFC/Qt)
- Среда разработки: Visual Studio
Important
Для полного понимания того, как устроена компьютерная графика, архитектура проекта исключает использование готовых решений (OpenGL, DirectX и прочие 3D-движки).
Graphics Device Interface+ используется исключительно как низкоуровневый инструмент для вывода 2D-примитивов, а вся сложная логика 3D-преобразований и рендеринга реализована самостоятельно (рукописно).
Используется метод проверки нормали. Для каждой грани вычисляется вектор нормали через векторное произведение сторон. Если угол между нормалью и вектором обзора камеры меньше 90 градусов (скалярное произведение < 0), грань отбрасывается и не рисуется.
Для отрисовки граней используется метод сканирующей строки (Scan-line).
- Проекция вершин переводится в экранные координаты.
- Определяются границы (minY, maxY).
- Для каждой строки сканирования находятся точки пересечения со сторонами многоугольника.
- Пространство между парами пересечений заливается цветом.
Проект включает Makefile для автоматизации сборки. Требуется установленный компилятор GCC (например, MSYS2) и утилита make.
- Откройте терминал в папке проекта.
- Выполните команду:
make run
Собранное приложение можно найти по пути build/app.exe. После запуска проекта клонированный репозиторий можно очистить от компиляционных файлов с помощью команды make clean.
- Откройте Visual Studio и выберите "Create a new project from existing code" или просто создайте пустой C++ проект.
- Добавьте все файлы из директории
src/в проект. - Убедитесь, что библиотека
gdiplus.libподключена (Project Properties -> Linker -> Input -> Additional Dependencies). - Скомпилируйте и запустите (F5).
3d-polyhedron-rasterizer/
├── assets/ # Статические ресурсы
│ ├── demo.gif # Gif-изображение, демонстрация работы программы
│ └── icon.ico # Иконка приложения
│
├── build/ # Папка сборки (создается автоматически)
│ ├── app.exe # Скомпилированное приложение
│ └── ... # Объектные файлы (.o) и ресурсы (.res)
│
├── src/ # Исходный код проекта
│ ├── main.cpp # Точка входа (WinMain)
│ ├── MainWindow.cpp/h # Класс окна, обработка сообщений и ввода
│ ├── Wireframe.cpp/h # Класс модели: математика, проекция, отрисовка
│ ├── Point3D.h # Структура точки в трехмерном пространстве
│ └── resource.rc/h # Скрипт ресурсов Windows (подключение иконки)
│
├── .gitignore # Настройки для игнорирования файлов в Git (временные файлы, кэши)
├── LICENSE # Лицензия MIT
├── Makefile # Сценарий сборки для make (GCC/MinGW)
└── README.md # Документация
