7.4.3. Включение перспективы в графический конвейер
Только глупец проверяет глубину реки обеими ногами.
Поль Сезанн (Paul Cezann), 1925
Мы хотим, чтобы графический конвейер проецировал вершины трехмерных объектов на ближнюю плоскость и затем отображал их в порт просмотра. После прохождения через матрицу моделирования-вида вершины выражаются в системе координат камеры, и из уравнения (7.4) видно, какие величины необходимо вычислить для получения нужной проекции. Кроме того, мы должны произвести отсечение и затем отобразить оставшиеся вершины в порт просмотра. Однако нам нужно кое-что еще.
Добавление псевдоглубины
При проецировании отбрасывается информация о глубине; это означает, что мы теряем информацию о том, насколько далеко от глаза находится данная точка. Однако не следует отбрасывать эту информацию навсегда, иначе впоследствии нам не удастся удалить невидимые поверхности.
Рис. 7.23. Какая точка ближе: Р1 или Р2?
Действительное расстояние точки Р от глаза в системе координат камеры равно ^Р2 + Руг + Р2 . Эта формула слишком громоздка и медленна, чтобы применять ее для каждой интересующей нас точки. Все, что нам в действительности нужно, - это некоторая оценка расстояния, которая при проецировании двух точек в одну и ту же точку ближней плоскости сообщала бы нам, какая из этих двух точек ближе. На рис. 7.23 показаны точки Р, и Р2, обе располагающиеся на прямой, исходящей от глаза, и поэтому проецирующиеся в одну и ту же точку. Мы должны иметь возможность проверить, то ли точка Р, заслоняет собой Р2, то ли наоборот. Поэтому для каждой точки Р, которую мы проецируем, мы будем вычислять величину, называемую псевдоглубиной (рвеио'оа'ерг.Ь.), которая является оценкой глубины для точки Р. Тогда мы можем сказать, что точка Р проецируется в точку (х*, у*, г*), где (х*, у*) - величина, полученная из уравнения (7.4), а г* - псевдоглубина точки Р.
Как лучше выбрать функцию для псевдоглубины? Заметим, что если две точки проецируются в одну и ту же точку, то более дальней из них всегда соответствует большее по модулю отрицательное значение Рг, поэтому мы можем взять в качестве псевдоглубины саму величину Рг. Однако красивее и эф-