Этот механизм позволяет составлять группы связанных таблиц отображений, идентификаторы которых образуются из символьных названий или кодов. Характерный пример - набор, образующий шрифт, где каждый идентификатор таблицы отображений - это ASCII-код символа. Для описания нескольких наборов-шрифтов используется параметр offsetValue из функции glListBase, с помощью которого можно получить определенный шрифт, описанный в массиве listlDArray.
УДАЛЕНИЕ ТАБЛИЦЫ ОТОБРАЖЕНИЙ В OpenGL
Удалить набор следующих друг за другом таблиц отображений можно, вызвав следующую функцию.
glDeleteLists (startID, nLists); Параметр startID дает значение идентификатора первой таблицы отображений, а с помощью параметра nLists задается количество таблиц, которые следует удалить. Например, с помощью оператора
glDeleteLists (5, 4); удаляется четыре таблицы отображений с идентификаторами 5, 6, 7 и 8. Значение идентификатора, соответствующего несуществующей таблице отображения, игнорируется.
ФУНКЦИЯ ИЗМЕНЕНИЯ ФОРМЫ ОКНА ИЗОБРАЖЕНИЯ В OpenGL
В программе, приводившейся для знакомства с OpenGL (раздел 2.9), рассматривались функции задания исходного окна изображения. Однако после создания рисунка часто возникает необходимость воспользоваться указателем мыши и перетянуть окно
Рис. 3.64. Окно изображения, полученное с помощью программы-примера, иллюстрирующей применение функции изменения формы окна изображения в другое место на экране или изменить его размер. Изменение размеров окна изображения может привести к изменению его характеристического отношения и, следовательно, к искажению изначальной формы изображенных объектов.
Для компенсации изменения размеров окна изображения в библиотеке GLUT существует следующая процедура
glutReshapeFunc (winReshapeFcn); Эту функцию можно включить в процедуру main нашей программы, вместе с другими процедурами GLUT, и она будет активизироваться при каждом изменении размеров окна изображения. Аргументом этой функции GLUT является название процедуры, которой сообщаются новые значения ширины и высоты окна изображения. На основе новых размеров можно изменить параметры проектирования, а также выполнить любые другие операции, такие как изменение цвета окна изображения. Кроме того, новые значения высоты и ширины можно сохранить, чтобы использовать в других процедурах данной программы.
В качестве примера приведем программу, иллюстрирующую построение процедуры winReshapeFcn. В функцию изменения формы входит команда glLoa-dldentity, так что любые предыдущие значения проекционных параметров не влияют на образование новых проекций. С помощью этой программы изображается правильный шестиугольник, который рассматривался в разделе 3.23. Несмотря на то что центр шестиугольника (который совпадает с центром окружности) в этом примере задается через параметры окна изображения, на положение самого шестиугольника не влияют никакие изменения размера окна изображения. Это происходит потому, что шестиугольник задается в рамках таблицы отображения, а в таблице записываются только исходные координаты центра. Если потребуется изменить положение шестиугольника при изменении размеров окна изображения, нужно будет описать шестиугольник другим способом или изменить систему координат окна изображения. Результат выполнения этой программы показан на рис. 3.64.