Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1 OpenGL.docx
Скачиваний:
8
Добавлен:
18.08.2019
Размер:
107.19 Кб
Скачать

Программа 1.1 Имена функций OpenGl

Рисование сферы в программе 1.1 выполняется при помощи двух функций:

glColor3d( 1, 0, 0 );

auxSolidSphere( 1 );

Функция glColor3d() устанавливает текущий цвет, а auxSolidSphere() рисует сферу единичного радиуса с центром в начале координат.

Цвет в режиме RGBA (режим был задан в функции main()) задается четырьмя числами в диапазоне от 0 до 1: красная компонента, синяя, зеленая и прозрачность. В программе 1.1 прозрачность не нужна, поэтому вызывается вариант функции glColor() с тремя параметрами. Значение четвертого параметра, прозрачности, по умолчанию равно единице (1 – абсолютно непрозрачный материал, 0 – абсолютно прозрачный).

OpenGL была разработана для языка Си, а не Си++, поэтому вместо перегруженных полиморфных функций в этой библиотеке реализованы наборы функций с похожими именами, в которых условно обозначено количество параметров функции. Имена полиморфных функций OpenGL выбраны согласно следующему правилу:

Имя функции[n=число параметров][тип параметров]

Тип параметров обозначается одной из английских букв:

'b' байт со знаком (char или GLbyte)

's' – короткое целое (short или GLshort)

'i' – целое (int или GLint)

'f' – вещественное (float или GLfloat)

'd' – вещественное с двойной точностью (double или GLdouble)

'ub' – беззнаковый байт (unsigned char или GLubyte)

'us' – беззнаковое короткое целое (unsigned short или GLushort)

'ui' – беззнаковое целое (unsigned int или GLuint)

'v' – массив из n параметров указанного типа

Имя glColor3d() означает, что у функции есть три параметра типа double. Например, есть еще функция glColor3i() с тремя параметрами типа int. Для целочисленных типов значение цветовой компоненты приводится к диапазону [0, 1] путем деления переданного значения на максимальное значение данного типа. Ниже приведены три поясняющих примера:

double array[] = {0.5, 0.75, 0.3, 0.7};

glColor3dv(array); // Цвет задается массивом типа double

glColor3ub(200, 100, 0); // Преобразование 200/256,100/256,0/256

glColor3d(0.25, 0.25, 0); // темно-желтый

glColor3ub(0, 100, 0); // темно-зеленый

glColor3ub(0, 0, 255); // ярко-синий

Системы координат

В OpenGL используются три системы координат: левосторонняя, правосторонняя и оконная. Первые две системы являются трехмерными и отличаются друг от друга направлением оси z: в правосторонней она направлена на наблюдателя, а в левосторонней – от наблюдателя внутрь экрана. В большинстве случаев используется правосторонняя (мировая) система координат. Левосторонняя система применяется только для задания параметров проекционного преобразования. Отображение проекции трехмерной сцены производится в двумерной оконной системе координат, связанной с окном на экране.

Смысл преобразований трехмерных координат, необходимых для получения на экране двумерного изображения трехмерной сцены, можно пояснить с помощью аналогии между OpenGL и фотоаппаратом (рис. 1.2). В обоих случаях для получения изображения выполняются следующие шаги:

  1. установка штатива и наведение фотоаппарата (видовое преобразование);

  2. размещение фотографируемых объектов (модельное преобразование);

  3. выбор объектива и/или настройка увеличения (проекционное преобр.);

  4. выбор размера печатаемой фотографии (оконное преобразование).

Рис. 1.2. Аналогия между фотоаппаратом и OpenGL.

Рис. 1.3. Порядок выполнения преобразований координат вершины объекта.

В программах на OpenGL видовые преобразования следует задавать ранее модельных. Проекционное и оконное преобразования можно описывать в любом месте программы до рисования объектов. В целом, порядок задания параметров преобразований может отличаться от строго определенного порядка выполнения математических операций над трехмерными координатами для получения двумерных экранных координат (рис. 1.3).