
OpenGL Utility Toolkit (GLUT) – это библиотека различных утилит, предназначенная для приложений, разрабатываемых с использованием OpenGL API.
По большей части данная библиотека отвечает за операции ввода-вывода, необходимые для обмена с операционной системой.
Самими важными функциями, которые стоило бы отметить – это:
Библиотека GLUT была разработана Марком Килгардом, когда он работал в Silicon Graphics Inc.
Как правило, использование данной библиотеки поможет решить вам 2 основные проблемы:
В следующей части данной главы мы рассмотрим использование данной библиотеки для отрисовки 3D объектов, причем вопрос построения геометрии берет на себя библиотека GLUT. Нашей задачей будет лишь установка необходимых функций и параметров отрисовки.
В одной из предыдущих глав мы познакомились с геометрическими преобразованиями объектов.
Стоит отметить, что мы производили операции переноса, вращения и масштабирования, используя математических подход – умножая геометрию объекта на необходимую матрицу, мы непрерывно меняли данные, на основе которых строилась геометрия объекта.
Причем мы использовали упрощенный подход (на самом деле мы использовали матрицы для реализации преобразований в двухмерном пространстве).
Это был хороший опыт для понимания математических основ программирования графики, но данные задачи уже решены, и OpenGL имеет ряд очень удобных функций, для работы с модельными трансформациями.
В OpenGL API существуют команды для модельных преобразований:
С помощью данных команд вы можете выполнять трансформации объекта или координатной системы (в зависимости от того, как вам легче это представлять).
Данные команды являются эквивалентом соответствующих матриц с вызовом функции 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.

Рисунок 6.
Для элементов trackBar установите диапазон значений от -50000 до 50000 для перемещений по осям, от -360 до 360 для угла поворота и от -5000 до 5000 для масштабирования.
Так же добавьте таймер, переименовав экземпляр в RenderTimer и установите время отклика равное 30 миллисекундам.
Обсуждение данного урока: Библиотека GLUT. GLUT OpenGl.
Далее: 11.2 Реализация функций рисования и трансформации объектов.