4.7 Using Texture
材质贴图的本质是一个2D的图像可以渲染过程中被贴在物体的表面,来创造出更丰富的渲染效果。材质贴图需要两个信息:
- texture map,即2D的图像,在VTK中以
vtkImageData
的dataset来表示。 - texture coordinate,控制贴图在物体表面的位置。
下面是示例代码和实现效果:
# Load in the texture map. A texture is any unsigned char image. If it
# is not of this type, you will have to map it through a lookup table
# or by using vtkImageShiftScale.
bmpReader = vtk.vtkBMPReader()
bmpReader.SetFileName("/Volumes/Data/VTK/VTK-6.2.0/.ExternalData/MD5/8aa8fa634bb80a41256b2fd0e01819af")
atext = vtk.vtkTexture()
atext.SetInputConnection(bmpReader.GetOutputPort())
atext.InterpolateOn()
# Create a plane source and actor. The vtkPlanesSource generates
# texture coordinates.
plane = vtk.vtkPlaneSource()
planeMapper = vtk.vtkPolyDataMapper()
planeMapper.SetInputConnection(plane.GetOutputPort())
planeActor = vtk.vtkActor()
planeActor.SetMapper(planeMapper)
planeActor.SetTexture(atext)
注:这里贴图的坐标就是plane的坐标,vtkPlaneSource
会自动生成这个坐标。
4.8 Picking
pick是一个可视化中很常见的任务,选定一个点作为pick的起始位置,执行vtkAbstractPicker
的Pick()
方法,根据pick的类型,返回选取点的信息,最简单的信息是三维的坐标(x-y-z global coordinate),或者包括cell id, point id等。pick的语法如下:
Pick(selectionX, selectionY, selectionZ, Renderer)
4.9 vtkCoordinate and Coordinate Systems
VTK支持多种坐标系,vtkCoordinate
这个类负责坐标系之间的转换。支持的坐标系如下:
-
DISPLAY: 窗口(
vtkWindow
)中的x-y坐标,以像素为单。以窗口的左下方为原点。 - NORMALIZED DISPLAY: 归一化的DISPLAY,[0,1]范围。
- VIEWPOINT: viewpoint(即一个renderer)内的x-y坐标,以像素为单位。
- NORMALIZED VIEWPOINT: 归一化的VIEWPOINT。
- VIEW: x-y-z(-1, 1) 以camera为视角的坐标系,z是深度。
- WORLD: x-y-z全局坐标
- USERDEFINED: 用户自定义的空间,用户必须相应的坐标系转换方法。
4.10 Controlling vtkActor2D
vtkActor2D
类似于vtkActor
,不同之处在于它是绘制在一个平面上的,没有一个4*4的转换矩阵。它也有mapper:vtkMapper2D
和property:vtkProperty2D
,最难处理的部分在于它的位置处理。要做到这一点,必须要使用上文提到的vtkCoordinate
。
4.11 Annotation
VTK提供了两种方式来标注图像:
- 2D annotation: 文字可以被覆盖在3D图像的上方(overlay plane),即在顶层的图层上标注。
- 3D annotation: 文字也被渲染成3D的多边形数据,就像其他3D图形一样。
2D annotation
3D annotation and vtkFollower
3D的标注一般使用vtkVectorText
来创建字符串的多边形表示,然后把它放在合适的位置上。一个用于放置3D标注的类是vtkFollower
,这是个actor
,能确保被渲染的actor始终正对着camera,所以不管图像怎么旋转位移,字符始终能够看清。
这张图是一个坐标系的图示,不管坐标系怎么旋转移动,指示原点的"Origin"标识始终正对着镜头
4.12 Special Plotting Classes
VTK提供了几种复杂的绘图操作:
- Scalar Bar
-
vtkScalarBar
用来创建颜色和数值之间的对应关系,scalar bar有三个组成部分:一个长方形的色彩带;指示数值的label;ScalarBar的名字。 - Scalar Bar的使用有以下几点:
- 指向一个
vtkLookupTable
,它定义了颜色和数值之间的对应关系。 - 设定Scalar Bar的位置和朝向(水平/垂直)
- 可选择Scalar Bar的颜色、标签的数字、题目的文字等。
- 指向一个