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