VTK学习-vtkColor与vtkTexture

来源:互联网 发布:echo php 编辑:程序博客网 时间:2024/06/03 17:02

写在前面:

这篇博客也是按照书上的顺序来记录的。由于书上对于vtkColor与vtkTexture介绍较少,而且这两类目前用到的地方也比较少,所以简要记录一下要点,还有记录一下容易忽略的地方。以后有需要的时候,再来回过头来详解。

vtkColor

首先,颜色是视觉观感中重要的一部分。那么,在VTK中,颜色是Actor的一种重要属性。颜色的表达通过vtkColor类来储存。注意,这里介绍的是储存,而非实现。意思就是可以通过vtkColor表示某种颜色,但是具体到哪个物体,哪个面要实现颜色,并不是由vtkColor完成的。vtkColor派生自vtkTuple类。而颜色是物体的属性,具体的控制要由vtkProperty来实现。
有关于vtkColor类的描述可以参考:vtkColor Class Reference。
从官方文档我们可以知道:vtkColor是一种储存颜色的数据类型。通过这个类,我们可以轻松地、系统地表达出VTK支持的任何一种颜色。
那么对于颜色的表达,VTK采用了RGB与HSV两种颜色系统来描述。

  • RGB颜色系统:由R、G、B三种组合表示。三个分量取值范围均为0~1。
  • HSV颜色系统:由H、S、V三种组合表示。H–>Hue(色相);S–>Saturation(饱和度);V–>Value(值),也可以理解为Intensity(强度)、Bright(亮度)。同样三个分量取值范围均为0~1。

就具体的使用方法而言。vtkProperty::SetColor(r,g,b)可以设置RGB颜色系统的颜色属性值。 类vtkLookupTable提供了HSV颜色系统设置的方法。可参考官方文档:vtkLookupTable Class Reference。很抱歉,找了半天也没找到如何设置HSV颜色,只找到了设置三种颜色分量范围的函数。等到用的时候再仔细研究吧。
具体的使用实例我在以前的博客中有提到:VTK学习-vtkLight。
这里也可以再次引用一下这张表。


表1 常用颜色RGB和HSV值的对照
这里写图片描述


VTK中与颜色相关的类还有vtkColorFunction、vtkLookupTable与vtkColorTransferFunction,这些类都派生自vtkScalarsToColors。

vtkTexture:

纹理映射可以让图像更加逼真。说白了,就是渲染时将二维图像“贴”到物体表面。由于二维图像千奇百怪,所以“贴”图后的物体也就具有了多种样式的外表。可以简单理解为穿着不同衣服的演员。
VTK用vtkTexture类来处理二维纹理贴图。但是首先要读入一张JPG或JPEG的图片,这个功能可以通过vtkJPEGReader类实现。相关官方文档可参考:vtkJPEGReader Class Reference。

vtkTexture使用详例:

vtkSmartPointer<vtkJPEGReader>reader=vtkSmartPointer<vtkJPEGReader>::New();//读入一张JPEG二维格式图reader->SetFileName("...\\XXXXX.jpeg");vtkSmartPointer<vtkTexture>texture=vtkSmartPointer<vtkTexture>::New();//将读入的图片传入texturetexture->SetInputConnection(reader->GetOutputPort());texture->InterpolateOn();vtkSmartPointer<vtkPlaneSource>plane=vtkSmartPointer<vtkPlaneSource>::New();vtkSmartPointer<vtkPolyDataMapper>mapper=vtkSmartPointer<vtkPolyDataMapper>::New();mapper->SetInputConnection(plane->GetOutputPort());vtkSmartPointer<vtkActor>actor=vtkSmartPointer<vtkActor>::New();actor->SetMapper(mapper);//通过SetTexture函数将texture添加进actoractor->SetTexture(texture);

写在最后:

这一部分内容比较简单,所以还是要继续努力保持钻研。