VTK的对象管理与图形渲染

 

先从一个简单的示例开始,修改自官方示例程序

//...界面设置...

// 创建几何体对象
 vtkSmartPointer<vtkSphereSource> sphereSource = vtkSmartPointer<vtkSphereSource>::New();
 sphereSource->SetCenter(0.0, 0.0, 0.0);
 sphereSource->SetRadius(5.0);
 sphereSource->Update();

 // 创建几何体映射及转换对象
 vtkNew<vtkPolyDataMapper> mapper;
 mapper->SetInputConnection(sphereSource->GetOutputPort());

 // 创建场景中的(几何体)对象
 vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
 actor->SetMapper(mapper);

 // 创建渲染容器
 vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
 renderer->AddActor(actor);

// ...界面中放置渲染容器...

 

示例展示了一个简易的VTK图形可视化过程,将一个白色球体显示到屏幕上,VTK的渲染结构如下:

 

示例中包含了VTK的几个重要概念,下面分别加以介绍。

 

对象管理

通常用两个模板类vtkNew<T>和vtkSmartPointer<T>来创建VTK对象,它们最终都继承自一个重要的抽象基类vtkObjectBase。

vtkObjectBase是VTK中绝大多数类的基类,它规范了对VTK对象的管理:

1. 将其构造函数及析构函数设置为protected权限,

2. 提供了一个静态函数New()和一个虚函数Delete(), 并重载了new和delete操作符,

3. 执行引用计数, 类似于c++中智能指针的引用计数

 

vtkNew在概念上类似于std::unqiue_ptr,当使用vtkNew创建对象时,它会自动在堆上创建一个对象,并在vtkNew实例超出其作用域时自动调用对象的Delete()方法,确保对象被正确销毁。

vtkNew是独占所有权,一个vtkNew实例唯一拥有其创建对象,不允许复制或赋值给其它vtkNew实例,它适用于简单的、不涉及对象共享的场景,在局部范围内创建和使用对象,对象在使用完后自动销毁,避免了手动调用Delete()的麻烦。

 

而vtkSmartPointer在概念上则类似于std::shared_ptr,vtkSmartPointer使用引用计数机制,它允许将对象的引用传递给其他vtkSmartPointer实例或使用Register()方法增加引用次数,当调用UnRegister()方法,或实例超出作用域时会减少引用次数,当引用次数降为0时,对象会被自动销毁。

vtkSmartPointer适用于需要在多个部分共享对象的场景,适合于在复杂的数据结构或多个函数之间传递对象。

 

从几何体到vtkActor

几何体表示实际几何形状的数据结构,主要用于存储和描述几何对象的顶点坐标、拓扑关系等底层几何信息,例如常用的vtkPolyData表示多边形数据,上例中的vtkSphereSource类就生成了一个球形的vtkPolyData数据。

但几何体本身并不具备直接渲染的能力,只是提供了渲染所需的数据,要将几何体表示的数据进行渲染,需要将其转成vtkActor。

 

vtkActor表示场景中的可渲染对象,它不仅包含了渲染所需的几何数据,还包含了与之关联的属性,如颜色、纹理、透明度、材质、位置、方向、缩放等等。

可以将vtkActor看作是场景中的一个实体,比如一个球体、一个立方体或一个多边形等,并且可以对其进行各种操作,如设置其位置、旋转、缩放、透明度等。

 

而从几何体到vtkActor之间的转换,则由vtkMapper来完成。

作为几何体数据和vtkActor之间的桥梁,vtkMapper的首要功能便是数据适配,不同的几何体有其特定的数据结构,这些数据格式不能直接被图形硬件所识别和渲染,vtkMapper则将这些不同类型的几何体数据进行适配,转换为图形硬件能够理解的基本图元,如点、线、三角形等。

除了几何信息,几何体数据还可能包含各种属性,如颜色、法向量、纹理坐标,vtkMapper负责将这些属性信息与相应的几何图元进行正确的映射,确保在渲染时每个图元都能正确地应用其对应的属性,所以每种几何体,都有与之对应的vtkMapper。

 

vtkActor与vtkRenderer

当数据从几何体映射成vtkActor,渲染的数据准备工作就已完成,要在屏幕上渲染出一个场景,除了被渲染对象,还需要光照、相机等对象,而这些,都由vtkRenderer提供或管理。

vtkRenderer是渲染场景的容器,它负责管理多个vtkActor,并按照添加的顺序依次渲染到屏幕上,可以将vtkRenderer想象成一个舞台,而vtkActor是舞台上的演员,多个演员在舞台上共同构成一个完整的场景。

 

本文完

posted on   湘北川  阅读(16)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示