【发布时间】:2021-08-05 23:49:31
【问题描述】:
假设我有“观察”和“透视”矩阵。现在我需要根据相机上对应的 2D 点以及相机与前者之间的距离来计算世界 3D 点。
AFAIK,逆向问题很容易解决:point2D = lookAt * perspective * point3D。这意味着point3D = (lookAt * perspective)^-1 * point2D。但我不清楚在哪里应用距离,以及点的“附加”值是什么,即用问号(x, y, z, ?) 和(x, y, ?, ?) 指定的值是什么。我猜这些值(或其中一些)可以从距离推导出来?
或者也许这个任务不能以这种方式逆转?如果是这样,我怎样才能在不深入几何的情况下解决它?
【问题讨论】:
-
不能作为透视变换工作的也包括矩阵本身不存在的透视分割。因此,您需要首先根据距离撤消划分....更简单的是提取相机焦点和 FOV,然后通过将光线从焦点投射到您的 Znear 平面上移动其投影到 Znear 平面上的 2D 对应物来创建 3D 点2D 点并设置矢量长度以匹配与相机的距离...参见vertex shader in here 它基本上也是这样做的