Значения координат хО, уО, xOffset и yOffset, а также текущее растровое положение сохраняются в виде чисел с плавающей запятой. Конечно, битовое отображение применяется в пикселях с целочисленными координатами. Однако координаты в виде чисел с плавающей запятой позволяют размещать битовое отображение через произвольные интервалы, что очень полезно в некоторых приложениях, таких как формирование строк символов с помощью битовых узоров.
Чтобы задать координаты текущего растрового положения, применяется следующая процедура:
glRasterPos* ( )
Рис. 3.61. Битовый узор, представленный в виде массива из 10 строк и 9 столбцов, записывается с помощью 8-битовых блоков из 10 строк с 16 значениями в каждой строке Параметры и индексы аналогичны тем, которые используются в функции glVertex. Таким образом, текущее растровое положение задается во внешних координатах, а затем преобразуется в экранные координаты с помощью изменения точки наблюдения. В использованных двухмерных примерах координаты текущего растрового положения можно задавать непосредственно в целочисленных экранных координатах. По умолчанию значение текущего растрового положения совпадает с началом отсчета (0, 0, 0) внешней системы координат.
Цветом битового отображения является текущий цвет в момент вызова команды glRasterPos. Любые последующие изменения цвета не влияют на битовый массив.
Каждая строка прямоугольного битового массива записывается в виде чисел, размер которых кратен 8 бит, где бинарные данные организованы в виде 8-битовых символов без знака. Однако фигуру также можно описать с помощью сетки любого другого удобного размера. В качестве примера на рис. 3.61 показан битовый узор, заданный с помощью сетки из 10 строк и 9 столбцов, где бинарные данные задаются с помощью 16 бит в каждой строке. Когда этот узор накладывается на пиксели в буфере кадра, все значения битов за пределами девятого столбца игнорируются.
Чтобы наложить битовый узор, изображенный на рис. 3.61, на определенный участок буфера кадра, воспользуемся следующим кодом.
GLubyte bitShape [20] =
0x1с, 0x00, 0x1с, 0x00, Oxlc, 0x00, 0x1c, 0x00, 0x1c, 0x00,
Oxff, 0x80, 0x7f, 0x00, 0x3e, 0x00, Oxlc, 0x00, 0x08, 0x00;
glPixelStorei (GL_UNPACK_ALIGNMENT, 1);
/* Устанавливается режим хранения пикселей. */
glRasterPos2i (30, 40);
glBitmap (9, 10, 0.0, 0.0, 20.0, 15.0, bitShape); Значения массива bitShape задаются построчно, начиная с нижнего края прямоугольной сетки узора. Затем устанавливается режим хранения битового отображения с помощью стандартной процедуры OpenGL glPixelStorei. Значение 1 в этой функции указывает на то, что заданные значения следует располагать по границам байтов. С помощью функции glRasterPos устанавливается текущее растровое положение с координатами (30, 40). Наконец, функция glBitmap указывает, что битовый узор задается в виде массива bitShape, и что этот массив состоит из 9 столбцов и 10 строк. Координаты точки отсчета этого узора - (0.0, 0.0), т.е. она находится в левом нижнем углу сетки. На данном рисунке иллюстрируется смещение координат на величину (20.0, 15.0), хотя в данном примере оно никак не используется.