# OBJ Viewer с Шейдерами Программа для просмотра 3D моделей в формате OBJ с поддержкой различных шейдеров и интерактивного управления. ## Возможности - Загрузка и отображение 3D моделей в формате OBJ - 5 встроенных шейдеров с переключением в реальном времени - Интерактивное управление камерой (вращение, масштабирование) - Визуализация неба с настраиваемыми параметрами - Каркасный режим (wireframe) - Вывод цветовых значений в консоль ## Шейдеры 1. **Phong** - классическое освещение с ambient, diffuse и specular компонентами 2. **Toon** - мультяшный стиль с дискретными уровнями освещения 3. **Normal** - визуализация нормалей как RGB цветов 4. **Wireframe** - зеленоватый каркасный стиль 5. **Sky** - визуализация неба с параметрами высоты, угла солнца и интенсивности ## Установка для Windows ### Требования - MinGW-w64 или Visual Studio - GLEW - GLUT (freeglut) - GLM ### Установка зависимостей (MinGW) 1. Скачайте и установите [MinGW-w64](https://www.mingw-w64.org/) 2. Скачайте библиотеки: - [GLEW](http://glew.sourceforge.net/) - OpenGL Extension Wrangler - [freeglut](http://freeglut.sourceforge.net/) - GLUT для Windows - [GLM](https://github.com/g-truc/glm) - OpenGL Mathematics (header-only) 3. Распакуйте библиотеки и скопируйте файлы: ``` GLEW: - glew32.dll -> C:\Windows\System32\ - glew32.lib -> C:\mingw64\lib\ - include\GL\* -> C:\mingw64\include\GL\ freeglut: - freeglut.dll -> C:\Windows\System32\ - freeglut.lib -> C:\mingw64\lib\ - include\GL\* -> C:\mingw64\include\GL\ GLM: - glm\* -> C:\mingw64\include\glm\ ``` ### Компиляция Откройте командную строку (cmd) в папке с проектом и выполните: ```bash g++ obj_viewer_shader.cpp -o obj_viewer_shader.exe -lopengl32 -lglu32 -lfreeglut -lglew32 -std=c++11 ``` Или используйте MinGW-w64: ```bash g++ obj_viewer_shader.cpp -o obj_viewer_shader.exe -lglu32 -lglew32 -lfreeglut -lopengl32 -std=c++11 ``` ### Запуск ```bash obj_viewer_shader.exe model.obj ``` Или просто запустите без параметров - программа попросит ввести путь к файлу: ```bash obj_viewer_shader.exe ``` ## Управление ### Мышь - **Левая кнопка** - вращение модели - **Правая кнопка** - приближение/отдаление ### Клавиатура #### Переключение шейдеров - **1** - Phong (классическое освещение) - **2** - Toon (мультяшный стиль) - **3** - Normal (нормали) - **4** - Wireframe - **5** - Sky (небо) #### Параметры неба (для шейдера Sky) - **h/H** - уменьшить/увеличить высоту (±500м) - **e/E** - уменьшить/увеличить угол солнца (±0.05 рад) - **i/I** - уменьшить/увеличить интенсивность света (±0.05) - **P** - вывести текущий цвет неба в консоль #### Прочее - **W** - включить/выключить каркасный режим - **ESC** - выход из программы ## Структура проекта ``` project/ ├── obj_viewer_shader.cpp # Основной файл программы ├── vertex_shader.glsl # Вершинный шейдер (общий) ├── fragment_shader.glsl # Phong шейдер ├── toon_fragment.glsl # Toon шейдер ├── normal_fragment.glsl # Normal шейдер ├── wireframe_fragment.glsl # Wireframe шейдер ├── sky_vertex.glsl # Вершинный шейдер для неба ├── sky.frag # Фрагментный шейдер неба └── model.obj # Ваша 3D модель ``` ## Формат OBJ Программа поддерживает стандартные OBJ файлы с: - Вершинами (v) - Нормалями (vn) - Текстурными координатами (vt) - Гранями (f) - треугольники и квады ## Пример вывода цвета неба ``` === ЦВЕТ НЕБА === Параметры: height: 5000 sunElevation: 0.5 sunIntensity: 0.8 Результат (RGB): 0.51 0.64 0.82 ``` ## Создание своих шейдеров Чтобы добавить собственный шейдер: 1. Создайте файл фрагментного шейдера (например, `my_shader.glsl`) 2. Откройте `obj_viewer_shader.cpp` 3. Найдите функцию `init()` и добавьте в массив `shaders`: ```cpp {"Мой шейдер", "vertex_shader.glsl", "my_shader.glsl"} ``` 4. Перекомпилируйте программу ## Troubleshooting ### Ошибка "не удалось найти DLL" Убедитесь, что `glew32.dll` и `freeglut.dll` находятся в `C:\Windows\System32\` или в папке с программой. ### Ошибка компиляции "cannot find -lglew32" Проверьте, что библиотеки установлены в `C:\mingw64\lib\` ### Черный экран Проверьте, что файлы шейдеров (`.glsl`, `.frag`) находятся в той же папке, что и исполняемый файл. ### Модель не загружается - Проверьте путь к OBJ файлу - Убедитесь, что файл в правильном формате OBJ - Используйте относительные пути или полные пути с двойными слешами: `C:\\path\\to\\model.obj` ## Системные требования - Windows 7/8/10/11 - OpenGL 3.3+ - Видеокарта с поддержкой шейдеров GLSL 330 ## Лицензия Свободное использование в образовательных целях. ## Автор Создано для работы с 3D моделями и изучения шейдеров GLSL.