Рис. 5.48. Камера, создающая параллельные виды сцены
В предыдущем разделе мы видели, что в OpenGL содержится три функции glScaledC… ), g1Rotated(… ) и g1Trans1ated(…), предназначенные для применения к форме моделирующих преобразований. Параллелепипед на рис. 5.48 в действительности представляет собой куб, который был растянут, повернут и смещен до состояния, показанного на рисунке. Кроме того, в OpenGL содержатся функции для задания отображаемого объема и его положения на сцене.
Графический конвейер, реализованный в OpenGL, выполняет основную работу посредством матричных преобразований, поэтому мы прежде всего должны разобраться в том, что делает каждая матрица этого конвейера. На данном этапе нам важно только понять основной принцип работы каждой матрицы, а в главе 7 будет дан детальный разбор. На рис. 5.49 показан такой конвейер (в слегка упрощенном виде). Каждая вершина объекта пропускается через конвейер посредством вызова функции типа glVertex3d(x, у, z). Эта вершина умножается на различные матрицы, показанные на рисунке,
Преобразования объектов
при необходимости производится отсечение; и если вершина пережила это отсечение, то в конечном счете она отображается в порт просмотра. Каждая вершина встречается со следующими тремя матрицами"images/tmp8E4A-333.png">
Матрица моделирования-вида в основном занимается тем, что мы называли СТ (текущее преобразование). Она компонует два действия: последовательность моделирующих преобразований, применяемых к объектам, и преобразование, ориентирующее и позиционирующее камеру в пространстве (отсюда и ее название - моделирование и вид). Хотя матрица моделирования-вида является единственной в каждом действующем конвейере, проще представлять ее в виде произведения двух матриц: матрицы моделирования М и матрицы вида (просмотра) V. Сначала применяется матрица моделирования, а затем матрица вида, так что матрица моделирования-вида фактически является произведением матриц УМ. (Почему?)