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 <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
// 宏二
// #define vtkRenderingCore_AUTOINIT 3(vtkInteractionStyle,vtkRenderingFreeType,vtkRenderingOpenGL2)
// #define vtkRenderingVolume_AUTOINIT 1(vtkRenderingVolumeOpenGL2)

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


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

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

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

	renderWindowInteractor->SetRenderWindow(renderWindow);

	renderWindowInteractor->Start();
	return EXIT_SUCCESS;
}

实验结果:


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


VTKVisualization Toolkit)是一个用于可视化和图形处理的开源软件包,可用于创建各种光滑、渐变和复杂的3D图形。要使用VTK实现草图绘制,可以按照以下步骤进行: 1. 导入所需的VTK库: 通过在代码开始部分添加必要的VTK库导入语句,如“import vtk”来导入VTK相关的库函数。 2. 创建绘制窗口和渲染器: 使用vtkRenderWindow类创建一个绘制窗口,并使用vtkRenderer类创建一个渲染器对象。将渲染器与绘制窗口相关联,以便可以在窗口中显示渲染结果。 3. 创建草图绘制工具: 使用VTK的一些基本几何图元(如线段、圆等)和交互操作类来创建绘制工具。例如,可以使用vtkLineSource类创建直线,使用vtkCircleSource类创建圆等。 4. 连接绘制工具和渲染器: 将绘制工具添加到渲染器中,以便可以在渲染器中显示绘制的草图。使用vtkActor类将绘制工具与渲染器关联起来,并设置绘制工具在渲染器中显示的属性,例如颜色和线宽等。 5. 设置交互操作: 使用vtkRenderWindowInteractor类创建一个交互操作对象,以便用户可以与绘制窗口进行交互。例如,用户可以使用鼠标或触摸屏输入来绘制草图。 6. 更新渲染: 在设置好交互操作后,调用vtkRenderWindow类的Render方法,更新渲染器并在绘制窗口中显示草图。 通过上述步骤,就可以使用VTK实现草图绘制了。当用户在绘制窗口中进行绘制时,草图绘制工具会生成相应的几何图元,并在渲染器中显示出来。用户可以根据需要修改绘制结果,也可以保存草图为文件,以便后续使用或分析。绘制过程中,交互操作还可以提供一些功能,如平移、缩放和旋转等操作,以便更方便地绘制草图。总之,使用VTK实现草图绘制可以为用户提供一个简单易用、灵活多样的绘图工具。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值