我所遭遇过的中间件--VTK
我所遭遇过的中间件--VTK
Vtk是我接触的第一款软件开发包,它引导我对图形学的入门.我是先学的VTK,后学的OpenGL和D3D.VTK是专为图形学开发,特点是接口清晰,好上手,又含有大量的图像处理算法.从VTK入手3D图形学,要比从OpenGL和D3D容易的多.
最初接触VTK是研一那年暑假,研一时我做医学图像处理.VTK很适合由图像处理转到3D图形学,对做医学图像也很方便.它集成着DICOM图像文件格式的解析器.我看过解析DICOM文件的代码,大约5000多行.这代码量对当时的我来说如同天文数字,而使用VTK,几行代码就可以搞定.这就是中间件的方便之处,为开发者提供成熟的功能.我用VTK做三维医学图像绘制,原始数据是一系列的CT断层切片图像,对其做三维重建,以3D的形式显示.有两种绘制方式,体绘制和面绘制,这方面的资料有很多,我就不细讲了.
我在VTK上投入了极大的激情,VTK的大部分Demo是用一种名为Tcl的脚本语言写的,我便将它们翻译成C++代码.记得有一年的圣诞还是元旦的,我在实验室花了一晚上的时间,将一个Tcl的DEMO改成C++,总共有2000多行代码.程序功能是各种三维图形的堆集.而后我还翻译<Vtk User Guide>,激情燃烧的岁月竟然搞了VTK.我还是国内两个VTK论坛的版主,发过很多关于VTK的帖子,受到很多网友的吹捧,当时我还真有种欣欣然的感觉.但现实总让人很无奈,VTK只是一种现成的图形技术,研究生的工作重点不在于做出了多么牛的软件,不在于你掌握了多强的技术,而是你提出了什么理论,发表了什么论文.不管理论是否可行,能够实现,甚至不管论文的数据是否真实.只要你的理论让人看上去深奥一些,能自圆其说,该有的数据看上去正常一些,毕业就是如此容易.可惜我是在研二结束的开题评审后,才意识到这件事.当时我的开题是要做一套医学三维图像显示系统,并准备了很多自己生成的三维效果截图.但评审老师很明确的指出我的问题,没有自己的理论.幸好我的导师在院里地位高,我的评审算过了.而我的研究课题就改成了三维医学图像体数据分割与显示.三维体数据分割,这个方向算不错,在当时搞的人少又比较新.但我已然没有搞这算法的激情了,既然造数据就能发论文,何必再写代码生成数据呢?我提出的理论为基于8叉树的三维体数据分割,然后实验的截图是用VTK本来提供的区域增长法得到的,具体的算法性能数据是自己编造的.于是顺利完成毕业论文,顺利答辩通过,顺利毕业.毕业时,将自己写的VTK的程序都发布到网上,我就再也没有碰过VTK.毕业两年后,接了个私活是代人写硕士毕业论文,题目还是三维体数据分割,这次又提出一个算法为基于自适应包围盒的体数据分割.当时参考了若干篇毕业论文,发现有个人的实验数据和我的一模一样,有点搞笑,我的数据也是假的.不过这次代人写论文时,我用代码实现了基于8叉树的三维体数据分割和基于自适应包围盒的体数据分割这两种算法.在我的博客中已经将算法的详细介绍以及代码发布出去了.只是,代码我也没有运行调试过,当年的运行环境,实验的原始图像数据已经不存在了.
再回到VTK的话题上,由于已经五,六年没有碰过VTK了,这门手艺算是废了.记得VTK对数据的处理是一种管道流的架构,这很符合图像的滤波处理,输入图像经过处理后再输出图像.多个滤波器可以串行处理,实现复杂的图像处理.不过话又说回来,所有的图像处理都不是完美的,任何一个滤波操作会有一定的信息丢失.也就是说,图像还是原始的好.VTK提供的官方的DEMO大多采用面向过程的流程,一套数据,从加载到渲染一路串下来很清晰.VTK的低层渲染用的是OpenGL但是在VTK对外提供的接口中,看不到任何OPENGL的影子,VTK将OPENGL完全封装了.记得当年论坛上有人问能否在VTK中集成OPENGL,答案是当然可以,只是怎么集成我没研究过.当年VTK的体绘制非常卡,不知道现在优化的怎么样.毕竟过去这么多年了,算法和硬件都提升了很多.体绘制也是种很神奇的算法,但在游戏中没人会用.
如果说我在VTK上有什么遗憾的话,那就是:我从没有看过VTK的源码.当年我仅仅满足于论坛上一群粉丝的热捧,自我感觉良好,却没有意识到自己是井底之蛙.我不过是VTK的一个User,连Reader都算不上,更别提Developer了.在这里,我不得不佩服国外这些写开源软件的人.VTK是一款很棒的图形引擎,又是开源,没有好好读下它的源码实在遗憾.它有几个MESH三角形细分的算法,有一些曲线生成,曲面生成的算法,值得一看.
我所遭遇过的中间件--VTK的更多相关文章
- 我所遭遇过的中间件--3D MAX SDK
搞图形的人都知道3D MAX,而3D MAX SDK就是在该软件基础上的一套软件开发包.至于该不该将3D MAX SDK归纳为中间件,不要在意这细节了,反正我觉得SDK和中间件就差不多是一个东西.实际 ...
- 我所遭遇过的游戏中间件---SpeedTree
我所遭遇过的游戏中间件---SpeedTree SpeedTree是一个专门用于渲染植被的中间件,并提供了一套完善的植物编辑工具.在它官方提供的DEMO中,你会看到高度逼真的树木和植物,在风的影响下树 ...
- 我所遭遇过的游戏中间件---nvDXTLib
我所遭遇过的游戏中间件---nvDXTLib nvDXTLib是Nvidia提供的一套用于DXT纹理压缩SDK.接口十分简洁,就是提供了几个纹理压缩的函数,其中我使用最多的函数是: DXTLIB_AP ...
- 我所遭遇过的游戏中间件---HumanIK
我所遭遇过的游戏中间件---HumanIK Autodesk HumanIK游戏中间件,为游戏创建更加可信.真实的角色动画.该中间件的全身逆向运动(FBIK)系统支持角色真实地与所在环境及其它角色进行 ...
- 我所遭遇过的游戏中间件--Kynapse
我所遭遇过的游戏中间件--Kynapse Autodesk Kynapse游戏中间件是一款面向游戏开发.非玩家控制角色实时模拟的领先的人工智能解决方案.Kynapse具有先进的路径查找功能,比如三维路 ...
- 我所遭遇过的游戏中间件--Scaleform
我所遭遇过的游戏中间件---Scaleform Scaleform帮助开发人员利用现代系统的三维硬件加速性能创建电影品质的菜单.游戏内HUD,动画纹理.迷你游戏以及移动游戏与应用.Scaleform作 ...
- 我所遭遇过的游戏中间件---Redux
我所遭遇过的游戏中间件---Redux 一.关于Redux Substance Redux 是一款纹理处理软件加中间件,专门用于纹理生成和压缩.具其用户指南介绍,它能够对纹理集进行优化,可以将现有压缩 ...
- 我所遭遇过的游戏中间件--Apex
我所遭遇过的游戏中间件--Apex Apex是PhysX的扩展中间件,它是在PhysX的基础上封装了一层.用于实现布料,粒子,破碎这三种物理效果.我只研究其布料处理.使用Apex做物理最大的好处是:它 ...
- 我所遭遇过的游戏中间件--PhysX
我所遭遇过的游戏中间件--PhysX PhysX现在是Nvidia的物理中间件.其特点是简练且功能强大.当我最初拿到PHYSX的SDK时,就发现这个物理中间件比Havok要小很多,但该有的功能都有,甚 ...
随机推荐
- 使用linux mysql客户端建立表时遇到格式解析的问题
发现在notepad++写好的建表脚本,粘贴到linux客户端后,执行时总是报我的脚本有问题. 我看了又看,发现建表脚本本身是没有问题,问题出在"Tab"键上和注释上边了. 解决办 ...
- hdoj2544 最短路(Dijkstra || Floyd || SPFA)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=2544 思路 最短路算法模板题,求解使用的Dijkstra算法.Floyd算法.SPFA算法可以当做求解 ...
- OSPF详解
OSPF 详解 (1) [此博文包含图片] (2013-02-04 18:02:33) 转载 ▼ 标签: 端的 第二 以太 第一个 正在 目录 序言 初学乍练 循序渐进学习OSPF 朱皓 入门之前 了 ...
- vector 邻接表的建立(好笨啊,才懂,可能太困了吧)。。
原创,未经允许不得转载. 图的建立有两种,邻接矩阵和邻接表. 邻接矩阵适用于图较为密集,(稀疏图太浪费存储空间了),图如果较为稀疏,则使用邻接表为宜,dijkstra算法就是以邻接表为基础的. 有向无 ...
- Android Studio奇技淫巧
No1: Ctrl+E:显示最近浏览过的文件 Ctrl+Shift+E:显示最近编辑过的文件 Ctrl+Tab:切换最近编辑过的文件 No2: 条件断点:断点右键 No3: 全局断点 这样只要碰到空指 ...
- Tensorflow学习:(二)搭建神经网络
一.神经网络的实现过程 1.准备数据集,提取特征,作为输入喂给神经网络 2.搭建神经网络结构,从输入到输出 3.大量特征数据喂给 NN,迭代优化 NN 参数 4.使 ...
- 图解在Eclipse中如何上传项目到svn
方法/步骤 1.在Eclipse中新建project,如下图所示: 2.右键project --> team --> share project,如下图所示: 3.选择repository ...
- JavaScript基础-DAY2
JavaScript对象 在JavaScript中除了null和undefined以外其他的数据类型都被定义成了对象,也可以用创建对象的方法定义变量,String.Math.Array.Date.Re ...
- android OOM 内存溢出
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha 一个应用的可用内存是有限的,如果超过了可用的内存,就会内存溢出. 1,避免 已经不用的对 ...
- 「JSOI2018」战争
「JSOI2018」战争 解题思路 我们需要每次求给一个凸包加上一个向量后是否与另外一个凸包相交,也就是说是否存在 \[ b\in B,(b+w)\in A \] 这里 \(A, B\) 表示凸包内部 ...