1 #ifndef INITIAL_OPENGL 2 #define INITIAL_OPENGL 3 #include <vtkAutoInit.h> 4 VTK_MODULE_INIT(vtkRenderingOpenGL) 5 VTK_MODULE_INIT(vtkInteractionStyle) 6 VTK_MODULE_INIT(vtkRenderingFreeType) 7 #endif 8 #include <iostream> 9 using namespace std; 10 11 #include "vtkPolyDataMapper.h" 12 #include "vtkWin32OpenGLRenderWindow.h" 13 #include "vtkRenderWindow.h" 14 #include "vtkRenderWindowInteractor.h" 15 #include "vtkRenderer.h" 16 #include "vtkPoints.h" 17 #include "vtkWin32RenderWindowInteractor.h" 18 #include "vtkProperty.h" 19 #include "vtkFloatArray.h" 20 #include "vtkPolyData.h" 21 #include "vtkDataSetMapper.h" 22 #include "vtkActor2D.h" 23 #include "vtkPointData.h" 24 #include "vtkPolyVertex.h" 25 #include <vtkInteractorStyleTrackballCamera.h> 26 #include <vtkCellArray.h> 27 #include "vtkDelaunay2D.h" 28 #include "vtkMath.h" 29 #include <vtkTransformFilter.h> 30 #include <vtkCamera.h> 31 #include <vtkTriangleStrip.h> 32 33 void myShow(vtkPolyData* anInput) 34 { 35 vtkSmartPointer<vtkPolyDataMapper> aMapper=vtkSmartPointer<vtkPolyDataMapper>::New(); 36 aMapper->SetInputData(anInput); 37 aMapper->ScalarVisibilityOn(); 38 39 vtkSmartPointer<vtkActor> anActor=vtkSmartPointer<vtkActor>::New(); 40 anActor->SetMapper(aMapper); 41 anActor->GetProperty()->SetRepresentationToSurface(); 42 anActor->GetProperty()->SetPointSize(1); 43 anActor->GetProperty()->SetColor(1,0,1); 44 anActor->GetProperty()->SetOpacity(0.4); 45 46 vtkSmartPointer<vtkRenderer> ren1=vtkSmartPointer<vtkRenderer>::New(); 47 vtkSmartPointer<vtkRenderWindow> renWin=vtkSmartPointer<vtkRenderWindow>::New(); 48 49 ren1->AddActor(anActor); 50 51 ren1->SetBackground(0.5,0.5,0.5); 52 ren1->SetBackground2(1,0,0); 53 renWin->AddRenderer(ren1); 54 renWin->SetSize(512,512); 55 56 vtkSmartPointer<vtkRenderWindowInteractor> iren=vtkSmartPointer<vtkRenderWindowInteractor>::New(); 57 vtkSmartPointer<vtkInteractorStyleTrackballCamera> style=vtkSmartPointer<vtkInteractorStyleTrackballCamera>::New(); 58 iren->SetRenderWindow(renWin); 59 iren->SetInteractorStyle(style); 60 61 ren1->ResetCamera(); 62 renWin->Render(); 63 iren->Start(); 64 } 65 66 int main() 67 { 68 //创建几何点数据 69 double vArr[2]={-0.5,0.5}; 70 double theta=vtkMath::Pi()*2; 71 int thetaResolution=60; 72 double dTheta=theta/thetaResolution; 73 double *uArr=new double[thetaResolution]; 74 vtkSmartPointer<vtkPoints> points=vtkSmartPointer<vtkPoints>::New(); 75 for(int i=0;i<thetaResolution+1;i++) 76 { 77 uArr[i]=i*dTheta; 78 double u=uArr[i]; 79 for(int j=0;j<2;j++) 80 { 81 double v=vArr[j]; 82 double pt[3]={(2+v/2*cos(u/2))*cos(u),(1+v/2*cos(u/2))*sin(u),v/2*sin(u/2)}; 83 points->InsertNextPoint(pt); 84 85 } 86 } 87 //创建拓扑结构 88 vtkSmartPointer<vtkTriangleStrip> mobiusStrip=vtkSmartPointer<vtkTriangleStrip>::New(); 89 mobiusStrip->GetPointIds()->SetNumberOfIds((thetaResolution+1)*2); 90 for(int i=0;i<(thetaResolution+1)*2;i++) 91 mobiusStrip->GetPointIds()->SetId(i,i); 92 //将拓扑结构组合进Cell 93 vtkSmartPointer<vtkCellArray> mobiusCell=vtkSmartPointer<vtkCellArray>::New(); 94 mobiusCell->InsertNextCell(mobiusStrip); 95 //将几何点与Cell结构组合成一个PolyData。 96 vtkSmartPointer<vtkPolyData> mobiusPolydata=vtkSmartPointer<vtkPolyData>::New(); 97 mobiusPolydata->SetPoints(points); 98 mobiusPolydata->SetStrips(mobiusCell); 99 100 myShow(mobiusPolydata); 101 return 0; 102 }
时间: 2024-10-27 17:38:40