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個單元的數據組成。這里也僅僅定義了一個空間的椎體,並未給點或者單元數據設置屬性信息。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM