Зачем нам перспективное разделение?
Я знаю, что разделение перспективы выполняется путем деления x, y и z на w, чтобы получить нормализованные координаты устройства. Но я не в состоянии понять цель этого. Кроме того, это имеет какое-то отношение к вырезке?
3 ответов
Я имею в виду, зачем нам это нужно?
в терминах непрофессионала:сделать работу искажения перспективы. В матрице проекции перспективы координата Z "смешивается"с выходным компонентом W. Таким образом, чем меньше значение координаты Z, т. е. чем ближе к началу координат, тем больше вещей масштабируется, т. е. больше на экране.
некоторые детали, которые дополняют общие ответы:
идея состоит в том,чтобы проецировать точку (x,y,z) на экран,чтобы иметь (xs, ys, d). Следующий рисунок показывает это координата Y.
мы знаем из школы, что
Тан (Альфа) = 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 по... деление.
есть много геометрических способов прийти к тому же выводу. Наглядным доказательством этого служит диаграмма.