首页 > 解决方案 > 映射4个任意眼睛坐标以填充视口的投影矩阵?

问题描述

给定眼睛坐标中的 4 个点(称为 ABCD),所有这些点都在相机前面(Z<0),我如何计算一个 4x4 投影矩阵,它将点 ABCD 精确地投影到视口的 4 个角上?

目标是对存在于场景中某处(带有顶点 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 

我不知道如何在保留 X 和 Y 的同时计算 Z。 这个方便的投影矩阵指南表明要正确地将 Z 从 [-near,-far] 映射到 [-1,1],即投影的底部行矩阵应该是:

0  0  -(f+n)/(f-n)  -2fn/(f-n)
0  0       -1            0

我觉得我拿着拼图的所有部分,但不知道如何把它们放在一起。

标签: opengl3dprojection-matrix

解决方案


推荐阅读