VTK用户指南1:5.2可视化多边形数据

5.2可视化多边形数据

手动创建vtkPolyData

多边形数据(vtkPolyData)是可视化数据的一种重要形式。它的重要性在于它是图形硬件/渲染引擎的几何接口。其他数据类型必须转换为多边形数据才能进行渲染,vtkImageData(图像和体积)除外,它使用特殊的成像或体积渲染技术)。您可能希望参考第104页上的“将单元格提取为多边形数据”,了解如何执行此转换。

多边形数据(vtkPolyData)由顶点和多顶点的组合组成;直线和多段线;三角形、四边形和多边形;还有三角带。大多数过滤器(输入vtkPolyData)将处理这些数据的任意组合;但是,有些过滤器(如vtkDecimatePro和vtkTubeFilter)只处理部分数据(三角形网格和线)。
多边形数据可以用几种不同的方式构造。通常,您将创建一个vtkPoints来表示点,然后创建一到四个VTKCellarray来表示顶点、直线、多边形和三角形条带连接。下面是一个来自VTK/Examples/DataManipulation/Tcl的示例/CreateStrip.tcl。它使用单个三角形条带创建vtkPolyData。

vtkPoints points
 points InsertPoint 0 0.0 0.0 0.0
 points InsertPoint 1 0.0 1.0 0.0
 points InsertPoint 2 1.0 0.0 0.0
 points InsertPoint 3 1.0 1.0 0.0
 points InsertPoint 4 2.0 0.0 0.0
 points InsertPoint 5 2.0 1.0 0.0
 points InsertPoint 6 3.0 0.0 0.0
 points InsertPoint 7 3.0 1.0 0.0
vtkCellArray strips
 strips InsertNextCell 8;#number of points
 strips InsertCellPoint 0
 strips InsertCellPoint 1
 strips InsertCellPoint 2
 strips InsertCellPoint 3
 strips InsertCellPoint 4
 strips InsertCellPoint 5
 strips InsertCellPoint 6
 strips InsertCellPoint 7
vtkPolyData profile
 profile SetPoints points
 profile SetStrips strips
vtkPolyDataMapper map
 map SetInput profile
vtkActor strip
 strip SetMapper map
 [strip GetProperty] SetColor 0.3800 0.7000 0.1600

在C++中,这里展示了如何创建多维数据集 (VTK/Examples/DataManipulation/Cxx/Cube.cxx).的另一个例子。这次我们创建了六个四边形,以及立方体顶点处的标量值。

int i;
 static double x[8][3]={{0,0,0}, {1,0,0}, {1,1,0}, {0,1,0},
 {0,0,1}, {1,0,1}, {1,1,1}, {0,1,1}};
 static vtkIdType pts[6][4]={{0,1,2,3}, {4,5,6,7}, {0,1,5,4},
 {1,2,6,5}, {2,3,7,6}, {3,0,4,7}};
 // Create the building blocks of polydata including data attributes.
 vtkPolyData *cube = vtkPolyData::New();
 vtkPoints *points = vtkPoints::New();
 vtkCellArray *polys = vtkCellArray::New();
 vtkFloatArray *scalars = vtkFloatArray::New();
  // Load the point, cell, and data attributes.
 for (i=0; i<8; i++) points->InsertPoint(i,x[i]);
 for (i=0; i<6; i++) polys->InsertNextCell(4,pts[i]);
 for (i=0; i<8; i++) scalars->InsertTuple1(i,i);
 // We now assign the pieces to the vtkPolyData.
 cube->SetPoints(points);
 points->Delete();
 cube->SetPolys(polys);
 polys->Delete();
 cube->GetPointData()->SetScalars(scalars);
 scalars->Delete();

vtkPolyData可以使用顶点、直线、多边形和三角形条带的任意组合构造。
此外,vtkPolyData支持一组广泛的运算符,允许您编辑和修改底层结构。更多信息,请参阅第345页的“多边形数据”.

生成曲面法线

渲染多边形网格时,您可能会发现图像清楚地显示了网格的镶嵌面性质(图5-10)。使用Gouraud阴影可以改善图像(参见第53页的“Actor Properties”)。但是,Gouraud着色取决于网格中每个点上法线的存在。vtkPolyDataNormals过滤器可用于在网格上生成法线。第217页“Extrusion”中的脚本、第94页的‘‘’Glyphing”以及第102页“Color An Isosurface With Another Scalar用另一个标量为等值面着色”中的脚本都使用vtkPolyDataNormals。
在这里插入图片描述

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片