《vtk9 book》 官方web版 第3章 - 计算机图形基础 (4 / 5)

3.10 将所有内容整合起来


本节概述了图形对象以及如何在 VTK 中使用它们。

图形模型


        我们已经讨论了许多在场景渲染中起作用的对象。现在是将它们整合到一个全面的图形和可视化对象模型中的时候了。

        在可视化工具包中,有七个基本对象用于渲染场景。幕后有许多其他对象,但这七个是我们最常用的。这些对象列在以下,并在图 3-24 中进行了说明。

vtkRenderWindow — 管理显示设备上的窗口;一个或多个渲染器绘制到 vtkRenderWindow 的一个实例中。

vtkRenderer — 协调涉及光源、摄像机和演员的渲染过程。

vtkLight — 用于照亮场景的光源。

vtkCamera — 定义场景的视图位置、焦点和其他视图属性。

vtkActor — 表示场景中渲染的对象,包括其属性和在世界坐标系中的位置。(注意:vtkActor 是 vtkProp 的一个子类。vtkProp 是包括注释和 2D 绘图类在内的更一般形式的演员。有关更多信息,请参阅“组件和其他类型的 vtkProp”)

vtkProperty — 定义演员的外观属性,包括颜色、透明度和光照属性,如高光和漫反射。还包括线框和实体表面等表现属性。

vtkMapper — 演员的几何表示。多个演员可以引用同一个映射器。

vtkRenderWindow 类将渲染过程联系在一起。它负责管理显示设备上的窗口。对于运行 Windows 的 PC,这将是一个 Microsoft 显示窗口,对于 Linux 和 UNIX 系统,这将是一个 X 窗口,在 Mac(OSX)上是一个 Quartz 窗口。在 VTK 中,vtkRenderWindow 的实例是与设备无关的。这意味着您不需要担心使用的底层图形硬件或软件是什么,软件会自动适应您的计算机,因为 vtkRenderWindow 的实例被创建。 (有关更多信息,请参阅“实现设备无关性”)

        除了窗口管理,vtkRenderWindow 对象还用于管理渲染器并存储显示窗口的图形特性,如大小、位置、窗口标题、窗口深度和双缓冲标志。窗口的深度表示每个像素分配了多少位。双缓冲是一种技术,其中一个窗口被逻辑地分为两个缓冲区。在任何给定时间,一个缓冲区当前对用户可见。同时,第二个缓冲区可以用于绘制动画中的下一帧图像。渲染完成后,可以交换两个缓冲区,使新图像可见。这种常见的技术允许动画显示而用户看不到基元的实际渲染。高端图形系统在硬件中执行双缓冲。典型系统将具有深度为 72 位的渲染窗口。前 24 位用于存储前缓冲区的红色、绿色和蓝色(RGB)像素分量。接下来的 24 位存储后缓冲区的 RGB 值。最后的 24 位用作 z 缓冲区。

        vtkRenderer 类负责协调其光源、摄像机和演员以生成图像。每个实例在特定场景中维护演员、光源和一个活动摄像机的列表。至少必须定义一个演员,但如果未定义光源和摄像机,渲染器将自动创建它们。在这种情况下,演员将居中在图像中,而默认摄像机视图朝下看 z 轴。vtkRenderer 类的实例还提供了指定背景和环境光照颜色的方法。还提供了用于在世界、视图和显示坐标系之间转换的方法。

        渲染器的一个重要方面是它必须与一个 vtkRenderWindow 类的实例相关联,该实例将绘制到其中,并且渲染窗口中绘制的区域必须由一个矩形视口定义。视口由规范化坐标(0,1)在 x 和 y 图像坐标轴上定义。默认情况下,渲染器绘制到渲染窗口的整个范围(视点坐标 (0,0,1,1))。可以指定一个较小的视口。并且可以让多个渲染器绘制到同一个渲染窗口中。

        vtkLight 类的实例照亮场景。有各种实例变量可用于定位和定位光源。还可以打开/关闭灯光以及设置它们的颜色。通常至少有一个灯是“开启”的,以照亮场景。如果未定义并打开灯光,则渲染器会自动构建一个灯光。VTK 中的灯光可以是定位的或无限的。定位光源具有关联的锥角和衰减因子。无限光源将光线平行投射。

        摄像机由 vtkCamera 类构建。重要参数包括摄像机位置、焦点、前后裁剪平面位置、视图向上矢量和视野。摄像机还具有特殊方法,以简化操作,如本章前面描述的那样。

        这些包括高程、方位、缩放和滚动。与 vtkLight 类似,如果未定义,则渲染器将自动创建 vtkCamera 的实例。

        vtkActor 类的实例代表场景中的对象。特别是,vtkActor 结合了对象属性(颜色、着色类型等)、几何定义和世界坐标系中的方向。这是通过维护引用 vtkProperty、vtkMapper 和 vtkTransform 实例的实例变量来实现的。通常情况下,您无需显式创建属性或变换,因为这些将使用 vtkActor 的方法自动创建和操作。您确实需要创建 vtkMapper 的实例(或其子类之一)。映射器将数据可视化管线与图形设备联系起来。(我们将在下一章中更多地讨论管线。)

        在 VTK 中,演员实际上是 vtkProp(任意道具)和 vtkProp3D(可以在 3D 空间中变换的道具)的子类。(“道具”一词源自舞台,道具是场景中的一个对象。)有其他子类的道具和演员具有专门的行为(有关更多信息,请参见“集合和其他类型的 vtkProp”)。一个例子是 vtkFollower。这个类的实例始终面向活动摄像机。在设计必须从场景中的任何摄像机位置可读的标志或文本时,这是有用的。

        vtkProperty 类的实例影响演员的渲染外观。创建演员时,会自动创建一个属性实例。还可以直接创建属性对象,然后将属性对象与一个或多个演员关联。通过这种方式,演员可以共享公共属性。

        最后,vtkMapper(及其子类)定义对象几何和可选的顶点颜色。此外,vtkMapper 引用用于对几何着色的颜色表(即 vtkLookupTable)。 (我们将在第 6 章的“颜色映射”中讨论数据到颜色的映射。)我们将在第 6 章的“映射器设计”中更详细地研究映射过程。现在假设 vtkMapper 是一个代表几何和其他类型的可视化数据的对象。

        还有另一个重要对象,vtkRenderWindowInteractor,用于在渲染窗口中捕获事件(如鼠标点击和鼠标移动)。vtkRenderWindowInteractor 捕获这些事件,然后触发诸如摄像机拉伸、平移和旋转、演员拾取、进入/退出立体模式等操作。使用 SetRenderWindow() 方法将此类的实例与渲染窗口关联。

        实现设备无关性


        使用 VTK 构建的应用程序的一个理想特性是它们是设备无关的。这意味着在具有特定软件/硬件配置的一个操作系统上运行的计算机代码在不同操作系统和软件/硬件配置上运行时保持不变。这样做的优点是程序员不需要在不同计算机系统之间移植应用程序。此外,现有应用程序不需要重写以利用硬件或软件技术的新发展。相反,VTK 通过继承和一种称为对象工厂的技术的组合来透明地处理这一点。

        图:3.24 展示了使用继承实现设备无关性的方法。像vtkActor这样的某些类被分为两部分:一个是设备无关的超类,另一个是设备相关的子类。关键在于用户通过在设备无关的超类中调用特殊构造函数New()来创建一个设备相关的子类。例如,在C++中,我们会使用

vtkActor *anActor = vtkActor::New()

        来创建一个vtkAc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小道士写程序

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值