我所遭遇过的中间件--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的更多相关文章

  1. 我所遭遇过的中间件--3D MAX SDK

    搞图形的人都知道3D MAX,而3D MAX SDK就是在该软件基础上的一套软件开发包.至于该不该将3D MAX SDK归纳为中间件,不要在意这细节了,反正我觉得SDK和中间件就差不多是一个东西.实际 ...

  2. 我所遭遇过的游戏中间件---SpeedTree

    我所遭遇过的游戏中间件---SpeedTree SpeedTree是一个专门用于渲染植被的中间件,并提供了一套完善的植物编辑工具.在它官方提供的DEMO中,你会看到高度逼真的树木和植物,在风的影响下树 ...

  3. 我所遭遇过的游戏中间件---nvDXTLib

    我所遭遇过的游戏中间件---nvDXTLib nvDXTLib是Nvidia提供的一套用于DXT纹理压缩SDK.接口十分简洁,就是提供了几个纹理压缩的函数,其中我使用最多的函数是: DXTLIB_AP ...

  4. 我所遭遇过的游戏中间件---HumanIK

    我所遭遇过的游戏中间件---HumanIK Autodesk HumanIK游戏中间件,为游戏创建更加可信.真实的角色动画.该中间件的全身逆向运动(FBIK)系统支持角色真实地与所在环境及其它角色进行 ...

  5. 我所遭遇过的游戏中间件--Kynapse

    我所遭遇过的游戏中间件--Kynapse Autodesk Kynapse游戏中间件是一款面向游戏开发.非玩家控制角色实时模拟的领先的人工智能解决方案.Kynapse具有先进的路径查找功能,比如三维路 ...

  6. 我所遭遇过的游戏中间件--Scaleform

    我所遭遇过的游戏中间件---Scaleform Scaleform帮助开发人员利用现代系统的三维硬件加速性能创建电影品质的菜单.游戏内HUD,动画纹理.迷你游戏以及移动游戏与应用.Scaleform作 ...

  7. 我所遭遇过的游戏中间件---Redux

    我所遭遇过的游戏中间件---Redux 一.关于Redux Substance Redux 是一款纹理处理软件加中间件,专门用于纹理生成和压缩.具其用户指南介绍,它能够对纹理集进行优化,可以将现有压缩 ...

  8. 我所遭遇过的游戏中间件--Apex

    我所遭遇过的游戏中间件--Apex Apex是PhysX的扩展中间件,它是在PhysX的基础上封装了一层.用于实现布料,粒子,破碎这三种物理效果.我只研究其布料处理.使用Apex做物理最大的好处是:它 ...

  9. 我所遭遇过的游戏中间件--PhysX

    我所遭遇过的游戏中间件--PhysX PhysX现在是Nvidia的物理中间件.其特点是简练且功能强大.当我最初拿到PHYSX的SDK时,就发现这个物理中间件比Havok要小很多,但该有的功能都有,甚 ...

随机推荐

  1. Python 多线程 实例

    多线程实例 import threading import time def eat(): eatTime = time.time() for i in range(30): print('count ...

  2. 基于Apollo实现.NET Core微服务统一配置(测试环境-单机)

    一.前言 注:此篇只是为测试环境下的快速入门.后续会给大家带来生产环境下得实战开发. 具体的大家可以去看官方推荐.非常的简单明了.以下介绍引用官方内容: Apollo(阿波罗)是携程框架部门研发的分布 ...

  3. MySQL Hash索引和B-Tree索引的区别

    MySQL Hash索引和B-Tree索引的区别究竟在哪里呢?相信很多人都有这样的疑问,下文对两者的区别进行了详细的分析,供您参考. MySQL Hash索引结构的特殊性,其检索效率非常高,索引的检索 ...

  4. 用Python开始机器学习(3:数据拟合与广义线性回归)

    机器学习中的预测问题通常分为2类:回归与分类. 简单的说回归就是预测数值,而分类是给数据打上标签归类. 本文讲述如何用Python进行基本的数据拟合,以及如何对拟合结果的误差进行分析. 本例中使用一个 ...

  5. Power OJ 2605 SPFA+dp思想

    题目链接[https://www.oj.swust.edu.cn/problem/show/2605] 题意:给出包含N(N <= 5000)个点M条边的有向图,然后求1 - N在满足距离小于T ...

  6. 【UOJ #221】【NOI 2016】循环之美

    http://uoj.ac/problem/221 因为\(a\)和\(b\)不互质时,\(\frac ab=\frac{\frac a{(a,b)}}{\frac b{(a,b)}}\),所以只用求 ...

  7. 解决Jboss中log4j在应用里面无法使用的问题

    [参考1]解决Jboss中log4j在应用里面无法使用的问题http://developer.51cto.com/art/200906/128691.htm文章中说到“如果你的应用下存在WEB-INF ...

  8. Py脚本运行后暂停不退出

    方法一:在脚本结束后提示用户按任意键退出 import os os.system('pause') 方法二:在脚本结束后等待输入,按回车键退出 input("") 方法三:在脚本结 ...

  9. hihocoder #1299 : 打折机票 线段树

    #1299 : 打折机票 题目连接: http://hihocoder.com/problemset/problem/1299 Description 因为思念新宿的"小姐姐"们, ...

  10. Codeforces Round #257 (Div. 2) A. Jzzhu and Children

    A. Jzzhu and Children time limit per test 1 second memory limit per test 256 megabytes input standar ...