Math 计算相机x y位置以强制3d点出现在屏幕中心的公式

Math 计算相机x y位置以强制3d点出现在屏幕中心的公式,math,3d,Math,3d,我需要计算相机x y位置的公式,这将迫使给定的3D点出现在屏幕的中心。换句话说,摄影机平移以将点移动到中心,而不改变FOV、旋转或z坐标。假设当前摄影机位置为camPos,其方向为camDir。根据您的投影,有几个选项可以选择如何计算屏幕中心的视图光线,但大多数情况下,它只是: ray(t) = camPos + camDir * t 我们不想改变位置的z坐标。因此,计算参数t以命中目标点p非常简单(假设位置具有正确的x和y坐标): 我们可以通过以下公式计算给定深度下屏幕中心的当前点: cur

我需要计算相机x y位置的公式,这将迫使给定的3D点出现在屏幕的中心。换句话说,摄影机平移以将点移动到中心,而不改变FOV、旋转或z坐标。

假设当前摄影机位置为
camPos
,其方向为
camDir
。根据您的投影,有几个选项可以选择如何计算屏幕中心的视图光线,但大多数情况下,它只是:

ray(t) = camPos + camDir * t
我们不想改变位置的z坐标。因此,计算参数t以命中目标点
p
非常简单(假设位置具有正确的x和y坐标):

我们可以通过以下公式计算给定深度下屏幕中心的当前点:

currentScreenCenter = camPos + camDir * t
要点击
p
camPos
必须根据此差异进行移位:

camPos += (p - currentScreenCenter)
        = p - camPos - camDir * (p.z - camPos.z) / camDir.z
camPos += (p - currentScreenCenter)
        = p - camPos - camDir * (p.z - camPos.z) / camDir.z