Теперь весь графический конвейер можно представить в виде матричного умножения, за которым следует операция отсечения, затем этап перспективного деления и, наконец, матричное^умножение для перехода в экранные координаты. Первую матрицу часто разделяют на матрицу моделирования-вида и проекционную матрицу, так как это позволяет задавать ориентацию и положение камеры независимо от ее отображаемого объема. Ранее мы показали, что матрица моделирования-вида сочетает в себе два преобразования: одно преобразование помещает объект нужного размера в нужное положение на сцене; второе отражает положение и ориентацию на сцене самой камеры.
Представляется полезным разделить по категориям различные виды проекций, применяемых на практике. Основным является различие между перспективными и параллельными проекциями, каждая из которых обладает теми или иными преимуществами для решения различных задач. Перспективные проекции очень хорошо отражают то, что мы видим в обычной жизни. Посредством ориентирования плоскости просмотра камеры относительно объекта можно получить одно-, двух- и трехточечные перспективные проекции, каждая из которых обеспечивает присущий ей визуальный эффект. Параллельные проекции полезны, когда важно сохранить точную форму какой-либо грани. Такие проекции часто используются в задачах автоматического проектирования (CAD), когда измерения должны делаться прямо с чертежа.
7.8. Тематические задания Тематическое задание 7.1. «Пилотирование» камеры по сцене Уровень сложности И.
Напишите приложение, позволяющее пользователю «пилотировать» камеру по какой-нибудь сцене. (Если вы ранее разрабатывали программу просмотра сеток, такую как в главе 5, то в ней достаточно заменить функции просмотра функциями из класса Camera.) Для управления камерой пользователь
Трехмерный просмотр
нажимает клавиши. При каждом нажатии клавиши камера скользит в одном из трех направлений или поворачивается вокруг одной из своих осей (путем вызовов функций, аналогичных используемым в листинге 7.3), после чего сцена перерисовывается с точки зрения новой камеры. Кроме того, предоставьте пользователю возможность изменять угол зрения и форматное соотношение камеры посредством нажатия других клавиш.