Учитывая 4 точки в координатах глаза (назовите их ABCD), все из которых находятся перед камерой (Z <0), как я могу рассчитать матрицу проекции 4x4, которая будет проецировать точки ABCD точно на 4 углаviewport? </p>
Цель состоит в том, чтобы сделать ортогональный рендеринг прямоугольного четырехугольника, который существует где-то в сцене (с вершинами ABCD), как если бы он был просмотрен в квадрате, но где рендеринг также включает любые объекты, которые блокируютпрямой видимости к квадру от фактического местоположения камеры.
Я думаю, что ответ может включать гомографию, которая отображает координаты глаза в NDC, и я использовал OpenCV cv2.getPerspectiveTransform () для его вычисления.Но преобразование гомографии 3x3 в матрицу проекции 4x4 является сложной задачей.
Я могу правильно отобразить X и Y из координат глаза в NDC, используя эту матрицу, но только когда A, B, C, D имеют одинаковуюКоордината Z:
H[0,0] H[0,1] 0 H[0,2]
H[1,0] H[1,1] 0 H[1,2]
0 0 0 0
H[2,0] H[2,1] 0 1
Я не могу понять, как вычислить Z, сохраняя при этом X и Y. Это удобное руководство для матриц проекции показывает, что для правильного отображения Z из [-near, -far] до [-1,1], нижние строки матрицы проекции должны быть:
0 0 -(f+n)/(f-n) -2fn/(f-n)
0 0 -1 0
Мне кажется, что я держу все кусочки головоломки, но не могу сработатькак их собрать.