我需要计算相机x y位置的公式,这将迫使给定的3D点出现在屏幕的中心。换句话说,相机可以将点移动到中心,而不会改变FOV,旋转或z坐标。
答案 0 :(得分:1)
假设当前相机位置为camPos
且方向为camDir
。根据您的投影,有几个选项可以计算屏幕中心的视图光线,但大部分时间只是:
ray(t) = camPos + camDir * t
我们不想改变位置的z坐标。因此,计算参数t以达到目标点p
非常简单(假设位置具有正确的x和y坐标):
t = (p.z - camPos.z) / camDir.z
我们可以通过以下方式计算给定深度的屏幕中心的当前点:
currentScreenCenter = camPos + camDir * t
为了点击p
,camPos
必须通过这种差异进行转移:
camPos += (p - currentScreenCenter)
= p - camPos - camDir * (p.z - camPos.z) / camDir.z