vtk相机_VTK 相机类vtkCamera原理及用法

vtk是著名的开源三维渲染库,在三维渲染过程中的一个非常重要的内容就是相机即vtkCamera类的设置。在VTK中,相机的实质是一个观测点。VTK的官方Doc对vtkCamera写的十分简略,暗坑很多。在学习和使用vtkCamera的过程中,我走了很多弯路。在我的应用中,我希望能够根据现实中相机的Transform Matrix完全模拟设置vtkCamera。下面根据我的经验和理解,介绍一下vtkCamera,希望对被人能有帮助。

vtkCamera参数

vtk相机_VTK 相机类vtkCamera原理及用法_第1张图片

上图是vtkCamera模型示意图,虽然这个图来自于另一个3D库的文档,但是原理一样。要注意的是虽然左边画了个摄像机,但是其实图示的包括焦点在内都是在相机内部的。下面利用这个图来解释一下vtkCamera的各个成员变量的含义。

WindowCenter

WindowCenter按照字面意思是窗口的中心。在相机制造过程中难免存在一定的装配误差,所以透镜的中心往往不能完全对准传感器的中心,而是有非常微小的误差。所以我们在用vtk相机模拟现实中相机时也应该体现这一现象。WindowCenter实质上就是成像的一个offset偏移量。在vtk中WindowCenter的坐标范围是([-1,+1], [-1,+1])。比方说,如果理想情况,图像成像中心(Focal Point)就在窗口的中心,那么WindowCenter就是(0, 0)。如果希望把成像平移到窗口的右上角,那么就应该设置成(1, 1)。根据官方文档,这个量一般在同一窗口显示多个渲染器时才需要设置。但实际上,如果你需要vtk完全模拟现实相机,也要考虑设置这个量,否则永远有一个偏移量。反过来,如果希望图像平移也可以修改这个参数。

这里要注意的是,WindowCenter的正方向是向右向上的。而成像平面的坐标系往往是向右向下的。小心正负号的设置。另外,平移的对象是图像,而不是在三维空间移动相机。

FocalPoint

FocalPoint即焦点位置。在现实相机中焦点在成像平面中心,即在光心的后面(与被摄物体在光心的两侧)。但是在建模时为了简化我们往往对称到光心前面(与被摄物体在光心同侧)。注意这里要求的是焦点的三维坐标,而不仅仅是焦距。因为焦点不仅确定了成像平面的位置,还与光心位置Position一同确定了相机镜头的朝向。

Position

这里的Position指的实际上是光心的位置,或者说对应小孔相机模型中小孔的位置。

ViewUp

ViewUp指图像的正方向。由Position和FocalPoint我们可以确定5个自由度,相机仍然可以沿着主光轴任意旋转。所以这里要指定正方向,即Vie

你可能感兴趣的:(vtk相机)