Зачем нам перспективное разделение?

Я знаю, что разделение перспективы выполняется путем деления x, y и z на w, чтобы получить нормализованные координаты устройства. Но я не в состоянии понять цель этого. Кроме того, это имеет какое-то отношение к вырезке?

3 ответов


Я имею в виду, зачем нам это нужно?

в терминах непрофессионала:сделать работу искажения перспективы. В матрице проекции перспективы координата Z "смешивается"с выходным компонентом W. Таким образом, чем меньше значение координаты Z, т. е. чем ближе к началу координат, тем больше вещей масштабируется, т. е. больше на экране.


некоторые детали, которые дополняют общие ответы:

идея состоит в том,чтобы проецировать точку (x,y,z) на экран,чтобы иметь (xs, ys, d). Следующий рисунок показывает это координата Y.

enter image description here

мы знаем из школы, что

Тан (Альфа) = ys / d = y / z

Это означает, что проекция вычисляется как

ys = d*y /z = y / w

w = z / d

этого достаточно, чтобы применить проекции. Однако в OpenGL, вы хотите (xs,ys,zs) нормализовать координаты устройства в [-1,1], и да, это имеет какое-то отношение к отсечению.

значения экстремумов для (xs,ys,zs) представляют собой единичный куб, и все, что за его пределами, будет обрезано. Таким образом, проекционная матрица обычно учитывает пределы отсечения (Frustum), чтобы сделать одно преобразование, которое с разделением перспективы одновременно применяет проекцию и преобразует проецируемые координаты вместе с z в нормализованные координаты устройства.


чтобы действительно перегнать его в базовое понятие и почему op является делением (вместо, например, квадратного корня или некоторых таких), рассмотрим, что объект в два раза больше должен появиться с размерами ровно в два раза меньше. Получить 1/2 от 2 по... деление.

есть много геометрических способов прийти к тому же выводу. Наглядным доказательством этого служит диаграмма.