Вакансии для программистов

GLSpace: 3D движок на Open GL

Инструкция по эксплуатации.

1. Введение.

GLSpace – тестовая программа, показывающая возможности простейшего 3D движка с управлением клавиатурой и мышью. В программе реализованы несколько типов управления сценой. Для создания сцены используется процедурная генерация ландшафта по ключевым точкам с дальнейшей интерполяцией поверхности. Интерфейс позволяет использовать разные режимы отображения поверхности. Изначально программа планировалась как симулятор велодорожки. В исходный, сгенерированный ранее ландшафт, встраивается поверхность дороги, математически связанная с ландшафтом. Дорога встраивается бесшовно и ее профиль зависит от изначального ландшафта. Так же дорога имеет наклон, оптимальный для определенной скорости движения.

GLSpace имеет несколько вариантов реализации под различные платформы:

  • Windows, С++, на основе Win32API, расширенный интерфейс. Скачать
  • Fedora, С++, на основе GTK+ 3 без кнопок.
  • Java, Windows/Linux, на основе AWT и JOGL2
  • Java, Android, упрощенный интерфейс.

2. Описание интерфейса.

2.1 Диалог настроек.

Norm Type – типы используемых нормалей.

  • Face – нормали привязаны к полигонам. Каждый полигон освещен равномерно.
  • Vertice – нормали привязаны к углам полигона. Полигон освещен плавно, в зависимости от положения нормалей.

Norm Calc – способ вычисления нормалей.

  • Surface – нормаль вычисляется аналитически, исходя из интерполяции поверхности ландшафта.
  • Avg – нормаль вычисляется без учета функции поверхности ландшафта. Учитываются нормали к пограничным полигонам и вычисляется средний вектор нормали.

Mesh Type

  • TruSqure – поверхность основана на заполнении прямоугольной области треугольными полигонами. Область ландшафта прямоугольная с зубчатым краем. Текстуры — трава.
  • Squared – поверхность формируется из квадратных полигонов, разбивающихся на треугольники в центральной точке. Используются текстуры с шахматным рисунком для определения границ полигона и точного позиционирования.
  • Hexagon – поверхность формируется из шестиугольника и рекурсивно делится на треугольники. Используются текстуры с шахматным рисунком для определения границ полигона и точного позиционирования.

View – кнопка запуска генерации поверхности. Генерируется указанная в Mesh Type поверхность. При повторном нажатии на кнопку однажды сгенерированная поверхность уже находится в памяти. При изменении Mesh Type генерируется новая поверхность, если она еще не была сгенерирована. При этом формула поверхности остается постоянной для всех типов генерируемых поверхностей, что позволяет сравнить поверхности только с учетом алгоритма триангуляции поверхности. После генерации поверхности программа переходит к окну отображения поверхности.

2.2 Диалог отображения.

Hide – сокрытие элементов управления. Восстанавливается по нажатию клавиши 'H', 'h'

Control – режим управления мышью и клавиатурой.

  • Ride – режим поездки.
  • Fly – режим полёта.
  • Move – полёт в направлении курсора.
  • Ball – режим управления всей сценой.

Output – режим вывода элементов. Визуальный эффект отсутствует.

  • List – вывод при помощи списков
  • Faces – вывод каждого полигона по отдельности.

Autopilot – автопилот для режима поездки по дороге. Камера удерживается в пределах дороги. По умолчанию включен. При выключенном автопилоте можно ездить по всей карте. При включении камера постепенно, принудительно возвращается на дорогу.

Edges – отображение только ребер. По умолчанию выключено.

Normals – показать нормали. По умолчанию выключено.

Textures – заполнять поверхность текстурами. По умолчанию включено. При отключении сцена использует белый цвет вместо текстур.

Light – включить/выключить источник освещения. По умолчанию включено. При выключенном источнике освещения и при отображении ребер поверхности зеленым цветом выделены ребра границы врезки дороги.

Wires – наложение дополнительного отображения ребер поверхности поверх текстур. По умолчанию выключено. Ребра текстурированы.

TextFill – заполнение текстурами полигонов при включенном режиме Wires. По умолчанию включено.

Prefs – возврат в диалог настроек.

2.3.1 Управление с клавиатуры.

  • 'H', 'h': сокрытие элементов управления.
  • 'C', 'c': режим управления мышью и клавиатурой.
  • 'P', 'p': автопилот для режима поездки по дороге.
  • 'E', 'e': Отображение только ребер.
  • 'T', 't': заполнять поверхность текстурами.
  • 'N', 'n': показать нормали.
  • 'O', 'o': режим вывода элементов. Визуальный эффект отсутствует.
  • 'L', 'l': включить/выключить источник освещения.
  • 'Z', 'z': наложение дополнительного отображения ребер поверхности поверх текстур.
  • 'X', 'x': Заполнение текстурами полигонов при включенном режиме Wires
  • '{', '[': Сменить поверхность на следующую в списке сгенерированных.
  • '}', ']': Сменить поверхность на предыдущую в списке сгенерированных.
  • Esc: Выход из программы.

В режиме Ride:

  • 'W', 'w', Стрелка “Вверх”: разгон.
  • 'S', 's', Стрелка “Вниз”: торможение.

В режиме Fly, Move:

  • 'W', 'w': разгон.
  • 'S', 's': торможение.

В режиме Ball:

  • 'W', 'w': перемещение вперед.
  • 'S', 's': перемещение назад.

В режиме Fly, Move, Ball:

  • 'D', 'd': крен против часовой стрелки.
  • 'A', 'a': крен по часовой стрелке.

2.3.2 Управление мышью.

В режиме Ride:

  • Указатель: вправо или влево. Правее или левее по дороге в режиме автопилота.
  • Колесо (вперед/назад): разгон/торможение.

В режиме Fly:

  • Указатель: самолетное управление. Указатель на себя(вниз) — тангаж вверх, указатель от себя (вврех) — тангаж вниз. Указатель вправо/влево — крен вправо/влево. При небольшом расстоянии указателя от центра происходит поворот(рысканье) вправо/влево.
  • Колесо (вперед/назад): разгон/торможение.

В режиме Move:

  • Указатель: вектор скорости совпадает с курсором. Курсор фиксирован в центре.
  • Колесо (вперед/назад): разгон/торможение.

В режиме Ball:

  • Указатель: движение вокруг центра поворота. Взгляд всегда направлен на центр поворота.
  • Колесо (вперед/назад): приблизиться/удалиться от центра поворота. Радиус поворота изменяется.

3. Режимы отображения.

Normal mode

Скриншот для параметров отображения по умолчанию в режиме Fly (полёт).



Edgs on

Включение отображения ребер поверхности при включенном источнике света.



Normals on

Включение отображения нормалей к поверхности.



No textures

Отключение текстурирования поверхности при включенном освещении.



No light

Отключение освещения делает все полигоны одинаково освещенными, что делает всю сцену «плоской».



Wires on

Наложение ребер на поверхность. Ребра текстурированы.



Wires are not filled

Наложение ребер на поверхность. Ребра текстурированы. Отключение заполнения текстур.



Wires without textures

Наложение ребер на поверхность при отключенных текстурах.



Wires without textures and light

Наложение ребер на поверхность при отключенных текстурах и выключенном освещении. Все полигоны освещены равномерно, границы полигонов обозначены черным цветом.



Edges on without light

Режим отображения ребер поверхности при отключенном освещении. Зелёным цветом обозначены границы исходной поверхности, в которую встраивается дорога и соединяется с ней в результирующую поверхность.



Face normals

Режим отображения при котором нормали имеются только у полигонов. Каждый полигон освещен равномерно согласно своей нормали, что дает резкие границы полигонов, задаваемые освещением.



Edges on for TriSquare

В режиме TriSquare поверхность заполняется полигонами в виде равносторонних треугольников, что создает гексагональную опорную сетку для точек. Один край поверхности получается зубчатым, так как нельзя разместить равнобедренные треугольники внутри области, ограниченной прямоугольником.



Edges on for squared

Режим Squared заполняет область квадратными полигонами, разбивая каждый квадрат на 4 равнобедренных прямоугольных треугольных полигона. Сетка заполняется равномерно.



Edges on for hexagon

Гексагональное заполнение в режиме Hexagon начинается с шестиугольника, разбиваемого на шесть полигонов в виде равносторонних треугольников. Общий рисунок разбиения такой же как и в режиме TriSquare. Область разбиения шестиугольная.



Chess textures

В режимах Squared и Hexagon текстуры заменены на текстуры с шахматным рисунком для удобства определения позиции каждой текстуры относительно полигона. На скриншоте включен режим Wires для определения границ текстур.