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。
暂无评论内容