VTK渲染引擎

news/2024/11/18 13:52:28/

本文翻译自VTK user guide.


VTK渲染引擎由VTK中的类组成,这些类负责获取可视化管道的结果并将其显示到窗口中。这涉及以下组件。注意,这并不是一个完备的列表,而是渲染引擎中最常用对象的含义。这里使用的副标题是VTK中表示这种类型对象的最高级别超类,都是抽象类;大多数情况下有多种选择;这些抽象类定义了实现该功能的各种具体子类的基本API

vtkProp. 场景中存在的数据的可见描述由vtkProp的子类表示。vtkProp中用于在3D中显示对象的最常用子类是vtkActor(用于表示场景中的几何数据)vtkVolume(用于表示场景中的体积数据)。还有一些在2D中表示数据的道具,如vtkActor2DvtkProp子类通常负责了解其在场景中的位置、大小和方向。用于控制道具放置的参数通常取决于道具是场景中的三维对象还是二维注释。对于vtkActorvtkVolume3D Prop(vtkProp3D的两个子类,它本身就是vtkProp的子类),可以直接控制对象的3D位置、方向和比例等参数,也可以使用4x4变换矩阵。对于提供注释的2D Prop(VTKScalArbarator),可以通过多种方式定义注释的大小和位置,包括指定相对于整个视口大小的位置、宽度和高度。除了提供放置控制之外,道具通常还有一个保存数据并知道如何渲染数据的映射器对象,以及一个控制颜色和不透明度等参数的属性对象。

有超过50个专门的道具,例如vtkImageActor用于显示图像,vtkPieChartActor用于创建数值数组的饼图视觉表示。其中一些专用道具直接包含控制外观的参数,并直接引用要渲染的输入数据,因此不需要使用属性或映射器。vtkFollower道具是vtkActor的一个特殊子类,它将自动更新其方向,以便连续面对指定的摄影机。这对于在3D场景中显示广告牌或文本以及在用户旋转时使其保持可见非常有用。vtkLODActor也是vtkActor的一个子类,它自动更改其几何表示以保持交互式帧速率,而vtkLODProp3DvtkProp3D的一个子类,它在多个不同的映射器,甚至可能是体映射器和几何映射器的混合,之间进行选择以提供交互。VTKAssembly允许角色的层次结构,在层次结构被平移、旋转或缩放时,可以正确管理转换。

vtkAbstractMapper. 有些道具,如vtkActorvtkVolume,使用vtkAbstractMapper的子类来保存对输入数据的引用,并提供实际的渲染功能。vtkPolyDataMapper是渲染多边形几何体的主要映射器。对于体积对象,VTK提供了几种渲染技术,包括可用于渲染vtkImageDatavtkFixedPointVolumeRayCastMapper,以及可用于渲染vtkUnstructuredGrid数据的vtkProjectedTetrahedra映射器。

vtkProperty and vtkVolumeProperty. 一些道具使用单独的属性对象来保存控制数据外观的各种参数。这可以更轻松地在场景中的不同对象之间共享外观设置。vtkActor对象使用vtkProperty存储诸如颜色、不透明度以及材质的环境光、漫反射和镜面反射系数等参数。vtkVolume对象使用vtkVolumeProperty来捕获适用于体积对象的参数,例如将标量值映射到颜色和不透明度的传递函数。许多映射器还提供设置可用于显示内部结构的剪裁平面的功能。

vtkCamera. vtkCamera包含控制如何查看场景的参数。vtkCamera有一个位置、一个焦点和一个定义场景中向上方向的向量。其他参数控制特定的查看变换(平行或透视)、图像的比例或视角以及视锥体的近剪裁平面和远剪裁平面。

vtkLight. 为场景计算照明时,需要一个或多个vtkLight对象。vtkLight对象存储灯光的位置和方向,以及颜色和强度。灯光还有一种类型,描述灯光将如何相对于相机移动。例如,前照灯始终位于摄影机的位置并照射在摄影机的焦点上,而场景灯位于场景中的固定位置。

vtkRenderer. 构成场景的对象(包括道具、相机和灯光)收集在vtkrender中。vtkRenderer负责管理场景的渲染过程。多个vtkRenderer对象可以在单个vtkRenderWindow中一起使用。这些渲染器可以渲染到渲染窗口的不同矩形区域(称为视口),也可以重叠。

vtkRenderWindow. vtkRenderWindow提供操作系统和VTK渲染引擎之间的连接。vtkRenderWindow的特定于平台的子类负责在计算机上的本机窗口系统中打开窗口并管理渲染过程。使用VTK开发时,只需使用独立于平台的vtkRenderWindow,该窗口在运行时会自动替换为正确的特定于平台的子类。vtkRenderWindow包含vtkRenderer的集合,以及控制渲染功能(如立体、抗锯齿、运动模糊和焦距)的参数。

vtkRenderWindowInteractor. VTKrenderWindowInteractior负责处理鼠标、键和计时器事件,并通过VTK的命令/观察者设计模式实现这些事件。vtkInteractorStyle侦听并处理这些事件,以便提供旋转、平移和缩放等运动控制。vtkRenderWindowInteractior会自动创建一个默认的Interactior样式,该样式适用于3D场景,但您可以选择一个用于查看2D图像,或者创建自己的自定义Interactior样式。

vtkTransform. 场景中需要放置的许多对象(如道具、灯光和摄影机)都具有vtkTransform参数,可用于轻松操纵对象的位置和方向。VTK变换可用于描述三维线性(也称为仿射)坐标变换的全范围,其内部表示为4x4齐次变换矩阵。vtkTransform对象将以默认的标识矩阵开始;也可以以管道方式将转换链接在一起,以创建复杂的行为。管道机制确保,如果修改管道中的任何变换,所有后续变换都会相应更新。

vtkLookupTable, vtkColorTransferFunction, and vtkPiecewiseFunction. 可视化标量数据通常涉及定义从标量值到颜色和不透明度的映射。在几何曲面渲染中,不透明度将定义曲面的半透明性;在体积渲染中,不透明度将表示沿穿过体积的某段光线累积的不透明度。在几何渲染中,此映射通常使用vtkLookupTable创建;在体积渲染中,通常使用vtkcolorttransferfunctionvtkPiecewiseFunction创建。

A minimal example. 以下示例显示了如何使用这些对象指定和渲染场景(VTK/Examples/Rendering/Cxx/Cylinder.cxx)

vtkCylinderSource *cylinder = vtkCylinderSource::New();

vtkPolyDataMapper *cylinderMapper = vtkPolyDataMapper::New();

cylinderMapper->SetInputConnection(cylinder->GetOutputPort());

vtkActor *cylinderActor = vtkActor::New();

cylinderActor->SetMapper(cylinderMapper);

vtkRenderer *ren1 = vtkRenderer::New();

ren1->AddActor(cylinderActor);

vtkRenderWindow *renWin = vtkRenderWindow::New();

renWin->AddRenderer(ren1);

vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();

iren->SetRenderWindow(renWin);

renWin->Render();

iren->Start();

本例中直接创建了vtkActorvtkPolyDataMappervtKrendervtkRenderWindowvtKrenderWindowInteractior。请注意,vtkProperty是由参与者自动创建的,vtkLightvtkCamera是由vtkRenderer自动创建的。


http://www.ppmy.cn/news/372526.html

相关文章

VTK简介

VTK(Visualization ToolKit) 是一个开放源码、自由获取的软件系统,全世界的数以千计的研究人员和开发人员用它来进行3D 计算机图形,图像处理,可视化。VTK 包含一个c 类库,众多的翻译接口层,包括Tcl/Tk ,Jav…

VTRK+PICO

碰撞检测 1、通过刚体组件(Rigidbody)和碰撞器组件(Collider)来进行检测 选择一个物体添加刚性物体 2、触发检测条件:至少有一方是刚性物体,双方都有mesh collider ​ 碰撞检测条件:主动方是…

VTK- vtkStripper

前言:本博文主要研究接口vtkStripper的实现原理及主要的应用场景,希望对各位小伙伴有所帮助。 描述:vtkStripper是一个过滤器,用于从输入多边形、三角形带和线中生成三角形带和/或折线。输入多边形仅当它们是三角形时才被组装成三…

git 提交到远程仓库 报错 error: failed to push some refs to ‘https://xxxxxx.git‘

git 学习地址 参考链接 报错如下 error: failed to push some refs to https://github.com/GDDXZ/RobotDenso.git hint: Updates were rejected because the remote contains work that you do hint: not have locally. This is usually caused by another repository pushi…

2014世界10大DRAM公司

DRAM(Dynamic Random Access Memory),即动态随机存取存储器,是一种 最常见的半导体存储器,主要的作用原理是利用电容内存储电荷的多寡来代表一个二进制比特(bit)是1还是0。据IHS调查显示,2013年世界DRAM的销售值比上年窜升了32.5%…

linux新机怎么下载软件,新机安装linux日记

新主机: CPU: AMD 闪龙2800 主板:昂达N61V (芯片组nVIDIA MPC61) 安装fc5 插入第一张光盘,在:kernel_thread_helper0x4/0xb 就在这里就停住不动了.诸处寻因不得果. 开始以为主板不支持linux,后得知只要芯片组支持就可以了,而且这个芯片组是支持了,因为据说安装uBUNTU没问题. 后…

SDRAM 命名规则

 一般内存条上面如果没有贴标的话,只有通过芯片(港台地区还习惯称为内存颗粒)来看容量了。 例如HY 57V658010CTC-10s, HY表示现代的芯片,57代表SDRAM,65是64M和4K refresh cycles…

JavaScript之创建对象的模式

使用Object的构造函数可以创建对象或者使用对象字面量来创建单个对象,但是这些方法有一个明显的缺点:使用相同的一个接口创建很多对象,会产生大量的重复代码。 (一)工厂模式 这种模式抽象了创建具体对象的过程。考虑…