Files
render/README_WINDOWS.md
2025-11-19 20:11:18 +05:00

183 lines
6.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.