Мировое окно может иметь любой размер, форму и положение, оставаясь при этом выровненным прямоугольником. Подобным же образом порт просмотра может быть любым выровненным прямоугольником, хотя, конечно, обычно его выбирают так, чтобы он целиком находился внутри экранного окна. Более того, мировое окно и порт просмотра не обязаны иметь одно и то же форматное соотношение, хотя различие форматных соотношений приводит к искажению. Как показано на рис. 3.4, искажение возникает из-за того, что рисунок в окне необходимо растянуть, чтобы он вписался в порт просмотра. Позднее мы узнаем, как устанавливать для порта просмотра форматное соотношение, которое будет всегда соответствовать форматному соотношению экранного окна, даже если пользователь изменяет размеры последнего.
1 Для краткости мы используем в математических формулах / вместо left, t вместо top и т. д.
Дополнительные инструменты для рисования
Рис. 3.3. Задание мирового окна (а) и порта просмотра (6)
Рис. 3.4. Картинка, преобразованная из мирового окна в порт просмотра. Здесь возникает некоторое искажение Имея описание мирового окна и порта просмотра, мы производим преобразование (mapping), или трансформацию (transformation), называемые также преобразованием мировое окно - порт просмотра (window-to-viewport mapping). Это преобразование основывается на формуле, которая вычисляет точку (sx, sy) в координатах экранного окна для любой заданной точки (х, у) мирового окна. Мы хотим, чтобы это преобразование было «пропорциональным» в том смысле, что если х составляет, например, 40 % всего расстояния от левого края мирового окна, то sx должен составлять 40 % всего расстояния от левого края порта просмотра. Подобным же образом, если у составляет некоторую долю / от высоты мирового окна, считая от его нижней границы, то sy должен составлять ту же самую долю/, отсчитываемую от нижней границы порта просмотра.
Из пропорциональности следует линейная форма преобразования"opengl1_146.html">⇐ Предыдущая| |Следующая ⇒