HTTPS SSH

AV Orchid

v.2.8.4

Набор учебных примеров, использующих FreeGlut, GLEW, OpenGL (wiki), OpenMP. Примеры не "заточены" на графические технологии (как правило, используется минимальный OpenGL 1.1).

Примеры не зависят друг от друга. Принцип DRY нарушается, чтобы упростить общую структуру.

Примеры значительно различаются по сложности.

Разрабатывается в MSVC2013. Теоретически код является кроссплатформенным (требует уровень поддержки C++11 не ниже MSVC2013), однако это не проверялось.

Альтернативы FreeGlut (все перечисленные библиотеки являются кроссплатформенным открытым ПО):

  • практически прямая альтернатива GLFW не обременена багажом совместимости с GLUT; недостаток: позволяет создать только одно окно и один контекст OpenGL.
  • более развитая (но всё же относительно небольшая) объектно-ориентированная C++ библиотека SFML.
  • более низкоуровневая и развитая библиотека SDL, также предоставляет средства вывода звука.

Для работы с 2-3-4-мерными векторами, матрицами и кватернионами хорошие возможности предоставляет C++ библиотека GLM, которая имитирует GLSL.

Для автоматической генерации документации по исходному коду рекомендуется использовать Doxygen. Пример -- Zmeika.

Состав

Include/Source/Lib

Вспомогательные файлы (файлы сторонних библиотек включены в сборку).

BasicFrame

Каркас FreeGlut-приложения.

Pixels

Демонстрация вывода произвольной пиксельной графики средствами OpenGL.

GLPrimitives

Демонстрация различных геометрических примитивов OpenGL 1.x, а также моделей затенения flat и smooth.

GLPrimitivesVA

Аналог GLPrimitives, использующий массивы вершин вместо glBegin/glEnd.

GLPrimitivesVB

Аналог GLPrimitivesVA, использующий буфер в памяти GPU для размещения массивов вершин (в духе OpenGL 1.5).

Plasma

Эффект "плазмы". Демонстрирует использование табличных функций (без интерполяции).

Collision2D

Симуляция движения и столкновения двух тяжёлых кружков в плоскости. Кружки можно перетаскивать мышью.

Collision3D

Симуляция движения и столкновения тяжёлых шаров в пространстве. Шары притягиваются друг к другу под действием классического закона тяготения.

ColorClock

Часы.

Snow2D

Рисует падающий цветной "снег".

GLSLPlasma

Эффект плазмы, реализованный в виде пиксельного шейдера GLSL, требует поддержки OpenGL 2.0 для запуска (GLSL 1.10). Файлы с пиксельными шейдерами имеют названия вида d.glsl.frag, где d -- цифра. Переключение в программе выполняется нажатием соответствующей цифры.

Manipulator

Имитация движения манипулятора.

PencilPaleo

Упрощённый вариант Pencil (см. ниже).

Pencil

В примере пользователь может рисовать белым "карандашом" на чёрном "холсте" с помощью мыши (зажимая левую кнопку). Реализация игры "Жизнь" Джона Конвея.

APlot2D

Рисование графиков на плоскости, заданных парами функций (x(t), y(t)) для t из заданных отрезков.

BPlot2D

Визуализация индикаторных функций множеств на плоскости. Базируется на APlot2D и GLSLPlasma. Требует поддержки OpenGL 2.1 (GLSL 1.20).

CPlot2D

Визуализация графиков в параллельном потоке (одновременно с процессом порождения узлов графика).

FIRFilter

Визуализация работы КИХ-фильтра (в данном случае -- операции численного дифференцирования сигнала по пяти последним узлам).

GLUPoly

Демонстрация использования GLU для триангуляции многоугольников.

SortVis

Визуализатор различных алгоритмов сортировки.

AStarVis

Визуализатор алгоритма поиска на графе A*. Генерирует ландшафт на основе псевдослучайной карты высот.

Zmeika

Игра "Змейка".

Более подробные описания размещены в вики проекта.