VTK學習記錄4-vktLight
阿新 • • 發佈:2021-07-15
光源有位置光源和平行光源。
程式碼:
1 //tips:如果不是用cmake編譯,而是用vs編譯的,需要加這三行。 2 #include "vtkAutoInit.h" 3 VTK_MODULE_INIT(vtkRenderingOpenGL2); // VTK was built with vtkRenderingOpenGL2 4 VTK_MODULE_INIT(vtkInteractionStyle); 5 6 #include <vtkConeSource.h> 7 #include <vtkRenderer.h> 8 #include <vtkPolyDataMapper.h> 9#include <vtkRenderWindow.h> 10 #include <vtkActor.h> 11 #include <vtkCamera.h> 12 #include <vtkRenderWindowInteractor.h> 13 #include <vtkInteractorStyleTrackballCamera.h> 14 #include <vtkInteractorStyleTrackballActor.h> 15 #include <vtkProperty.h> 16 #include <vtkLight.h> 1718 int main() 19 { 20 vtkConeSource *cone = vtkConeSource::New(); 21 cone->SetResolution(8); 22 cone->SetHeight(5); 23 cone->SetRadius(6); 24 25 vtkPolyDataMapper *coneMapper = vtkPolyDataMapper::New(); 26 coneMapper->SetInputData(cone->GetOutput()); 27 coneMapper->SetInputConnection(cone->GetOutputPort());28 29 vtkActor *vtkactor = vtkActor::New(); 30 vtkactor->SetMapper(coneMapper); 31 //vtkactor->GetProperty()->SetColor(1, 0, 0); 32 //不用GetProperty()的方法,用例項化Property的方法也可以。 33 vtkProperty *coneProperty = vtkProperty::New(); 34 coneProperty->SetColor(1.0, 0, 0.0); //可以自己設定顏色,非必須,預設銀色 35 vtkactor->SetProperty(coneProperty); 36 37 vtkRenderer *render = vtkRenderer::New(); 38 render->AddActor(vtkactor); 39 render->SetBackground(0.1, 0.2, 0.3); 40 41 //自己設定light 42 vtkLight *light = vtkLight::New(); 43 //light->SetSpecularColor(1.0, 0.0, 0.0); //設定地面光的顏色 44 //light->SetDiffuseColor(0.0, 1.0, 0.0);//設定反射光的顏色 45 light->SetColor(1, 0, 0);//設定光照顏色 46 render->AddLight(light); //有了light,需要渲染render才行 47 48 49 50 vtkRenderWindow *window = vtkRenderWindow::New(); 51 window->SetSize(500, 500); 52 window->AddRenderer(render); 53 54 vtkRenderWindowInteractor *interactor = vtkRenderWindowInteractor::New(); 55 interactor->SetRenderWindow(window);//關聯要互動的視窗 56 57 //現在設定控制的是相機,也可以實現相同的效果。 58 //vtkInteractorStyleTrackballCamera *style = vtkInteractorStyleTrackballCamera::New(); 59 //interactor->SetInteractorStyle(style); 60 61 //用這個就是設定控制演員 62 vtkInteractorStyleTrackballActor *style2 = vtkInteractorStyleTrackballActor::New(); 63 interactor->SetInteractorStyle(style2); 64 65 //旋轉程式碼 66 /*for (int i = 0; i < 1800; i++) 67 { 68 window->Render(); 69 render->GetActiveCamera()->Azimuth(1); 70 }*/ 71 72 interactor->Initialize(); 73 interactor->Start(); 74 75 76 cone->Delete(); 77 coneMapper->Delete(); 78 vtkactor->Delete(); 79 render->Delete(); 80 window->Delete(); 81 interactor->Delete(); 82 //style->Delete(); 83 return 0; 84 }
註釋:有時候設定光照顏色後,結果是黑色的。比如下圖,那是因為光照和本身的顏色混合後變成了黑色。可以改變顏色引數來解決問題。
改變顏色引數,就可以顯示了。