VTK学习-坐标系统

写在前面:

这篇博客简要根据书本内容简要介绍一些VTK中要用到的坐标系统与空间变换。这一部分与计算机图形学结合更加紧密。想起之前也“被迫”研究过一段时间的计算机图形学中三维显示部分,现在简单学一学,提示一下,也挺好。

坐标系统:

书中说计算机图形学中,但我觉得用VTK中更合适,VTK中常用的坐标系统又4种:Model坐标系统、World坐标系统、View坐标系统和Display坐标系统。除此之外,有两种表示坐标点的方法:1.屏幕像素值为单位;2.归一化坐标值[-1,1]。

  • Model坐标系统:定义模型时的坐标系统,一般为局部的笛卡尔坐标系。
  • World坐标系统:Actor、相机、光照所在的三维空间坐标系。Actor类的一个功能就是通过放缩、旋转、平移等方法将Model坐标系转换到World坐标系。每一个模型可以定义一个自己的Model坐标系。但World坐标系只有一个。
  • View坐标系统:相机所看见的坐标系统。X、Y、Z轴取值均为[-1,1]。X、Y表示像素平面上的位置,Z表示到降级的距离。World坐标系通过相机转变为View坐标系。
  • Display坐标系统:实际电脑显示屏幕的坐标系统。屏幕上显示的不同窗口的大小会影响View坐标系的坐标轴[-1,1]到Diaplay坐标系的映射(对应关系)。一个显示屏幕可以显示多个不同的渲染场景。vtk5.10.1可以利用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将SetViewport改为vtkViewport类了。详情可以参见:virtual void vtkViewport::SetViewport 。

vtkCoordinate

VTK提供类vtkCoordinate来管理不同坐标系之间的变换。使用该类也需要包含相应头文件:

#include 

坐标系统可以细分为以下几类:

  • DISPLAY——X、Y轴的坐标取值为渲染窗口的像素值。坐标原点位于渲染窗口的左下角。注意,这个坐标系是一个二维坐标系统。所有VTK里二维坐标系统都是左下角为坐标原点。而且是右手坐标系。
  • NORMALIZED DISPLAY——X、Y轴取值范围为[0,1]。其实就是DISPLAY坐标系归一化了。定义在渲染窗口中。
  • VIEWPORT——X、Y的坐标值定义在视口或者渲染器(Renderer)中。同样为二维坐标系。
  • NORMALIZED VIEWPORT——VIEWPORT归一化之后的坐标系。X、Y的取值范围为[0,1]。
  • VIEW——X、Y、Z坐标值定义在相机所在的坐标系统里。取值范围[-1,1],Z表示深度,即物体离相机的距离。
  • WORLD——X、Y、Z坐标值定义在世界坐标系统中。

VTK中利用vtkCoordinate来表示坐标系统。内部提供了函数接口来定义坐标系统。具体函数可以参考vtkCoordinate Class Reference。一般设置坐标系统函数形式为:

vtkCoordinate::SetCoordinateSystemToXXXXXX();
//XXXXXX可以为DISPLAYNORMALIZED DISPLAYVIEWPORTNORMALIZED //VIEWPORT、VIEW、WORLD

你可能感兴趣的:(VTK,vtk)