它是一个抽象类,用来指定接口去映射数据到图形初级单元上。子类通过一个lookuptable来映射数据,并且控制渲染初级单元(图形库的接口)的建立。这种映射能够通过控制提供的lookup table和指定映射数据的scalar(标量)的范围来控制。这之中有一些重要的控制机制来影响这个类的一些常量。ScalarVisibility flag控制标量数据是否控制Mapper相关actors的颜色。ScalarMode ivar 用来控制是标量数据还是单元数据用来控制对象的颜色。通常情况下,点数据的标量只有在单元标量不存在时才会被用,或者你也可以控制是用点数据还是单元数据,最后,通过lookup table 来控制标量的映射是通过设置ColorMode flag来实现的。相关请看文档。
这个类的另外一个特征就是是否使用即时渲染(ImmediateModeRenderingOn)或者显示系列渲染(就是一次渲染多副)(ImmediateModeRenderingOff)如果采用display lists,一个数据结构就会被建立(大致在渲染库里),它能够快速遍历并且通过渲染库渲染。display lists的劣势在于它会需要更多的内存,因此会影响系统的运行质量。
还有一个重要的特征就是改变z-buffer去保存一致拓扑。例如,如果你要画一个有不同颜色边的网格,这个特征能够得到好的可视化线。
#ifndef __vtkMapper__h 这是 //if not defined的简写,是宏定义的一种,它是可以根据是否已经定义了一个变量来进行分支选择
没定义就定义__vtkMapper__h
分别导入vtkRenderingCoreModule.h//用来导入宏。父类vtkAbstractMapper3D.h,vtkScalarsToColors.h用来VTK_COLOR_MODE_DEFAULT和_MAP_SCALARS的使用
public:
1.通过vtkTypeMacro宏定义vtkMapper的父类是vtkAbstractMapper3D。
2.定义PrintSelf函数
3.定义浅复制函数ShallowCopy(vtkAbstractMapper *m);
4.重载标准的时间修改方法。如果lookup table被修改,这个对象也要被修改。unsigned long GetMTime();//获得修改时间
5.方法初始化mapping进程。整体由actor传输并且每一个frame都被渲染。 virtual void Render(vtkRenderer *ren, vtkActor *a)=0;
6.释放任何由这个mapper产生的图形源。元素window可以用来决定释放哪个图形源 virtual void ReleaseGraphicsResources(vtkWindow *)
7.指定一个lookup table 给mapper使用。void SetLookupTable(vtkScalarsToColors *lut);vtkScalarsToColors *GetLookupTable();
8.创建默认的lookup table。普遍用来创建一个lookup table当scalar data没有可用的时候。
9.通过turn on/off标记控制mapper的数据是否是静态的。静态数据意味着mapper不传递更新到流水线中,极大减少它用来更新mapper的时间。这只用在数据永远不改变的情况下。vtkSetMacro(Static,int);vtkGetMacro(Static,int);vtkBooleanMacro(Static,int);
10.控制标量数据如何映射到颜色上。默认情况下(ColorModeToDefault),usigned char 标量数据被用来作为颜色,并且不通过lookup table来映射,但是其他所有东西都是通过lookup table的。设置ColorModeToMapScalars意味