OpenGL Utility Toolkit
OpenGL Utility Toolkit (GLUT) – это библиотека различных утилит, предназначенная для приложений, разрабатываемых с использованием OpenGL API. По большей части данная библиотека отвечает за операции ввода-вывода, необходимые для обмена с операционной системой.
Самые важные функции, которые стоило бы отметить, это:
- Создание окна приложения.
- Функции управления окном приложения.
- Опрос клавиатуры и мыши.
- Функции для рисования различных геометрических фигур.
- Функции создания контекстных меню.
- GAMEMODE (быстрый переход в полноэкранный режим).
Как правило, использование данной библиотеки поможет решить вам две основные проблемы:
- во-первых, это кроссплатформенность вашего кода (функции создания окна и управления им, операции ввода-вывода клавиатуры и мыши).
- во-вторых, она позволит вам упростить процесс изучения OpenGL API, так как позволит очень быстро и просто создавать ваши программы (как вы помните, мы используем возможности данной библиотеки с первого урока и пока еще не столкнулись даже с намеком на проблемы взаимодействия с Win API).
Модельная трансформация
В одной из предыдущих глав мы познакомились с геометрическими преобразованиями объектов. Стоит отметить, что мы производили операции переноса, вращения и масштабирования, используя математических подход: умножая геометрию объекта на необходимую матрицу, мы непрерывно меняли данные, на основе которых строилась геометрия объекта.Причем мы использовали упрощенный подход (на самом деле мы использовали матрицы для реализации преобразований в двухмерном пространстве). Это был хороший опыт для понимания математических основ программирования графики, но данные задачи уже решены, и OpenGL имеет ряд очень удобных функций для работы с модельными трансформациями.
В OpenGL API существуют команды для модельных преобразований:
- glTranslate*()
- glRotate*()
- glScale*()
Данные команды являются эквивалентом соответствующих матриц с вызовом функции glMultMatrix*() с нужной матрицей в качестве аргумента. Но в данном случае использование команд glTranslate, glRotate и glScale может выполниться быстрее. Рассмотрим их немного подробнее.
Перенос
void glTranslate{fd} (TYPE x, TYPE y, TYPE z); - данная команда позволит вам произвести перенос объекта по осям X, Y, Z, которые указываются в качестве параметров.Рисунок 1. Перенос объекта.
Вызов данной функции с параметрами (0.0, 0.0, 0.0) в качестве аргументов – она не повлияет на позицию объекта в пространстве.
Поворот
void glRotate{fd} (TYPE angle, TYPE x, TYPE y, TYPE z); - данная функция умножает текущую матрицу на матрицу, производящую поворот объекта (операция поворота происходит в направлении против часовой стрелки, вокруг луча из начала координат, проходящего через точку (x, y, z)).Angle задает угол поворота объекта в градусах.
Рисунок 2. Поворот объекта.
Масштабирование
void glScale{fd} (TYPE x, TYPE y, TYPE z); - данная команда позволяет сжимать или отражать объект вдоль координатных осей.Рисунок 3. Масштабирование и отражение объекта.
glScale*() – является единственной из трех рассмотренных команд модельных преобразований, которая изменяет размер объекта:
Если вы масштабируете объект с параметрами более 1.0, то объект растягивается.
Используя величины меньше 1.0 - сжимает его.
Масштабирование объекта с величиной параметра -1.0 отразит объект относительно оси или осей (в случае нескольких параметров).
Оболочка программы
Создайте новый проект. После этого создайте окно приложения, разместив на нем элементы управления, как показано на рисунке 4.Рисунок 4. Окно приложения.
Для элементов Combobox установите элементы в соответствии с тем, как показано на рисунках 5 и 6.
Рисунок 5. Установка элемента ComboBox.
Рисунок 6. Установка элемента ComboBox.
Для элементов trackBar установите диапазон значений от -50000 до 50000 для перемещений по осям, от -360 до 360 для угла поворота и от -5000 до 5000 для масштабирования. Также добавьте таймер, переименовав экземпляр в RenderTimer и установите время отклика, равное 30 миллисекундам.