183 lines
6.7 KiB
Markdown
183 lines
6.7 KiB
Markdown
# 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.
|