Можно воспользоваться неиерархическим подходом к моделированию и рассматривать объекты из базового набора как символы, из которых строится модель. В состав набора символов могут входить не только графические объекты, но и шрифты, и условные графические обозначения, специфичные для определенной области, например обозначения электрических элементов и узлов в системах проектирования электрических схем. Обычно символы в библиотеке представлены как объекты стандартного размера и ориентации, удобные для данного символа. Например, ось цилиндра обычно параллельна одной из координатных осей, сам цилиндр имеет единичную высоту и единичный радиус, а центр основания располагается в начале системы координат (рис. 8.1).

В некоторых графических API, например в PHIGS и GK.S, фрейм, в котором определен символ (фрейм модели - model frame или сис-Рис. 8.1. Символ ци- тема координат модели - model coordinates), не совпадает с миро-линдра фреимом такое разделение весьма существенно, если символ представляет собой некую чисто геометрическую фигуру, например условное обозначение электрического элемента. В прикладной программе нужно определить преобразования, связывающие фрейм символа и мировой фрейм, и применить их к матрице вида еще до того, как вызывать функции формирования символа.

Преобразования экземпляра, о которых шла речь в главе 4, позволяют разместить в модели каждый экземпляр символа на отведенном ему месте, причем размер символа и его ориентация также могут изменяться индивидуально для каждого экземпляра. Матрица преобразования экземпляра имеет вид

M = TRS

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

Глава 8. Иерархические графические модели д1Ма^1хМоае(СЬ_М0Л)ЕШЕИ); д1ЬоасПс1еп1:з^у(); д1Тгап8]^е£(…); д1кси^е£ (…); д18са1е£(…); д1^8оНбСуНпс1ег(…); /* или какой-либо другой символ */


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