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