VTK 简单绘制

VTK的可视化技术是基于管线流(data pipeline)的设计模式(数据传递模式):

数据源(Source)-->过滤器(Filters)-->映射(Mappers)-->Props对象(Actor/Volume) --> 绘制对象(Renderer)-->绘制窗口(RenderWindow

渲染窗口(RenderWindow): 基类为vtkRenderWindow,管理显示设备上的窗口, 一个或多个绘制方法可在渲染窗口上创建一个场景。渲染窗口是用户图形界面, 其中包括了设置渲染窗口的大小, 产生立体显示效果等的方法, 一共控制控制两个缓存; 


渲染器(Renderer): 基类为vtkRenderer,作用是管理光源、照相机和绘制对象等的位置、属性等。 提供 世界坐标系, 观察坐标系及显示坐标系之间的转换;


角色(Actor):  vtkActor代表渲染场景中的绘制对象实体。通过参数的调节可以设置角色的位置方向, 渲染特性(Property),引用(renference),纹理影射(Texture)等属性,并可对Actor进行放缩。角色的改变是通过一个4*4的变换矩阵实现的;


映射(Mapper): vtkMapper指定了渲染数据和图形库中基本图元之间的联系。VtkMapper的一些派生类通过LookupTable映射数据并控制图形库中相应Actor 图元的生成。一个或多个Actor可以使用相同的Mapper。Mapper有多个参数对其进行控制, 如ScalarVisibility 标志 可以设置scalar的数据是否影响相关的Actor 的颜色; ScalarMode 可以控制Actor的颜 色是scalar point还是cell的值; 渲染方式可以通过 ( ImmediateModeRenderingOn)和( ImmediateModeRenderingOff) 控制, 前一项表示立即渲染, 后一 项表示将渲染放于渲染列表中, 一般选择ImmediateModeRenderingOn方式进行, 选择后者将会占用较多的系统资源, 影响系统的性能; 

                              

参考网址



实例:

// 因为项目是直接在vs中新建的,所以需要加两种不同宏其中的一个,注意我的VTK版本为7.0.0

// 宏一
#include 
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
// 宏二
// #define vtkRenderingCore_AUTOINIT 3(vtkInteractionStyle,vtkRenderingFreeType,vtkRenderingOpenGL2)
// #define vtkRenderingVolume_AUTOINIT 1(vtkRenderingVolumeOpenGL2)

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 


int main(int, char *[])
{
	// 数据源
	vtkSmartPointer cylinder = vtkSmartPointer::New(); 
	cylinder->SetResolution(8);
	//Mapper
	vtkSmartPointer cylinderMapper = vtkSmartPointer::New(); 
	cylinderMapper->SetInputConnection(cylinder->GetOutputPort());
    // Actor
	vtkSmartPointer cylinderActor = vtkSmartPointer::New(); 

	cylinderActor->SetMapper(cylinderMapper);
	cylinderActor->GetProperty()->SetColor(1.0, 0.3882, 0.2784);
	cylinderActor->RotateX(30.0);
	cylinderActor->RotateY(-45.0);
	//  Render
	vtkSmartPointer render = vtkSmartPointer::New(); 

	render->AddActor(cylinderActor);
	render->SetBackground(0.1, 0.2, 0.4);
	render->ResetCamera();
	render->GetActiveCamera()->Zoom(1.5);
	// RenderWindow
	vtkSmartPointer renderWindow = vtkSmartPointer::New();   
	renderWindow->SetSize(200, 200);
	renderWindow->AddRenderer(render);
	// RenderWindowInteractor
	vtkSmartPointer renderWindowInteractor = vtkSmartPointer::New();  

	renderWindowInteractor->SetRenderWindow(renderWindow);

	renderWindowInteractor->Start();
	return EXIT_SUCCESS;
}

实验结果:

VTK 简单绘制_第1张图片

【个人觉得头文件好多好麻烦,因为是新手所以继续努力吧。。。】


你可能感兴趣的:(VTK)