Math 3D图形-矢量数学,我好像出了点问题

Math 3D图形-矢量数学,我好像出了点问题,math,graphics,3d,Math,Graphics,3d,目标是在3D空间中获得投影到相机屏幕上的点(最终目标是生成点云) 以下是设置: 摄像机 职位:px、py、pz 上行方向:ux,uy,uz 看方向:lx,ly,lz 屏幕宽度 屏幕高度 屏幕区 空间点: 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-produ

目标是在3D空间中获得投影到相机屏幕上的点(最终目标是生成点云)

以下是设置:

摄像机 职位:px、py、pz 上行方向:ux,uy,uz 看方向:lx,ly,lz 屏幕宽度 屏幕高度 屏幕区

空间点: 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) 找到从摄影机到点的光线

我用相机的位置减去这个点

射线到点=p-位置

(2) 计算光线到点和归一化光线之间的点积 至屏幕中心(摄像机方向)。将结果除以sc_dist。 这将为您提供点的距离与到摄影机屏幕的距离之间的比率

比率=(光线到点*w)/屏幕距离

在这里,我不确定我是否应该使用w或者相机的原始观察值,或者w向量,它是相机空间中的单位向量

(3) 将光线除以步骤2中找到的比率,然后将其添加到相机位置。这将为您提供点在相机屏幕上的投影。 摄像机屏幕上的点=光线对点/比率

(4) 找到相机屏幕中心和投影点之间的矢量。 我应该找到屏幕的中心像素吗?我该怎么做


谢谢。

考虑下图:

第一步是计算从摄影机到p
(=>
diff`)的差向量。没错

下一步是在相机坐标系中表示差分向量。由于它的轴是正交的,这可以通过点积来实现。确保轴是单位向量:

diffInCameraSpace = (dot(diff, u), dot(diff, v), dot(diff, w))
现在是缩放部分,由此产生的差分向量的z分量为
screen\u dist
。因此:

diffInCameraSpace *= screenDist / diffInCameraSpace.z

您不想将其转换回世界空间。您可能需要关于相机单元如何映射到像素的更多信息,但在这一步中,您基本上已经完成了。您可能希望将生成的
diffInCameraSpace
移动
(屏幕宽度/2,屏幕高度/2,0)
。忘记z分量,屏幕上就有了位置。

考虑下图:

第一步是计算从摄影机到p
(=>
diff`)的差向量。没错

下一步是在相机坐标系中表示差分向量。由于它的轴是正交的,这可以通过点积来实现。确保轴是单位向量:

diffInCameraSpace = (dot(diff, u), dot(diff, v), dot(diff, w))
现在是缩放部分,由此产生的差分向量的z分量为
screen\u dist
。因此:

diffInCameraSpace *= screenDist / diffInCameraSpace.z

您不想将其转换回世界空间。您可能需要关于相机单元如何映射到像素的更多信息,但在这一步中,您基本上已经完成了。您可能希望将生成的
diffInCameraSpace
移动
(屏幕宽度/2,屏幕高度/2,0)
。忘记z分量,屏幕上就有了位置。

screen\u coords=投影矩阵*模型视图矩阵*三维空间中的向量(可能是前后向的)screen\u coords=投影矩阵*模型视图矩阵*三维空间中的向量(可能是前后向的)