VTK 模型的顏色映射


 1 #include <vtkActor.h>
 2 #include <vtkFloatArray.h>
 3 #include <vtkLookupTable.h>
 4 #include <vtkPointData.h>
 5 #include <vtkPolyData.h>
 6 #include <vtkPolyDataMapper.h>
 7 #include <vtkRenderer.h>
 8 #include <vtkRenderWindow.h>
 9 #include <vtkRenderWindowInteractor.h>
10 #include <vtkSmartPointer.h>
11 #include <vtkSTLReader.h>
12 #include <vtkInteractorStyleTrackballCamera.h>
13  
14 #include <vtkAutoInit.h> 
15 VTK_MODULE_INIT(vtkRenderingOpenGL2); 16 VTK_MODULE_INIT(vtkInteractionStyle); 17 VTK_MODULE_INIT(vtkRenderingVolumeOpenGL2); 18 VTK_MODULE_INIT(vtkRenderingFreeType); 19  
20 int main(int, char* []) 21 { 22     // 加載一個J20的STL模型
23     vtkSmartPointer<vtkSTLReader> source = vtkSmartPointer<vtkSTLReader>::New(); 24     source->SetFileName("C:\\Users\\wangjun\\3D Objects\\J20.stl"); 25     source->Update(); 26  
27     int numPts = source->GetOutput()->GetPoints()->GetNumberOfPoints();                    // 獲取模型的頂點數量
28     vtkSmartPointer<vtkFloatArray> scalars = vtkSmartPointer<vtkFloatArray>::New();        // 創建存儲頂點屬性的float數組
29     scalars->SetNumberOfValues(numPts); 30     for (int i = 0; i < numPts; ++i)        // 為屬性數組中的每個元素設置標量值(這個標量值可以當作顏色值)
31         scalars->SetValue(i, i); 32  
33     vtkSmartPointer<vtkPolyData> poly = vtkSmartPointer<vtkPolyData>::New(); 34     poly->DeepCopy(source->GetOutput()); 35     poly->GetPointData()->SetScalars(scalars); 36  
37     // 創建顏色查找表
38     vtkSmartPointer<vtkLookupTable> hueLut = vtkSmartPointer<vtkLookupTable>::New(); 39     hueLut->SetNumberOfColors(numPts);        // 指定顏色查找表中有多少種顏色
40     hueLut->SetHueRange(0.67, 0.0);            // 設定HSV顏色范圍,色調H取值范圍為0°~360°,從紅色開始按逆時針方向計算,紅色為0°/0.0,綠色為120°/0.34,藍色為240°/0.67
41     hueLut->Build(); 42  
43     vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New(); 44     mapper->SetInputData(poly); 45     mapper->SetScalarRange(0, numPts);            // 設置標量值的范圍
46     mapper->ScalarVisibilityOn(); 47     //mapper->SetColorModeToMapScalars(); // 無論變量數據是何種類型,該方法都通過查詢表對標量數據進行映射
48     mapper->SetColorModeToDefault();            // 默認的映射器行為,即把unsigned char類型的標量屬性數據當作顏色值,不執行隱式。對於其他類型的標量數據,將通過查詢表映射。
49     mapper->SetLookupTable(hueLut); 50  
51     vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New(); 52     actor->SetMapper(mapper); 53  
54     vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New(); 55     renderer->GradientBackgroundOn(); 56     renderer->SetBackground(1, 1, 1); 57     renderer->SetBackground2(0, 0, 0); 58  
59     vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New(); 60     renderWindow->AddRenderer(renderer); 61  
62     vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New(); 63     renderWindowInteractor->SetRenderWindow(renderWindow); 64     vtkSmartPointer<vtkInteractorStyleTrackballCamera> style = vtkSmartPointer<vtkInteractorStyleTrackballCamera>::New(); 65     renderWindowInteractor->SetInteractorStyle(style); 66  
67     renderer->AddActor(actor); 68     renderWindow->SetSize(600, 600); 69     renderWindow->Render(); 70     renderWindowInteractor->Start(); 71  
72     return 0; 73 }

 

 


免責聲明!

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



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