什么是查看函数的算法?

What is an Algorithm for look at function?

我有一个通过设置这些值来控制的相机:

[[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(): returns 向量长度
的函数 k:Z轴单位矢量(灰度矢量)
V:视图方向(红色矢量)
T:平行于X-Y平面的临时向量(蓝色向量)
cross():returns 两个向量的叉积
的函数 U:相机向上矢量(绿色矢量)
F:相机焦点(洋红色 x)
z:缩放因子(正标量,即焦点与相机位置的距离)

注意几点:

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