Краткое рассмотрение проецирования трехмерных объектов на двухмерный дисплей - Просмотр точки

ОГЛАВЛЕНИЕ

Просмотр точки

Если смотреть на сцену вдоль оси X, получается двухмерное поперечное сечение плоскости YZ (смотрящей в сторону начала координат с положительной стороны). Теперь проводится воображаемая линия между камерой и точкой, которую надо показать на экране. Видно, что линия пересечет экран в точке S. Рисунок 3 иллюстрирует это.

Уже известна координата z для точки экрана (Sz, совпадает с экраном), для которой надо выяснить значение y.

Базовая тригонометрия дает решение тут. Из правил для подобных треугольников следует, что отношение Sz к Pz совпадает с отношением Sy к Py; Получается следующее уравнение:

    Sz = Sy<br>
    Pz   Py

Перестановка формулы дает следующее уравнение для Sy;

    Sy = Py Sz<br>
          Pz

Аналогичный процесс дает аналогичное уравнение для координаты X.

    Sx = Px Sz<br>
          Pz

Видно, что если есть другая точка P2, как показано на Рисунке 4, имеющая такие же значения X и Y, но другое значение Z, то она пересекает экран в другой точке. Это имитирует эффект перспективы, замечаемый в реальной жизни: дальние объекты кажутся меньше, чем ближние.

Отодвигание камеры от начала координат

Данная выше формула действительна, только если координаты представлены относительно начала координат (т.е. (0, 0, 0). Если камера не в начале координат, приходится корректировать формулы с учетом этого. Рисунок 5 показывает камеру, сдвинутую вдоль оси Y и оси Z.

Если вернуться к первым уравнениям и изменить их с учетом сдвига, то получится:

    (Sz-Ez) = (Sy-Ey)<br>
    (Pz-Ez)   (Py-Ey)

и перестановка формулы дает:

    (Sy-Ey) = (Py-Ey)*(Sz-Ez)<br>
                
(Pz-Ez)

Итак, получается:

    Sy = (Py-Ey)*( Sz-Ez) + Ey<br>
             ( Pz-Ez)

Точно так же делается аналогичное преобразование для Sx,

    Sx = (Px-Ex)*( Sz-Ez) + Ex<br>
             ( Pz-Ez)

О программе

Полезно приложить код. Демонстрационная программа была написана для  иллюстрации эффекта изменения некоторых из параметров, влияющих на отрисовку изображения. Использовались трехмерные классы Криса Маундера, но большинство функциональности этих классов не используется.

Использование программы

При запуске программы выводятся на экран три каркасных дома, имеющих одинаковый размер, но помещенных в разные координаты Z. С помощью кнопок панели инструментов или клавиатуры можно перемещать камеру.

Следующие клавиши делают разные вещи в программе:

K/L: Сдвинуть положение экрана вдоль оси 'Z'
A/D: Сдвинуть положение камеры вдоль оси 'X'
W/X: Сдвинуть положение камеры вдоль оси 'Y'
R/T: Сдвинуть положение камеры вдоль оси 'Z'

Нажатие кнопок панели инструментов сдвинет камеру в направлении, обозначенном иконкой кнопки (если вы поймете значение иконки).