1 #include <vtkAutoInit.h> 2 VTK_MODULE_INIT(vtkRenderingOpenGL2); 3 VTK_MODULE_INIT(vtkRenderingFreeType); 4 VTK_MODULE_INIT(vtkInteractionStyle); 5 6 #include <vtkPolyData.h> 7 #include <vtkSphereSource.h> 8 #include <vtkDecimatePro.h> 9 #include <vtkQuadricDecimation.h> 10 #include <vtkQuadricClustering.h> 11 #include <vtkSmartPointer.h> 12 #include <vtkPolyDataMapper.h> 13 #include <vtkProperty.h> 14 #include <vtkRenderWindow.h> 15 #include <vtkRenderWindowInteractor.h> 16 #include <vtkRenderer.h> 17 #include <vtkPolydataReader.h> 18 #include <vtkCamera.h> 19 20 //测试文件:../data/fran_cut.vtk 21 int main(int argc, char * argv[]) 22 { 23 vtkSmartPointer<vtkPolyDataReader> reader = 24 vtkSmartPointer<vtkPolyDataReader>::New(); 25 reader->SetFileName("C:\\Users\\Administrator\\Desktop\\VTK2\\hellovtk\\vtk_图像处理学习\\第六章_图像处理\\data\\fran_cut.vtk"); 26 reader->Update(); 27 vtkSmartPointer<vtkPolyData> original = reader->GetOutput(); 28 29 std::cout << "抽取前:" << std::endl << "------------" << std::endl; 30 std::cout << "模型点数为: " << original->GetNumberOfPoints() << std::endl; 31 std::cout << "模型面数为: " << original->GetNumberOfPolys() << std::endl; 32 33 vtkSmartPointer<vtkDecimatePro> decimate = 34 vtkSmartPointer<vtkDecimatePro>::New(); 35 decimate->SetInputData(original); 36 decimate->SetTargetReduction(.80); //80%的三角面片被移除 37 decimate->Update(); 38 39 vtkSmartPointer<vtkPolyData> decimated = decimate->GetOutput(); 40 std::cout << "抽取后" << std::endl << "------------" << std::endl; 41 std::cout << "模型点数为:" << decimated->GetNumberOfPoints()<< std::endl; 42 std::cout << "模型面数为:" << decimated->GetNumberOfPolys()<< std::endl; 43 44 vtkSmartPointer<vtkPolyDataMapper> origianlMapper = 45 vtkSmartPointer<vtkPolyDataMapper>::New(); 46 origianlMapper->SetInputData(original); 47 48 vtkSmartPointer<vtkActor> origianlActor = 49 vtkSmartPointer<vtkActor>::New(); 50 origianlActor->SetMapper(origianlMapper); 51 52 vtkSmartPointer<vtkPolyDataMapper> decimatedMapper = 53 vtkSmartPointer<vtkPolyDataMapper>::New(); 54 decimatedMapper->SetInputData(decimated); 55 56 vtkSmartPointer<vtkActor> decimatedActor = 57 vtkSmartPointer<vtkActor>::New(); 58 decimatedActor->SetMapper(decimatedMapper); 59 60 double leftViewport[4] = {0.0, 0.0, 0.5, 1.0}; 61 double rightViewport[4] = {0.5, 0.0, 1.0, 1.0}; 62 63 vtkSmartPointer<vtkRenderer> leftRenderer = 64 vtkSmartPointer<vtkRenderer>::New(); 65 leftRenderer->SetViewport(leftViewport); 66 leftRenderer->AddActor(origianlActor); 67 leftRenderer->SetBackground(1.0, 1.0, 1.0); 68 69 vtkSmartPointer<vtkRenderer> rightRenderer = 70 vtkSmartPointer<vtkRenderer>::New(); 71 rightRenderer->SetViewport(rightViewport); 72 rightRenderer->AddActor(decimatedActor); 73 rightRenderer->SetBackground(1.0, 1.0, 1.0); 74 75 leftRenderer->GetActiveCamera()->SetPosition(0, -1, 0); 76 leftRenderer->GetActiveCamera()->SetFocalPoint(0, 0, 0); 77 leftRenderer->GetActiveCamera()->SetViewUp(0, 0, 1); 78 leftRenderer->GetActiveCamera()->Azimuth(30); 79 leftRenderer->GetActiveCamera()->Elevation(30); 80 leftRenderer->ResetCamera(); 81 rightRenderer->SetActiveCamera(leftRenderer->GetActiveCamera()); 82 83 vtkSmartPointer<vtkRenderWindow> renderWindow = 84 vtkSmartPointer<vtkRenderWindow>::New(); 85 renderWindow->AddRenderer(leftRenderer); 86 renderWindow->AddRenderer(rightRenderer); 87 renderWindow->SetSize(640, 320); 88 renderWindow->Render(); 89 renderWindow->SetWindowName("PolyDataDecimation"); 90 91 vtkSmartPointer<vtkRenderWindowInteractor> interactor = 92 vtkSmartPointer<vtkRenderWindowInteractor>::New(); 93 interactor->SetRenderWindow(renderWindow); 94 95 renderWindow->Render(); 96 interactor->Start(); 97 98 return EXIT_SUCCESS; 99 }标签:1.0,VTK,56,网格,vtkSmartPointer,renderWindow,New,include,leftRenderer From: https://www.cnblogs.com/ybqjymy/p/17632969.html