它是一个抽象类,用来指定接口去映射数据到图形初级单元上。子类通过一个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意味着所有的标量数据将会通过lookup table来映射(对于多组件的标量数据,特一组件用来映射的可以由SelectColorArray()方法指定。)vtkSetMacro(ColorMode,int);vtkGetMacro(ColorMode,int);还有两个函数用来设置ColorMode为以上的两个类型之一

11.返回用来作为颜色的标量数据:const  char *GetColorModeAsString();

12.默认情况下,顶点的颜色被用来映射整个面的颜色。映射后,颜色将会被自动通过插值运算插入。这个选项避免颜色插入通过使用一维的纹理来映射颜色。set,get,Boolean  InterpolateScalarsBeforeMapping。

13.控制mapper是否通过他的自己的标量范围来设置lookuptable的范围。或者,他要用lookuptable的范围来代理它本身的范围设置。默认情况下,mapper是允许设置Lookuptable的范围的,但是用户在mappers和actors共享Lookuptable时会希望强制使mapper使用指定的Lookuptable而不变。set,get,Boolean UseLookupTableScalarRange

14.通过制定标量的最大值和最小值来设置其范围。这些值用来映射标量到lookup table中。当UseLookupTableScalarRange时true时无用。vtkSetVector2Macro(ScalarRange,doubles)。get

15.控制是否使用即时渲染。即时渲染很慢,但是他可以操控大数据,默认是关掉即时渲染的。如果在渲染大数据时有问题,可能要打开即时渲染。set,get,Boolean ImmediateModeRendering。

16.全局设置GlobalImmediateModeRendering,效果同上。此时为静态变量,设置之后成为全局静态变量

17.强制编译,当ImmediateModeRendering为false时,模式变为display lists,如果ImmediateModeRendering是true则没有任何渲染发生,改变改flag的值不会改变,mapper的修改时间。初始value是false,这个方法能够被其他的也是用diaplay lists的类调用。

18.控制filter怎么和标量点数据,单元属性数据一起工作。默认情况下(ScalarModeToDefault),filter将会使用点数据,并且如果过没有点数据可用,单元数据将被使用。另外你能够明确的指定filter使用点数据(ScalarModeToUsePointData)或者使用单元数据(ScalarModeToUseCellData)。同样也可以从数组中得到标量从而获得point和cell数据。如果是从数组中得到的标量数据,则在调用GetColor之前要先调用SelectColorArray。当标量模式被设置为用域数据ScalarModeToFieldData,必须调用SelectColorArray来选择域数据数组而用来作为颜色单元,在这种模式下,如果聚数据有三角片,则域数据将作为单元数据使用,并且每一个小的单元由三角片组成,而不是整片组成。

set,get ScalarMode,然后就是六种不同的模式

19.  当ScalarMode设置为 使用UsePointFieldData或者UseCellFieldData,可以通过以下方法指定哪个数组用来着色。Lookuptable将会决定怎么把数组矢量转变为颜色。

SelectColorArray(int arrayNum);void SelectColorArray(const char *arrayName);

20. 这些方法用来指定组元件,这些最好在lookup table 中做。void ColorByArrayComponent(int arrayNum, int component);void ColorByArrayComponent(const char* arrayName, int component);

21.  获得 array name,id,component

char* GetArrayName() { return this->ArrayName; }
  int GetArrayId() { return this->ArrayId; }
  int GetArrayAccessMode() { return this->ArrayAccessMode; }
  int GetArrayComponent() { return this->ArrayComponent; }

22.返回或的标量数据的方法const char *GetScalarModeAsString();

23.Set/Get一个全局的flag来控制是否采用一致拓扑 (例如多边形上的一条线)用来避免z-buffer(并且抓住渲染问题)。如果不是off,有两个方法去选择。多边形偏移量(PolygonOffset)使用图形学系统调用去移动多边形,但是不能分辨另一个多边上的点和线。移动后的Zbuffer从新映射z-buffer去分辨点,线,多边形,但是不是总是能够产生可接受的结果。如果采用这种 ShiftZBuffer的方式,那么需要设置ResolveCoincidentTopologyZShift的值。(不是所有的mappers/graphics系统都支持这个功能)

static void SetResolveCoincidentTopology(int val);
  static int  GetResolveCoincidentTopology();
  static void SetResolveCoincidentTopologyToDefault();
  static void SetResolveCoincidentTopologyToOff()
    { SetResolveCoincidentTopology(VTK_RESOLVE_OFF) ;}
  static void SetResolveCoincidentTopologyToPolygonOffset()
    { SetResolveCoincidentTopology(VTK_RESOLVE_POLYGON_OFFSET); }
  static void SetResolveCoincidentTopologyToShiftZBuffer()
    { SetResolveCoincidentTopology(VTK_RESOLVE_SHIFT_ZBUFFER); }

24.用来设置 polygon offset规模要素和单元 。当ResolveCoincidentTopology设置为PolygonOffset。这些都是全局变量。

static void SetResolveCoincidentTopologyPolygonOffsetParameters(
    double factor, double units);
  static void GetResolveCoincidentTopologyPolygonOffsetParameters(
    double& factor, double& units);

25.当ResolveCoincidentTopology设置为PolygonOffset。变量可以是face,也可以是点和线,默认是face。这些都是全局变量。

static void SetResolveCoincidentTopologyPolygonOffsetFaces(int faces);
  static int GetResolveCoincidentTopologyPolygonOffsetFaces();

26.采用z-shift方法(ShiftZBuffer):

static void SetResolveCoincidentTopologyZShift(double val);
  static double GetResolveCoincidentTopologyZShift();

27.获得数据的边界,由这样表示: (xmin,xmax, ymin,ymax, zmin,zmax)

virtual double *GetBounds();
  virtual void GetBounds(double bounds[6])
    { this->vtkAbstractMapper3D::GetBounds(bounds); }

28.这个实例变量被 vtkLODActor用来决定使用哪个mapper。它是对 render很重要的一个估量。但设置render time并不修改这个mapper。

void SetRenderTime(double time) {this->RenderTime = time;}
  vtkGetMacro(RenderTime, double);

29.获得输入以作为一个vtk数据集。这个方法在特定的mapper类中被覆盖从而返回更加特定的数据类型。

vtkDataSet *GetInput();

30.同上,但是这个函数将会被用在wrapper languages中,C++中应该使用上面的GetInput()

vtkDataSet *GetInputAsDataSet()
    { return this->GetInput(); }

31.通过lookuptable映射标量(如果有一些标量,并且ScalarVisibility is on)。返回一个 unsigned char RGBA数组。这在渲染进程中运行。alpha元素允许和另一个alpha元素(由vtkActor提供)允许标量的混合。

vtkUnsignedCharArray *MapScalars(double alpha);

32. Set/Get光照模型中的颜色模型。

vtkSetMacro(ScalarMaterialMode,int);
  vtkGetMacro(ScalarMaterialMode,int);
  void SetScalarMaterialModeToDefault()
    { this->SetScalarMaterialMode(VTK_MATERIALMODE_DEFAULT); }
  void SetScalarMaterialModeToAmbient()
    { this->SetScalarMaterialMode(VTK_MATERIALMODE_AMBIENT); }
  void SetScalarMaterialModeToDiffuse()
    { this->SetScalarMaterialMode(VTK_MATERIALMODE_DIFFUSE); }
  void SetScalarMaterialModeToAmbientAndDiffuse()
    { this->SetScalarMaterialMode(VTK_MATERIALMODE_AMBIENT_AND_DIFFUSE); }

33.返回light-model color mode。 const char *GetScalarMaterialModeAsString();

34.如果这个mapper不希望有半透明的几何体。这会在ColorMode设置为不使用映射标量使用(例如直接使用标量数据作为颜色,并且这些标量数据是不透明的(alpha组件))默认情况下放回true。an actor依然可以把一个几何体作为半透明的当在属性中设置了半透明属性。

virtual bool GetIsOpaque()(是否不透明)
    { return true; }

35.下面是一些内部函数,不要使用在渲染进程外部。由vtkHardwareSelector使用判断硬件是否支持。

virtual bool GetSupportsSelection()
    { return false; }

下面一些protected:

protected:
  vtkMapper();
  ~vtkMapper();

vtkUnsignedCharArray *Colors;

// Use texture coordinates for coloring.
  int InterpolateScalarsBeforeMapping;
  // Coordinate for each point.
  vtkFloatArray *ColorCoordinates;
  // 1D ColorMap used for the texture image.
  vtkImageData* ColorTextureMap;
  void MapScalarsToTexture(vtkDataArray* scalars, double alpha);

vtkScalarsToColors *LookupTable;
  int ScalarVisibility;
  vtkTimeStamp BuildTime;
  double ScalarRange[2];
  int UseLookupTableScalarRange;
  int ImmediateModeRendering;
  int ColorMode;
  int ScalarMode;
  int ScalarMaterialMode;

double RenderTime;

// for coloring by a component of a field data array
  int ArrayId;
  char ArrayName[256];
  int ArrayComponent;
  int ArrayAccessMode;

int Static;

int ForceCompileOnly;

private:
  vtkMapper(const vtkMapper&);  // Not implemented.
  void operator=(const vtkMapper&);  // Not implemented.

结论:以上我们可以看到,在mapper类中,主要定义了父类,然后是PrintSelf和浅复制(指两个对象指向的还是同一个引用)函数   。然后是修改时间。初始化,输出图形元。创建一个默认的lookuptable。接下来就是对mapper中个函数属性的一些设置:是否使用静态数据,是否使用lookuptable来映射颜色,返回用来作为颜色的标量数据,是否用顶点颜色插值产生面的颜色,是否通过他的自己的标量范围来设置lookuptable的范围,通过制定标量的最大值和最小值来设置其范围,是否使用即时渲染控制,filter怎么和标量点数据,单元属性数据一起工作,也就是采用哪种模式作为颜色渲染。控制是否采用一致拓扑 (例如多边形上的一条线)用来避免z-buffer(并且抓住渲染问题),如果不是可以采用PolygonOffset和ShiftZBuffe,vtkLODActor用来决定使用哪个mapper,.获得输入以作为一个vtk数据集Set/Get光照模型中的颜色模型,设置透明和半透明。 其实整体上就是一个颜色的问题,渲染着色。

18是重点,18与filter相连,而mapper与actor相连。mapper只解决颜色?actor再加纹理,属性?

vtk 中vtkMapper的各函数解析相关推荐

  1. Matlab中bsxfun和unique函数解析

    一.问题来源 来自于一份LSH代码,记录下来. 二.函数解析 2.1 bsxfun bsxfun是一个matlab自版本R2007a来就提供的一个函数,作用是"applies an elem ...

  2. Python中numpy库unique函数解析

    a = np.unique(A) .unique()函数去除其中重复的元素,并按元素由大到小返回一个新的无元素重复的元组或者列表 import numpy as np A = [1, 2, 2, 5, ...

  3. java.lang中String=和equals()函数解析

    java.lang是java语言的基础包.String类为lang包中的一个基础类.本文主要讨论 "="和"equals()"方法对String的不同判断结果. ...

  4. Unity3D中的线性插值Lerp()函数解析

    http://www.cnblogs.com/rongweijun/p/5739074.html

  5. matlab中trapz,MATLAB中trapz和cumtrapz函数

    这两个函数都是MATLAB中的内置函数,是基于梯形法则的数值积分公式 例如我们有函数y=x^3-2x-3,为了计算在[0,1]上的积分,可以这么做: 其中x和y分别是自变量和对应的值,trapz其实就 ...

  6. Halcon中OCR的实现及关键函数解析

    OCR的实现共分为两步,1是使用字符数据来训练OCR.2是使用OCR进行字符的识别. 训练分类器 训练分类器共分为4步: 1是使用阈值来分割字符区域: 2是调用append_ocr_trainf函数将 ...

  7. Python中sort和sorted函数代码解析

    Python中sort和sorted函数代码解析 本文研究的主要是Python中sort和sorted函数的相关内容,具体如下. 一.sort函数 sort函数是序列的内部函数 函数原型: L.sor ...

  8. python中如何调用函数_如何调用python中的内置函数?(实例解析)

    对于第一次接触到python这门编程语言的朋友来说,刚刚开始学习python编程的时候对于python函数调用这一方面的了解比较少,在这篇文章之中我们就来了解一下python怎么调用函数. Pytho ...

  9. rectpuls函数 matlab,Matlab中的rectpuls函数解析

    Matlab中的rectpuls函数解析 Matlab中的rectpuls函数解析 1.先看Matlab中的解释: This MATLAB function returns a continuous, ...

  10. 【ROS学习】- tf学习 - tf中重要函数解析 (陆续更新....)

    文章目录 一.函数waitForTransform().lookupTransform() 具体解释 二.函数 tf::StampedTransform().sendTransform() 具体解释 ...

最新文章

  1. Linux安装gcc时碰到的有关问题解决(解决gcc依赖有关问题)
  2. 如何使用vscode安装和调试Java程序
  3. Spring5源码 - 01 BeanDefination源码分析
  4. android使用Activity
  5. C/C++学习之路_八: 复合类型
  6. python怎么暂停爬虫_python Python爬虫防封杀方法集合
  7. 【Nginx那些事】nginx配置实例(一)反向代理
  8. 微服务设计模式(下)
  9. 备份域控制器AD 保护的最佳实践(第 1 部分)
  10. python采集数据搭建小说网站_Python制作爬虫采集小说
  11. SQL语句生成器 V2.0
  12. 四种大数据分析方法 ,大数据学习入门必须掌握!
  13. BeanUtils与PropertyUtils的常用方法
  14. 网站服务器域名费用入什么科目,企业域名服务费记什么科目
  15. tcp/udp 常用端口列表
  16. 《一切都是最好的安排》脑图
  17. FNL资料的变量说明
  18. modbus串口调试助手 MODBUS调试 智能仪表通讯必备软件 RS485串口通讯
  19. Unity3D求向量间的夹角
  20. 【今日学长】来自柚子帮学长--留学生自用英语写作润色工具分享

热门文章

  1. kali流量转发后依然断网_虚拟运营商流量卡列表
  2. 那时候的漫画【怀旧贴】
  3. CentOS 7.3安装详解
  4. 最新PHP编程零基础入门项目实战教程(完整)
  5. hadoop启动cgroups,centos6.5+hadoop2.7.2
  6. 回文数五位和六位c语言,特殊回文数
  7. android 用户绑定银行卡,android 开发 怎么实现银行卡转账,绑定银行卡。 怎么实现评论回复功能。...
  8. 房屋租赁合同法律规定是怎样的
  9. dlna 服务器 性能,dlna 使用体验,供大家参考,欢迎交流
  10. 机器人开发--Odoo(OpenERP)