zoukankan      html  css  js  c++  java
  • VTK 图形进阶_vtkPolyData数据生成与显示

    1.VTK图像处理引言

    图像数据的应用非常广泛,最贴近日常生活的应用是3D游戏,其中每个角色的模型、场景等都是图形数据。当然,游戏仅仅是图像数据的一个应用点。图形在CAD(计算机辅助设计)、影视、医学、地质、气象数据建模等领域中均有着广泛的应用。vtkPolyData是VTK中常用的数据结构之一,可以表示小到一个点、一条线,达到一个模型、一个场景等。

    2.vtkPolyData数据生成与显示

    之前也曾说过,在这里只是简单的回顾,更重要滴在于深入地理解。
    VTKPolyData主要由几何结构数据、拓扑结构数据、属性数据组成。
    几何结构数据:组成模型的点集;
    拓扑结构数据:这些点根据一定的连接关系组成的单元数据;表明集合点集之间的拓扑关系
    属性数据:与几何结构数据和拓扑结构数据相关联,属性数据可以是标量、向量或者张量。
    例如,可以为其中的每个点定义曲率属性数据,也可以为其中的每一个单元定义一个法向量属性数据。在VTKPolyData可视化中会利用这些属性数据直接或者间接计算单元或点的颜色。
    实例如下:
     1 #include <vtkAutoInit.h>
     2 VTK_MODULE_INIT(vtkRenderingOpenGL);
     3  
     4 #include <vtkSmartPointer.h>
     5 #include <vtkConeSource.h>
     6 #include <vtkPolyData.h>
     7 #include <vtkPolyDataMapper.h>
     8 #include <vtkActor.h>
     9 #include <vtkRenderer.h>
    10 #include <vtkRenderWindow.h>
    11 #include <vtkRenderWindowInteractor.h>
    12  
    13 int main()
    14 {
    15     vtkSmartPointer<vtkConeSource> coneSource =
    16         vtkSmartPointer<vtkConeSource>::New();
    17     coneSource->Update();
    18  
    19     vtkSmartPointer<vtkPolyData> polyData =
    20         vtkSmartPointer<vtkPolyData>::New();
    21     polyData = coneSource->GetOutput();
    22     int nPoints = polyData->GetNumberOfPoints();
    23     int nCells = polyData->GetNumberOfCells();
    24     std::cout << "几何数据(点数):" << nPoints << std::endl;
    25     std::cout << "拓扑数据(单元):" << nCells << std::endl;
    26  
    27     vtkSmartPointer<vtkPolyDataMapper> mapper =
    28         vtkSmartPointer<vtkPolyDataMapper>::New();
    29     mapper->SetInputData(polyData);
    30  
    31     vtkSmartPointer<vtkActor>  actor =
    32         vtkSmartPointer<vtkActor>::New();
    33     actor->SetMapper(mapper);
    34  
    35     vtkSmartPointer<vtkRenderer> render =
    36         vtkSmartPointer<vtkRenderer>::New();
    37     render->AddActor(actor);
    38     render->SetBackground(10, 0, 0);
    39  
    40     vtkSmartPointer<vtkRenderWindow> rw =
    41         vtkSmartPointer<vtkRenderWindow>::New();
    42     rw->AddRenderer(render);
    43     rw->SetSize(640, 480);
    44     rw->SetWindowName("PolyData Structure Learning");
    45     rw->Render();
    46  
    47     vtkSmartPointer<vtkRenderWindowInteractor> rwi =
    48         vtkSmartPointer<vtkRenderWindowInteractor>::New();
    49     rwi->SetRenderWindow(rw);
    50     rwi->Initialize();
    51     rwi->Start();
    52  
    53     return 0;
    54 }
    上述代码中,
    VTKConeSource类定义了一个锥形图形数据,其输出为VTKPolyData类型数据。VTKPolyData的成员函数GetNumberOfPoints()和GetNumberOfCells()分别用来获取图形数据的点数和单元数目。
    接下来是定义一个图形数据的渲染管线,包括VTKPolyDataMapper()、vtkActor()、VTKRender()、vtkRenderWindow()和vtkRenderWindowInteractor()。这个渲染流程和图像渲染管线基本一致。需要注意的是,对于VTKPolyData类型数据的渲染管线,需要定义vtkPolyDataMapper对象,用于接受VTKPolyData图形数据以实现图像数据到渲染图元的转换。
    程序的显示结果如下所示:
    从结果可以看出,该椎体是由7个空间点构成了7个单元的数据组成。这里也仅仅定义了一个空间的椎体,并未给点或者单元数据设置属性信息。
  • 相关阅读:
    Pandas高级教程之:category数据类型
    Pandas高级教程之:处理缺失数据
    Pandas高级教程之:处理text数据
    密码学系列之:blowfish对称密钥分组算法
    架构之:数据流架构
    ES6中的新特性:Iterables和iterators
    密码学系列之:feistel cipher
    Pandas高级教程之:Dataframe的重排和旋转
    Electron实用技巧-electron-builder中用户协议(license)的使用及多语言支持
    Electron实用技巧-开机启动时隐藏主窗口,只显示系统托盘
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/14241629.html
Copyright © 2011-2022 走看看