glutStrokeCharacter(GLUT_STROKE_MONO_ROMAN, int character);

Константа GLUT_STROKE ROMAN задает режим вывода символов пропорционального шрифта. Процедуры манипулирования такими шрифтами нужно тщательно продумывать. Размер символов (не более 120 единиц) может не соответствовать размерам остальных элементов изображения, а потому при выводе текста нужно использовать масштабирование. Обычно управление положением символов выполняется смещением перед вызовом функции вывода символов на экран. Кроме того, каждый повторный вызов функции glutStrokeCharacter( ) приводит к дополнительному сдвигу по горизонтали на ширину символа и таким образом подготавливает позицию для вывода следующего символа надписи. Параметры масштабирования и смешения являются составляющими текущего состояния исполнительной системы OpenGL, поэтому при их изменении нужно не забывать о сохранении и восстановлении текущего состояния с помощью стека матриц (функции glPushMatrix( ) и glPopMatrix( )). В противном случае могут возникнуть совершенно нежелательные побочные эффекты.

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

glutBitmapCharacter(GLUT_BITMAP_8_BY_13, int character);

Растровые символы позиционируются на экране значительно проще, чем штриховые, поскольку "образ" такого символа прямо переносится в буфер кадра и, в отличие от штрихового символа, не подвергается никаким геометрическим преобразованиям. Исполнительная система OpenGL в качестве одного из параметров текущего состояния хранит и позицию растра (raster position). Этот параметр указывает позицию вывода образа очередного растрового примитива. Его значение устанавливается функцией glRasterPos*( ). Как правило, после вы6 Можно использовать и шрифты, поддерживаемые операционной системой.

Ввод и взаимодействие с пользователем

вода образа очередного символа функцией glutBitmapCharacter() прикладная программа смещает позицию растра на один символ вправо. Это изменение не влияет на последующее тонирование геометрических примитивов. Если символы имеют разную ширину, нужно воспользоваться функцией glutBitmapWidth(font, char), которая возвращает ширину заданного символа указанного шрифта. Таким образом, фрагмент прикладной программы, который организует вывод символа некоторой надписи, обычно имеет вид


⇐ Предыдущая| |Следующая ⇒