给定摄像机和视图平面的2D点的3D坐标

Myx*_*Myx 7 c++ geometry trigonometry raytracing

我希望通过观察平面从相机产生光线.为了做到这一点,我需要我的相机位置("眼睛"),向上,向右和向向量(其中朝向是相机在相机所看到的物体方向上的向量)和P,观察平面上的点.一旦我有这些,产生的光线是:

ray = camera_eye + t*(P-camera_eye);
Run Code Online (Sandbox Code Playgroud)

其中t是沿光线的距离(假设现在t = 1).

我的问题是,如果它位于观察平面上的位置(i,j),我如何获得点P的3D坐标?假设给出了观察平面的左上角和右下角.

注意:观察平面实际上并不是一个平面,因为它不会在所有方向上无限延伸.相反,人们可能会将此平面视为宽度x高度图像.在x方向上,范围是0 - >宽度,在y方向上,范围是0 - >高度.我希望找到第(i,j)个元素的3D坐标,0

Myx*_*Myx 0

当我直接将建议的公式插入我的程序时,我没有获得正确的结果(也许需要进行一些调试)。我最初的问题似乎是对插值角点的 (x,y,z) 坐标的误解。我分别处理 x、y、z 坐标,而我不应该这样做(这可能特定于应用程序,因为相机可以面向任何方向)。相反,解决方案是对观察平面的角点进行简单的插值:

  • 对 i 方向的底角点进行插值得到 P1
  • 对i方向的顶角点进行插值得到P2
  • 在j方向上对P1和P2进行插值以获得最终点的世界坐标