Hello World 的例子
#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkRenderingFreeType);
VTK_MODULE_INIT(vtkInteractionStyle);
#include <vtkSmartPointer.h>
#include <vtkTextActor.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
int main(int /*argc*/, char ** /*argv*/)
{
auto textActor = vtkSmartPointer<vtkTextActor>::New();
textActor->SetInput("Hello World");
auto renderer = vtkSmartPointer<vtkRenderer>::New();
renderer->AddActor(textActor);
renderer->ResetCamera();
auto interactor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
auto renderWindow = vtkSmartPointer<vtkRenderWindow>::New();
renderWindow->AddRenderer(renderer);
renderWindow->SetInteractor(interactor);
interactor->Start();
return 0;
}
分解:
#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkRenderingFreeType);
VTK_MODULE_INIT(vtkInteractionStyle);
VTK 設計使用工廠方法設計模式使用 <ClassName>::New()
方法建立 vtkObject派生類的新例項。這允許在執行時期間選擇特定於平臺的實現以滿足所需的介面。
要使此機制起作用,工廠類需要註冊自己,以便 vtk 基礎結構可以選擇它們。此處提供有關此主題的詳細資訊。
VTK_MODULE_INIT
是一個巨集,用於自動初始化所需的模組/庫(本例中為 vtkRenderingOpenGL2
,vtkRenderingFreeType
,vtkInteractionStyle
)。無法初始化模組將導致 <ClassName>::New()
呼叫返回 NULL
,從而導致執行時錯誤。
#include <vtkSmartPointer.h>
#include <vtkTextActor.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
vtkSmartPointer
的角色類似於 std::unique_ptr
,因為它管理控制 vtkObject
派生類例項生命週期的引用計數。
vtkTextActor
是一個簡單的類,可用於在螢幕上顯示字串。
vtkRenderer
是一個負責管理場景內容的類。具體來說它管理著的集合
- 2D 演員來自
vtkActor2D
- 3D 演員來自
vtkProp3D
- 卷:
vtkVolume
- 相機:
vtkCamera
- 燈:
vtkLight
vtkRenderWindow
是一個為平臺提供獨立介面的類
- 管理一系列渲染器。
- 處理使用者輸入並將其轉發到
vtkRenderWindowInteractor
進行進一步處理
vtkRenderWindowInteractor
是一個負責將使用者輸入(滑鼠/鍵盤/定時)事件對映到相應動作的類。在內部,它使用 vtkInteractorStyle
來提供不同的對映行為。
auto textActor = vtkSmartPointer<vtkTextActor>::New();
textActor->SetInput("Hello World");
建立文字 actor 並設定要顯示的字串
auto renderer = vtkSmartPointer<vtkRenderer>::New();
renderer->AddActor(textActor);
renderer->ResetCamera();
- 建立渲染器
- 將文字 actor 新增到其中
- 重置攝像機位置以確保演員在螢幕中可見。
auto interactor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
auto renderWindow = vtkSmartPointer<vtkRenderWindow>::New();
renderWindow->AddRenderer(renderer);
renderWindow->SetInteractor(interactor);
建立一個要渲染的視窗,向其新增渲染器並設定互動器。工廠功能將根據可用/已註冊的工廠類自動選擇合適的實施方案
interactor->Start();
這是一個阻塞呼叫,僅在使用者請求退出( q 鍵)或關閉視窗時返回。執行訊息迴圈並排程訊息。
執行它應該建立一個看起來像這樣的視窗
筆記
此 exe 使用的 DLL 列表包括:
VTKCommonCore-7.0.DLL
VTKInteractionStyle-7.0.DLL
VTKRenderingCore-7.0.DLL
VTKRenderingFreeType-7.0.DLL
VTKRenderingOpenGL2-7.0.DLL