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 是一個巨集,用於自動初始化所​​需的模組/庫(本例中為 vtkRenderingOpenGL2vtkRenderingFreeTypevtkInteractionStyle)。無法初始化模組將導致 <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 是一個負責管理場景內容的類。具體來說它管理著的集合

vtkRenderWindow 是一個為平臺提供獨立介面的類

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 鍵)或關閉視窗時返回。執行訊息迴圈並排程訊息。

執行它應該建立一個看起來像這樣的視窗

StackOverflow 文件

筆記

此 exe 使用的 DLL 列表包括:

VTKCommonCore-7.0.DLL

VTKInteractionStyle-7.0.DLL

VTKRenderingCore-7.0.DLL

VTKRenderingFreeType-7.0.DLL

VTKRenderingOpenGL2-7.0.DLL