写在前面:
这篇博客简要根据书本内容简要介绍一些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 <vtkCoordinate.h>
坐标系统可以细分为以下几类:
- 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可以为DISPLAY、NORMALIZED DISPLAY、VIEWPORT、NORMALIZED //VIEWPORT、VIEW、WORLD
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)