Френсис Хилл

Рис. 5.35. Текущее преобразование, применяемое к вершинам Как же должны быть расширены функции moveToO и lineToO, чтобы они молча выполняли это дополнительное преобразование? (Иными словами, как переписать эти функции в классе Canvas?) Если вы работаете без OpenGL, то вам придется самим написать код, фактически осуществляющий это преобразование; такой код описывается в тематическом задании 5.1. Если же вы используете OpenGL, то преобразование выполняется автоматически! В OpenGL содержится так называемая матрица моделирования-вида (modelview matrix), на которую умножается каждая вершина, проходящая через графический конвейер. Нам остается только настроить данную матрицу на выполнение нужного преобразования.

OpenGL всегда работает в трех измерениях, поэтому его матрица моделирования-вида осуществляет ЗО-преобразования. В данном случае мы работаем с матрицей моделирования-вида, ограничиваясь частным случаем двумерных преобразований. В дальнейшем мы будем использовать ее на полную мощность. На рис. 5.36 показано, как ограничить трехмерные преобразования так, чтобы получить необходимые нам двумерные преобразования. Основная идея заключается в том, что двумерное рисование производится в плоскости ху. Предполагается, что координата г равна нулю. Поэтому при преобразовании двумерных точек та часть основного трехмерного преобразования, которая воздействует на координату z, настраивается так, чтобы это воздействие полностью отсутствовало. Например, вращение вокруг начала координат в двух измерениях эквивалентно повороту вокруг оси г в трех измерениях, как это показано на рисунке. Далее, поскольку у трехмерного масштабирования имеется три масштабных множителя 5д., Sy, и S2 для масштабирования соответственно в направлениях x, у и г, мы задаем масштабный множитель 5.-1.

Глава 5. Преобразования объектов

z

Френсис Хилл

Мировое окно

X

Рис. 5.36. Двумерное рисование, осуществляемое в плоскости ху Основными подпрограммами для поддержки матрицы моделирования-вида являются g^Rotated()1, дІБсаТесЮ и дТТгапБШесЮ. Они не устанавливают СТ прямо. Вместо этого в каждой из них матрица моделирования-вида СТ умножается справа на заданную матрицу, например М, после чего результат помещается обратно в СТ. Таким образом, в каждой из этих подпрограмм создается матрица М, необходимая для нового преобразования, и выполняется следующая операция:


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