opengl - 映射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
我觉得我拿着拼图的所有部分,但不知道如何把它们放在一起。
解决方案
推荐阅读
- c# - redis 获取多个键的值,该值是在单个查询中设置的哈希值?
- django - 如何在 DJango 中使用 Prepend_WWW
- jenkins - 如何获取 Jira 数据并在 Jenkins 中显示
- reactjs - NPM 包共享
- google-drive-api - 将文件修订复制到新文件 Google Drive API v3
- r - S3中的美元建议方法
- javascript - Microsoft.Maps.SDKMap 未定义,在 BingMaps V8 中创建对象时
- django - Django - 将大写的网址重定向到小写
- javascript - 如何将当前的 JavaScript 事件重新附加到不同的元素?
- html - 让图像在其他图像下方对齐