什么是查看函数的算法?
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
为原点,其余为[单位]轴向量,循环满足右手法则
- 当
N
与 k
平行时,您不能使用它。在这种情况下,向上矢量可以是平行于 X-Y 平面的任意矢量。
- 您应该决定的其余参数是
z
,它控制缩放。焦点的位置取决于目标对象的大小和您需要的缩放量。
我有一个通过设置这些值来控制的相机:
[[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
为原点,其余为[单位]轴向量,循环满足右手法则- 当
N
与k
平行时,您不能使用它。在这种情况下,向上矢量可以是平行于 X-Y 平面的任意矢量。 - 您应该决定的其余参数是
z
,它控制缩放。焦点的位置取决于目标对象的大小和您需要的缩放量。