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