VTK修炼之道5_Procedural Source Object
生活随笔
收集整理的這篇文章主要介紹了
VTK修炼之道5_Procedural Source Object
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.編寫的程序
#include <vtkAutoInit.h> VTK_MODULE_INIT(vtkRenderingOpenGL); /// #include "vtkCylinderSource.h" #include "vtkPolyDataMapper.h" #include "vtkActor.h" #include "vtkProperty.h" #include "vtkRenderer.h" #include "vtkRenderWindow.h" #include "vtkRenderWindowInteractor.h" #include "vtkCamera.h"int main() {/Visualize Pipeline: Source->Mapper->Actor//vtkCylinderSource* cylinder = vtkCylinderSource::New();cylinder->SetResolution(10);vtkPolyDataMapper* cylinderMapper = vtkPolyDataMapper::New();cylinderMapper->SetInputConnection(cylinder->GetOutputPort());vtkActor* cylinderActor = vtkActor::New();cylinderActor->SetMapper(cylinderMapper);///Actor propertycylinderActor->GetProperty()->SetColor(1.0,0.32,0.27);cylinderActor->RotateX(30.0);cylinderActor->RotateY(-45);//Render Engine:Renderer->RenderWindow->RenderWindowInteractor//vtkRenderer* cylinderRenderer = vtkRenderer::New();vtkRenderWindow* cylinderRenderWindow = vtkRenderWindow::New();vtkRenderWindowInteractor* iren = vtkRenderWindowInteractor::New();cylinderRenderWindow->AddRenderer(cylinderRenderer);iren->SetRenderWindow(cylinderRenderWindow);//Visualize Pipeline -> Render Engine//cylinderRenderer->AddActor(cylinderActor);cylinderRenderer->SetBackground(0.1,0.2,0.4); // render background propertycylinderRenderWindow->SetSize(400,400); //render window size//Camera// The renderer renders into the// render window. The render window interactor captures mouse events// and will perform appropriate camera or actor manipulation// depending on the nature of the events.cylinderRenderer->ResetCamera();cylinderRenderer->GetActiveCamera()->Zoom(1.5); //focus/Window Hold Oniren->Start();/Clear Memoryiren->Delete();cylinderRenderWindow->Delete();cylinderRenderer->Delete();cylinderActor->Delete();cylinderMapper->Delete();cylinder->Delete();return 0; }程序運行結果:
2.心得體會
2.1 對“Visualize Pipeline & Render Engine”設計體系的理解
VTK程序設計嚴格遵循流水線設計風格。根據我的經驗,建議程序設計過程中分模塊設計。Part1:Visualize Pipeline(Source -> Mapper -> Actor) ?此部分還應該包括Actor Property(不知道中文該怎么翻譯,權且當給演員化妝)。Part2:Render Engine(Renderer -> RenderWindow -> RenderWindowInteractor) 這一部分主要工作就是顯示窗口可以容納多少RenderWindow,我們可以理解為窗口可以裝的下多少演員!Part3:Communication 這是最重要的環節,以上兩個部分搭建好了之后,我們要把Actor裝進Renderer(通俗的講,就是要把妝都畫好了的演員送到舞臺上)。此外這一部分也會涉及到Renderer(渲染器/舞臺)背景設置、以及RenderWindow(觀眾們看到的窗口)的尺寸。2.2 窗口一閃即逝
調試的過程中,我發現最終呈現給我的窗口始終不能穩定的存在(一閃即逝)。這是正常現象,因為程序就是這樣設計的,如果想讓窗口停留一段時間,就要用到類RenderWindowInteractor(用戶與窗口交互),并調用Start函數。3.3 攝像機Camera
Camera在這里用處是不大的,只有在用戶交互時才會體會到它的強大。3.未解決的問題
3.1?Procedural Source Object 怎么翻譯?
一臉懵逼,重點應該在Procedural,“程序上的”?3.2 關于TCL語言與C++語言相互轉換
User Guide上給的功能還包括一個快捷鍵調用,可惜不能把它從Tcl轉換成C++;東靈的那本書更是對用戶手冊的翻譯,并沒有更加深刻地闡明這個事兒,還需要去探索,回頭再解決。 # Associate the “u” keypress with a UserEvent and start the event loop iren AddObserver UserEvent {wm deiconify .vtkInteract} iren Initialize # suppress the tk window wm withdraw .總結
以上是生活随笔為你收集整理的VTK修炼之道5_Procedural Source Object的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 09-03-06 FreeEIM 姗姗来
- 下一篇: Qt Creator和VS2010中添加