我有一个3D场景,想要提供一个API来控制相机。相机目前由它自己的位置描述,一个沿着相机参考框架的 z 轴的场景中的一个观察点,一个描述 y的“向上”矢量摄像机参考系的轴和视场角。我想提供至少以下操作:
二维操作(鼠标拖动或箭头键)
- 保持观察点并围绕它旋转相机。这也可以像旋转物体一样,其中的观察点描述了它的中心。我认为,在某些时候,我听说这被描述为相机在轨道中心周围“轨道运行”。
- 保持相机位置,并围绕该点旋转相机。通俗地说,我称之为“环顾四周”。对于电影摄像机,这可能被称为平移和倾斜,但在3D建模中,“平移”通常是其他东西,见下文。使用飞机主要方向,这将是相机的俯仰和偏航运动。
- 平行移动相机位置和观察点。这也可以像平行于视平面平移对象一样。据我所知,这通常在3d建模环境中称为“平移”。
一维操作(例如鼠标滚轮)
- 保持观察点并按照给定因素将相机移近。这可能是大多数人认为的“缩放”,除了那些了解真实相机的人,见下文。
- 保留所有位置,但改变视野角度。这就是“真正的”变焦:改变镜头的焦距,但没有别的。
- 将两个观察点和相机沿着连接它们的线移动一定距离。起初,这感觉非常像上面的第一项,但由于它改变了观察点,后续旋转将表现不同。我认为这是对上面2d操作的最后一点的补充,因为它们一起允许我在所有三个方向上将摄像机和观察点一起移动。电影摄影师可能称之为“小车”镜头,但我猜小车也可能与平行于观察平面的其他平移移动有关。
- 保持观察点,但改变相机距离和视野角度,使观察点平面中的投影尺寸保持不变。这可以是电影放映中的电影放映,但也可以用于调整观看者的屏幕尺寸和与屏幕的距离,以使视野与用户的环境匹配。
- 在相机参考框架中围绕 z 轴旋转。使用飞机主要方向,这将是相机的滚动运动。但它也可能感觉像是在图像平面内旋转物体。
用于描述所有上述操作的一致,明确,简洁的函数名称是什么?也许某些现有的API已经建立了什么?