VTK修炼之道43:图形进阶_vtkPolyData数据生成与显示_沈子恒的博客-程序员信息网

技术标签: VTK修炼之道  VTK 三维数据渲染进阶  

1.VTK图像处理引言

图像数据的应用非常广泛,最贴近日常生活的应用是3D游戏,其中每个角色的模型、场景等都是图形数据。当然,游戏仅仅是图像数据的一个应用点。图形在CAD(计算机辅助设计)、影视、医学、地质、气象数据建模等领域中均有着广泛的应用。vtkPolyData是VTK中常用的数据结构之一,可以表示小到一个点、一条线,达到一个模型、一个场景等。

2.vtkPolyData数据生成与显示

之前也曾说过,在这里只是简单的回顾,更重要滴在于深入地理解。
VTKPolyData主要由几何结构数据、拓扑结构数据、属性数据组成。
几何结构数据:组成模型的点集;
拓扑结构数据:这些点根据一定的连接关系组成的单元数据;表明集合点集之间的拓扑关系
属性数据:与几何结构数据和拓扑结构数据相关联,属性数据可以是标量、向量或者张量。
例如,可以为其中的每个点定义曲率属性数据,也可以为其中的每一个单元定义一个法向量属性数据。在VTKPolyData可视化中会利用这些属性数据直接或者间接计算单元或点的颜色。
实例如下:
#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL);

#include <vtkSmartPointer.h>
#include <vtkConeSource.h>
#include <vtkPolyData.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>

int main()
{
	vtkSmartPointer<vtkConeSource> coneSource =
		vtkSmartPointer<vtkConeSource>::New();
	coneSource->Update();

	vtkSmartPointer<vtkPolyData> polyData =
		vtkSmartPointer<vtkPolyData>::New();
	polyData = coneSource->GetOutput();
	int nPoints = polyData->GetNumberOfPoints();
	int nCells = polyData->GetNumberOfCells();
	std::cout << "几何数据(点数):" << nPoints << std::endl;
	std::cout << "拓扑数据(单元):" << nCells << std::endl;

	vtkSmartPointer<vtkPolyDataMapper> mapper =
		vtkSmartPointer<vtkPolyDataMapper>::New();
	mapper->SetInputData(polyData);

	vtkSmartPointer<vtkActor>  actor =
		vtkSmartPointer<vtkActor>::New();
	actor->SetMapper(mapper);

	vtkSmartPointer<vtkRenderer> render =
		vtkSmartPointer<vtkRenderer>::New();
	render->AddActor(actor);
	render->SetBackground(10, 0, 0);

	vtkSmartPointer<vtkRenderWindow> rw =
		vtkSmartPointer<vtkRenderWindow>::New();
	rw->AddRenderer(render);
	rw->SetSize(640, 480);
	rw->SetWindowName("PolyData Structure Learning");
	rw->Render();

	vtkSmartPointer<vtkRenderWindowInteractor> rwi =
		vtkSmartPointer<vtkRenderWindowInteractor>::New();
	rwi->SetRenderWindow(rw);
	rwi->Initialize();
	rwi->Start();

	return 0;
}
上述代码中,
VTKConeSource类定义了一个锥形图形数据,其输出为VTKPolyData类型数据。VTKPolyData的成员函数GetNumberOfPoints()和GetNumberOfCells()分别用来获取图形数据的点数和单元数目。
接下来是定义一个图形数据的渲染管线,包括VTKPolyDataMapper()、vtkActor()、VTKRender()、vtkRenderWindow()和vtkRenderWindowInteractor()。这个渲染流程和图像渲染管线基本一致。需要注意的是,对于VTKPolyData类型数据的渲染管线,需要定义vtkPolyDataMapper对象,用于接受VTKPolyData图形数据以实现图像数据到渲染图元的转换
程序的显示结果如下所示:
从结果可以看出,该椎体是由7个空间点构成了7个单元的数据组成。这里也仅仅定义了一个空间的椎体,并未给点或者单元数据设置属性信息。

3.参看资料

1.《C++ primer》
2.《The VTK User’s Guide – 11thEdition》
3.  张晓东, 罗火灵. VTK图形图像开发进阶[M]. 机械工业出版社, 2015.
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/shenziheng1/article/details/54809989

智能推荐

MTK6735 Android之Camera驱动移植篇_bobuddy的博客-程序员信息网

MTK6735 Android之Camera驱动移植篇首先我们需要向sensor原厂拿到我们对应平台型号的驱动hal层和kernel层的代码。1.拷贝hal层代码到\vendor\mediatek\proprietary\custom\mt6735\hal\D1\imgsensor\目录下。2.拷贝kernel层代码到\kernel-3.10\drivers\misc\mediatek...

Idea插件开发教程_csfchh的博客-程序员信息网

1. 开发环境搭建1.1 IDE使用idea社区版即可。1.2 配置Plguin SDK打开Project Structure设置面板,找到Platform Settings/SDKs:点击上方“+”号,选择Plugin SDK:Home Directory选择idea的安装根目录:JDK选择idea自带的,如果有多个推荐使用版本低一些的:创建完毕:你可以创建多个Plugin SDK,不过通常只需要一个。创建多个SDK的目的主要是用于同时开发调试多个插件时,可以通过配置不同的S

AES-GCM_aes gcm_badm0nkey的博客-程序员信息网

AES-GCMAES-GCM是基于AES-CTR模式改编的,不同于CTR的是GCM在对明文进行加密的时候还会产生tag(类似签名的东西),可以有效的抵御选择明文攻击,因为GCM首先会看tag是否合法,然后才决定是否调用decrypt oracle 进行解密。加密的流程在这篇paper讲的很清楚,我把其中的一部分拿了出来(只有两个明文块的情况)具体的符号定义如下:其中:H=Enck(01...

win7安装sqlserver2014_USCWIFI的博客-程序员信息网

SQL Server2014要求:https://docs.microsoft.com/zh-cn/sql/sql-server/install/hardware-and-software-requirements-for-installing-sql-server?view=sql-server-2014第一步:下载第二步:解压第三步:管理员身份运行第四步:全新安装...

PHP面试题(2021版)_张小妍的博客的博客-程序员信息网

如果你正在寻找PHP开发的工作,那么提前掌握最新的PHP面试题技巧,必然能使你在求职过程中事半功倍。博主还整理了最全面的PHP面试题,包括PHP基础面试题、PHP高级面试题以及PHP常见面试题!关注微信公众号 “PHP大神” 回复“面试题”可以免费下载更多php相关面试题,整理不易请多关注,如有错误请多包涵哈!1、__FILE__表示什么意思?文件的完整路径和文件名。如果用在包含文件中,则返回包含文件名。自 PHP 4.0.2 起,__FILE__ 总是包含一个绝对路径,而在此之前的版本有时会.

conda安装包_weixin_30410119的博客-程序员信息网

  我们一般安装第三方包(pulp)会通过cmd命令: conda install pulp  但是今天安装pulp包的时候出现下面的问题:C:\Users\81584&gt;conda install pulpFetching package metadata .............PackageNotFoundError: Packages missing in current c...

随便推点

WGS1984 -UTM投影问题_wgs84转utm坐标系存在的问题_忠言睿长的博客-程序员信息网

关于WGS1984投影坐标系的相关知识:打开WGS1984投影文件,仔细看看,我们可以发现里面中有三种不同的投影文件:如下:WGS1984 BLM Zone 14N(ftvs).prjWGS 1984 Complex UTM Zone 20N.prj (该处由20N——30N)WGS 1984 UTM Zone 9s.prj(该处由9s——60s)此处的S代表南半球,同样北半球有同

ubuntu替换清华源_ubuntu清华源_blingblingshine的博客-程序员信息网

ubuntu替换清华源通过ubuntu自带软件software&amp;update替换① 打开software&amp;update;② 点击Download from:选项后的倒三角后,点击Other;③ 找到china;④ 找到清华源(mirrors.tuna.tsinghua.edu.cn),选中;⑤ 点击Choose Server保存设置。...

Drupal 8 内核模块变化_木子耗2009的博客-程序员信息网

从 Drupal 8 内核中移除的模块Blog - 从核心移除,作为独立的贡献模块 Blog (http://drupal.org/project/blog)。原本 Drupal 安装起来就什么都不是,现在连 Blog 功能也作为贡献模块,想必新手用户会更困惑(呵呵)Dashboard - 此模块现在是 Homebox 了(http://drupal.org/project/h

Sharding-proxy使用教程(问题:启动Sharding-proxy报Unknown system variable 'query_cache_size'的解决方法)_ziqiiii的博客-程序员信息网

一、使用sharding-proxy,用来测试单库分表,使用教程如下:https://www.jianshu.com/p/0e3f770eb489下载了sharding-proxy-3.0.0打开配置:在127.0.0.1:3306创建ds_0和ds_1数据库直接运行启动:结果stdout.log报错:Unknown system variable...

性能优化之View渲染_小喵Android成长的博客-程序员信息网

首先我们需要知道以下几点1 view的基本绘制流程(ViewGroup和View)2 view的重复绘制原因3 怎么减少重复绘制View的基本绘制流程做过Android开发的同学都知道,View绘制分为三个阶段:测量、布局和绘制。1. 测量即measure阶段:测量主要用到measureSpec这个类,其实是一个32位的int值,其中高2位表示view的测量模式,低3...

一文详解什么是可解释AI_可解释性知识图谱及可解释ai_华为云开发者联盟的博客-程序员信息网

摘要:本文带来什么是可解释AI,如何使用可解释AI能力来更好理解图片分类模型的预测结果,获取作为分类预测依据的关键特征区域,从而判断得到分类结果的合理性和正确性,加速模型调优。1. 为什么需要可解释AI?在人类历史上,技术进步、生产关系逻辑、伦理法规的发展是动态演进的。当一种新的技术在实验室获得突破后,其引发的价值产生方式的变化会依次对商品形态、生产关系等带来冲击,而同时当新技术带来的价值提升得到认可后,商业逻辑的组织形态在自发的调整过程中,也会对技术发展的路径、内容甚至速度提出诉求,并当诉求得到满

推荐文章

热门文章

相关标签