Algorithm 什么是注视函数的算法?

Algorithm 什么是注视函数的算法?,algorithm,math,3d,camera,geometry,Algorithm,Math,3d,Camera,Geometry,我的相机仅通过设置以下值进行控制: [[position_x, position_y, position_z], [focal_point_x, focal_point_y, focal_point_z], [view_up_x, view_up_y, view_up_z]] 我有一个我想看的点,在那个点上是正常的,还有我想看的距离 如何设置这样的相机模型来观察一个点(具有法向量和从何处观察的距离)?我不确定是否正确,但应该是这样的: C = P + (d/len(N)) * N k =

我的相机仅通过设置以下值进行控制:

[[position_x, position_y, position_z],
 [focal_point_x, focal_point_y, focal_point_z],
 [view_up_x, view_up_y, view_up_z]]
我有一个我想看的点,在那个点上是正常的,还有我想看的距离


如何设置这样的相机模型来观察一个点(具有法向量和从何处观察的距离)?

我不确定是否正确,但应该是这样的:

C = P + (d/len(N)) * N
k = [0 0 1]
V = -N;
T = cross(V, k)
U = cross(T, V)
F = C + (z*/len(V)) * V
其中,
C
:摄像机位置(品红色点)
P
:目标位置(红点)
N
:法向量(黑向量)
d
:所需距离
len()
:返回向量长度的函数
k
:Z轴单位矢量(灰色矢量)
V
:视图方向(红色向量)
T
:与X-Y平面平行的临时向量(蓝色向量)
cross()
:返回两个向量的叉积的函数
U
:摄像机上方向向量(绿色向量)
F
:相机焦点(洋红色x)
z
:缩放因子(正标量,即焦点到相机位置的距离)

需要记住的几点:

  • 这将始终保持上方向向量的z分量为正。根据
    cross()
    函数的实现,可能需要交换参数
  • [C,V,U,T]
    实际上形成了一个三维局部坐标系,其中
    C
    是其原点,其余是循环满足右手法则的[unit]轴向量
  • N
    k
    平行时,不能使用此选项。在这种情况下,上方向向量可以是平行于X-Y平面的任意向量
  • 您应该决定的其余参数是控制缩放的
    z
    。焦点的位置取决于目标对象的大小和所需的缩放量

将帧中的点居中,使其尽可能小(边缘尽可能锋利)。该点处的
法线是什么意思?@MBo:我尝试查看网格上的一个点,因此在该点处有一个法线来帮助我查看该网格-查看它