VTK基本概念之主要对象

 本文以一个显示柱体的vtk程序介绍vtk编程中的主要对象。

显示柱体的VTK程序

CMakeLists.txt文件代码如下:

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
PROJECT(RenderCylinder)
FIND_PACKAGE(VTK REQUIRED)
INCLUDE(${VTK_USE_FILE})
ADD_EXECUTABLE(RenderCylinder RenderCylinder.cpp)
TARGET_LINK_LIBRARIES(RenderCylinder ${VTK_LIBRARIES})

RenderCylinder.cpp文件代码如下:

#include <vtkSmartPointer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderer.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkInteractorStyleTrackballCamera.h>
#include <vtkCylinderSource.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkProperty.h>

int main()
{
    vtkSmartPointer<vtkCylinderSource> cylinder = 
        vtkSmartPointer<vtkCylinderSource>::New();
    cylinder->SetHeight( 3.0 );
    cylinder->SetRadius( 1.0 );
    cylinder->SetResolution( 10 ); 

    vtkSmartPointer<vtkPolyDataMapper> cylinderMapper = 
        vtkSmartPointer<vtkPolyDataMapper>::New();
    cylinderMapper->SetInputConnection( cylinder->GetOutputPort() ); 

    vtkSmartPointer<vtkActor> cylinderActor = 
        vtkSmartPointer<vtkActor>::New();
    cylinderActor->SetMapper( cylinderMapper );
    cylinderActor->GetProperty()->SetColor(1.0, 0.0, 0.0);

    vtkSmartPointer<vtkRenderer> renderer = 
        vtkSmartPointer<vtkRenderer>::New();
    renderer->AddActor( cylinderActor );
    renderer->SetBackground( 1.0, 1.0, 1.0 );

    vtkSmartPointer<vtkRenderWindow> renWin = 
        vtkSmartPointer<vtkRenderWindow>::New();
    renWin->AddRenderer( renderer );
    renWin->SetSize( 640, 480 );
    renWin->Render();
    renWin->SetWindowName("RenderCylinder");

    vtkSmartPointer<vtkRenderWindowInteractor> iren = 
        vtkSmartPointer<vtkRenderWindowInteractor>::New();
    iren->SetRenderWindow(renWin);

    vtkSmartPointer<vtkInteractorStyleTrackballCamera> style = 
        vtkSmartPointer<vtkInteractorStyleTrackballCamera>::New();
    iren->SetInteractorStyle(style);

    iren->Initialize();
    iren->Start();

    return EXIT_SUCCESS;
}

程序运行结果如下:

这里写图片描述

VTK的使用流程

上面的例子是一个简单完整VTK程序,按照下图所示,完成了VTK的使用流程。

这里写图片描述

下面介绍VTK中的主要对象

1、vtkSource

  数据源,对应上面的vtkCylinderSource类。其它数据源有:vtkConeSource, vtkSphereSource, vtkOutlineSource等,都派生自vtkPolyDataAlgorithm类,该类用于提供不同的类型的数据源。

2、vtkMapper

 映射器,对应上面的vtkPolyDataMapper类。其它映射器有:vtkDataSetMapper,vtkMultiGroupPolyDataMapper,vtkPolyDataMapper。它们都继承于vtkMapper类,将输入的数据转换成几何图元(点、线、多边形)进行渲染。

3、vtkActor

  该类派生自vtkProp类,渲染场景中数据的可视化表达通过vtkProp的子类负责。
  三维空间中渲染对象最常用的vtkProp子类有vtkActor(表达场景中的几何数据)和vtkVolume(表达场景中的体数据);二维空间中的数据则用vtkActor2D表达。
  vtkProp依赖于两个对象:一个是vtkMapper对象,负责存放数据和渲染信息,另外一个是属性(vtkProperty)对象,负责控制颜色、不透明度等参数。

4、vtkRenderer

  渲染器,负责管理场景的渲染过程。组成场景的对象包括Prop、相机(vtkCamera)和光照(vtkLight),一个vtkRenderWindow中可以有多个vtkRenderer对象。
  vtkRenderer::AddActor():该方法用于将vtkProp类型的对象添加到渲染场景中。
  vtkRenderer::SetBackground():该方法用于设置渲染场景的背景颜色。

5、vtkRenderWindow

  窗口,将操作系统与VTK渲染引擎连接到一起。不同平台下的vtkRenderWindow子类负责管理本地计算机系统中窗口创建和渲染过程。当使用VTK开发应用程序时,只需要使用与平台无关的vtkRenderWindow类,运行时,系统会自动替换为与平台相关的vtkRenderWindow子类。比如,Windows下运行,实际创建的是vtkWin32OpenGLRenderWindow对象。vtkRenderWindow中包含了vtkRender集合、渲染参数,如立体显示(Stereo)、反走样、运动模糊(Motion Blur)和焦点深度(Focal Depth)等。

6、vtkRenderWindowInteractor

  窗口交互器,提供平台独立的响应鼠标、键盘和时钟事件的交互机制,通过VTK的观察者/命令模式将监听到的特定平台的鼠标、键盘和时钟事件交由vtkInteractorObserver或其子类,如vtkInteractorStyle进行处理。vtkInteractorStyle等监听到这些消息并进行处理以完成旋转、拉伸和缩放等运动控制。
  vtkRenderWindowInteractor会自动建立一个默认的3D场景交互器样式(Interactor Style):vtkInteractorStyleSwitch。也可以选择其他交互器样式或者创建自己的交互器样式,上面使用的是
vtkInteractorStyleTrackballCamera。

7、vtkInteractorStyle

  交互器样式,对应上面的vtkInteractorStyleTrackballCamera,派生自
vtkInteractorStyle。vtkInteractorStyleTrackballCamera样式下,用户通过控制相机对物体旋转、放大、缩小等操作。

各对象之间的关系:

这里写图片描述

示例代码中对象关系如下所示

这里写图片描述

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要设置VTK对象的颜色或亮度,可以使用vtkProperty类中的SetColor()和SetOpacity()方法。SetColor()方法接受三个浮点数参数,分别表示红、绿、蓝三个通道的颜色值,范围在0到1之间。SetOpacity()方法接受一个浮点数参数,表示对象的不透明度,值范围在0到1之间,0表示完全透明,1表示完全不透明。 例如,以下代码将一个球体对象的颜色设置为红色,不透明度设置为0.8: ``` vtkSmartPointer<vtkSphereSource> sphere = vtkSmartPointer<vtkSphereSource>::New(); sphere->SetRadius(1.0); vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New(); mapper->SetInputConnection(sphere->GetOutputPort()); vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New(); actor->SetMapper(mapper); actor->GetProperty()->SetColor(1.0, 0.0, 0.0); actor->GetProperty()->SetOpacity(0.8); vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New(); renderer->AddActor(actor); vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New(); renderWindow->AddRenderer(renderer); vtkSmartPointer<vtkRenderWindowInteractor> interactor = vtkSmartPointer<vtkRenderWindowInteractor>::New(); interactor->SetRenderWindow(renderWindow); renderWindow->Render(); interactor->Start(); ``` 您还可以使用vtkProperty类中的SetAmbient()、SetDiffuse()和SetSpecular()方法来设置对象的环境光、漫反射和镜面反射属性。这些方法接受一个浮点数参数,表示属性的强度,值范围在0到1之间。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值