项目屏幕指向3D地平面

时间:2014-12-20 22:37:54

标签: 3d linear-algebra perspectivecamera

我需要将屏幕上的点投影到透视摄像机渲染的3D场景的地平面上。吉文斯:

  • 坐标系恰好是左撇子,Y-up。
  • 我知道我的相机的总垂直和水平FoV(分别叫他们FG;每个人的一半是f和{{1} })。
  • 相机是查看原点g的点E。 (或者,它以球面坐标指定距离原始距离O,从地平面向上旋转的角度d,以及围绕垂直方向旋转的角度r轴。)
  • 为简单起见,我们假设屏幕点指定为远离中间到边缘的百分比。 (换句话说,屏幕中心的一个点为t,底部中间的点为0,0,右上角为0,-1等。)
  • 这是一个给定的地平面总是在摄像机的视野范围内(摄像机不允许向下倾斜,以至于地平线上方的任何点都在屏幕上)。

从2D工作我有一个解决方案,如果屏幕点仅在屏幕的中心线(x = 0),则有效。但是,我无法弄清楚如何考虑X偏移。


这是我到目前为止所拥有的。我们忽略垂直周围的1,1旋转,并在2D中工作。

complex 2D diagram exhibiting the problem

  • t是相机的来源('查看相机的目标')
  • O是相机的重点
  • E是我们想要找到的点(或者真正的距离P
  • n是相机的倾斜角度(已知)
  • rdE之间的距离(已知)
  • O是相机总垂直FoV的一半
  • 我们知道屏幕点f的y值与比率screenYPct
  • 相同

我们根据a/(a+b)g找到角度screenYPct

f

视点的高度tan(g) = a/(bottom of upper triangle) tan(f) = (a+b)/(bottom of upper triangle) a/(a+b) = tan(g)/tan(f) g = atan( screenYPct * tan(f) ) 为:y
眼点和相机原点之间的地面距离d * sin(r)为:m
角度d * cos(r)(以度为单位)只是:s
因此,距离90-rn与原始P之间)的距离为:

O

鉴于tan(g+s) = (m+n)/y n = y * tan(g+s) - m n = d * ( sin(r) * tan(atan( screenYPct * tan(f) ) + 90 - r) - cos(r) ) ,我可以围绕地平面上的原点以n角度旋转P,以找到t点的(x,z)

但是......再次,假设原始屏幕点位于屏幕的水平中间。当屏幕点偏离中线时,如何找到地面上的点?

0 个答案:

没有答案