写在前面:
这篇博客主要记录书中有关于vtkCamera的相关内容整理。同样也比较基础,只是希望梳理一下,慢慢学习。
vtkCamera基本概念:
相机的概念就就当于观看舞台上演员演出的眼睛。观众可以位于不同的地方、不同角度观看表演,从而得到不同的观感。那么相机也是,VTK中利用vtkCmaera来表示相机,负责将三维场景投影到二维平面,最常用的就是电脑屏幕。相机投影相关的要素可如下图表示:
图1.相机vtkCamera投影示意图
那么相机相关的要素主要有:
- 相机位置。通过vtkCamera::SetPosition()函数设置相机的位置。传入为一个三维坐标位置。
- 相机焦点。通过vtkCamera::SetFocusPoint()函数设置焦点位置。默认位置在世界坐标系的原点。
- 朝上方向。通过vtkCamera::SetViewUp()函数设置相机朝上方向。传入一个三维(x,y,z)向量。也就表示从(0,0,0)到(x,y,z)的向量。默认为(0,1,0)。前三个确定了相机的实际方向。视图也通过这三个参数确定。
- 投影方向。相机位置到相机焦点的向量方向即为投影方向。可以通过vtkCamera::GetDirectionOfPrijection()函数获得该向量。
- 投影方法。投影方法有两种:一、正交投影,Orthographic Projection,也叫平行投影,Parallel Projection,进入相机的光线与投影方向平行。二、透视投影,Perspective Projection,进入相机的光纤相交于一点。这种投影方式会产生近大远小的视觉习惯。。可以通过vtkCamera::SetParallelProjection(int flag)函数来设定相机采用那几种投影方法。
- 视角。View Angle。默认视角大小为30°。可以通过vtkCamera::SetViewAngle()来设置。
- 前后裁剪平面。裁剪平面与投影方向相交,一般与投影方向垂直。注意,只有在前后裁剪平面之间的Actor才可见(本科好像在应用光学中学过这个)。可以通过vtkCamera::SetClippingRange(double dNear, double dFar)函数设置,前一个参数是离相机近的,后一个参数是离相机远的平面。默认参数范围是(0.1,1000)。
更多详细函数可以参考VTK官方文档:vtkCamera Class Reference。
vtkCamera常用函数:
常用的相机属性设定方法在前面说的比较详细了。这里说一下创建和添加Camera的方法。
在使用vtkCamera之前需要包含相关头文件:
#include <vtkCamera.h>
利用vtkSmartPointer创建vtkCamera:
vtkSmartPointer<vtkCamera>myCamera=vtkSmartPointer<vtkCamera>::New();
将相机设置到渲染场景中: