我需要将屏幕上的点投影到透视摄像机渲染的3D场景的地平面上。吉文斯:
F
和G
;每个人的一半是f
和{{1} })。g
的点E
。 (或者,它以球面坐标指定距离原始距离O
,从地平面向上旋转的角度d
,以及围绕垂直方向旋转的角度r
轴。)t
,底部中间的点为0,0
,右上角为0,-1
等。)从2D工作我有一个解决方案,如果屏幕点仅在屏幕的中心线(x = 0),则有效。但是,我无法弄清楚如何考虑X偏移。
这是我到目前为止所拥有的。我们忽略垂直周围的1,1
旋转,并在2D中工作。
t
是相机的来源('查看相机的目标')O
是相机的重点E
是我们想要找到的点(或者真正的距离P
)n
是相机的倾斜角度(已知)r
是d
和E
之间的距离(已知)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-r
(n
与原始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)
点
但是......再次,假设原始屏幕点位于屏幕的水平中间。当屏幕点偏离中线时,如何找到地面上的点?