目标是在相机屏幕上投影 3D 空间中的一个点(最终目标是生成点云)
这是设置:
相机位置:px,py,pz 向上方向:ux,uy,uz look_at_direction: lx,ly,lz screen_width screen_height screen_dist
空间点:p = (x,y,z)
和
初始化 U,V,W
w = || position - look_at_direction || = || (px,py,pz) - (ux,uy,uz) ||
u = || (ux,uy,uz) cross-product w ||
v = || w cross-product u ||
这给了我相机的 u,v,w 坐标。
这是我应该实施的步骤,以及我理解它们的方式。我相信翻译中丢失了一些东西。
(1) 找到从相机到点的射线
我用相机的位置减去点
ray_to_point = p - 位置
(2) 计算到点的射线和到屏幕中心的归一化射线(相机方向)的点积。将结果除以 sc_dist。这将为您提供点的距离与到相机屏幕的距离之间的比率。
比率 = (ray_to_point * w)/screen_dist
在这里,我不确定我应该使用 w 还是相机的原始外观值或 w 向量,它是相机空间中的单位向量。
(3) 将光线除以在步骤 2 中找到的比率,并将其添加到相机位置。这将为您提供该点在相机屏幕上的投影。point_on_camera_screen = ray_to_point / 比率
(4) 找到相机屏幕中心和投影点之间的向量。我应该找到屏幕的中心像素吗?我怎样才能做到这一点?
谢谢。