This commit is contained in:
root
2025-11-19 20:11:18 +05:00
commit ec9e591040
11 changed files with 943 additions and 0 deletions

182
README_WINDOWS.md Normal file
View File

@@ -0,0 +1,182 @@
# 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.