
VTK 三维场景的基本要素:
计算机图形学里常用的坐标系统主要有四种,分别是:Model坐标系统、World坐标系统、View坐标系统和Display坐标系统,以及两种表示坐标点的方式:以屏幕像素值为单位和归一化坐标值(各坐标轴取值都为[-1, 1])。它们之间的关系如图所示。

Model坐标系统是定义模型时所采用的坐标系统,通常是局部的笛卡尔坐标系。例如,我们要定义一个表示球体的Actor,一般的做法是将该球体定义在一个柱坐标系统里。
World坐标系统是放置Actor的三维空间坐标系,Actor其中的一个功能就是负责将模型从Model坐标系统变换到World坐标系统。每一个模型可以定义有自己的Model坐标系统,但World坐标系只有一个,每一个Actor必须通过放缩、旋转、平移等操作将Model坐标系变换到World坐标系。World坐标系同时也是相机和光照所在的坐标系统。
View坐标系统表示的是相机所看见的坐标系统。X、Y、Z轴取值为[-1, 1],X、Y值表示像平面上的位置,Z值表示到相机的距离。相机负责将World坐标系变换到View坐标系。
Display坐标系统跟View坐标系统类似,但是各坐标轴的取值不是[-1, 1],而是使用屏幕像素值。屏幕上显示的不同窗口的大小会影响View坐标系的坐标值[-1, 1]到Display坐标系的映射。可以把不同的渲染场景放在同一个窗口进行显示,例如我们把一个窗口分为四个视口,用vtkRenderer::SetViewport()来设置视口的范围(取值为[0, 1]):
renderer1->SetViewport(0.0, 0.0, 0.5, 0.5);
renderer2->SetViewport(0.5, 0.0, 1.0, 0.5);
renderer3->SetViewport(0.0, 0.5, 0.5, 1.0);
renderer4->SetViewport(0.5, 0.5, 1.0, 1.0);
在VTK里,Model坐标系统用得比较少,其他三种坐标系统经常使用。根据坐标点单位、取值范围等不同,可以将坐标系统分为:
DISPLAY:X、Y轴的坐标取值为渲染窗口的像素值。坐标原点位于渲染窗口的左下角,这个对于VTK里所有的二维坐标系统都是一样的,且VTK里的坐标系统都是采用右手坐标系。
NORMALIZEDDISPLAY:X、Y轴坐标取值范围为[0, 1],跟DISPLAY一样,也是定义在渲染窗口里的。
VIEWPORT:X、Y的坐标值定义在视口或者渲染器(Renderer)里。
NORMALIZEDVIEWPORT:X、Y坐标值定义在视口或渲染器里,取值范围为[0, 1]。
VIEW:X、Y、Z坐标值定义在相机所在的坐标系统里,取值范围为[-1, 1],Z值表示深度信息。
WORLD:X、Y、Z坐标值定义在世界坐标系统,参考图3.9。
USERDEFINED:用户自定义坐标系统。
vtkCoordinate 类提供的设置以上坐标系统的方法是:
SetCoordinateSystemToDisplay()
SetCoordinateSystemToNormalizedDisplay()
SetCoordinateSystemToViewport()
SetCoordinateSystemToNormalizedViewport()
SetCoordinateSystemToView()
SetCoordinateSystemToWorld()