我所遭遇过的中间件--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. 分享实用的JavaScript代码库

    1 var keyCodeMap = { 2 8: 'Backspace', 3 9: 'Tab', 4 13: 'Enter', 5 16: 'Shift', 6 17: 'Ctrl', 7 18: ...

  2. poj1251 Jungle Roads(Prime || Kruskal)

    题目链接 http://poj.org/problem?id=1251 题意 有n个村庄,村庄之间有道路连接,求一条最短的路径能够连接起所有村庄,输出这条最短路径的长度. 思路 最小生成树问题,使用普 ...

  3. Git 简史

    同生活中的许多伟大事件一样,Git 诞生于一个极富纷争大举创新的年代.Linux 内核开源项目有着为数众广的参与者.绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务上(1991 ...

  4. 20169211《Linux内核原理与分析》第六周作业

    1.教材内容总结 2.实验报告 3.学习总结 一.教材内容总结 1.系统调用与应用编程接口API的区别 操作系统为用户态进程与硬件设备进行交互提供了一组接口,就是系统调用.它主要有一下三个方面的作用: ...

  5. redis在Linux下的远程连接

    1.redis在Linux下的远程连接: $ redis-cli -h host -p port -a password 如何连接到主机为 127.0.0.1,端口为 6379 ,密码为 mypass ...

  6. maven的统一版本管理实践

    为什么要使用maven的统一版本管理? 在进行项目开发的时候,我们使用maven来做项目的构建和管理.为了方便项目中各个模块之间的复用,项目通常会有多个模块构成.不同的模块,会各自应用自己需要的jar ...

  7. Could not open JDBC Connection for transaction; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Could not create connection to database server.

    报错信息:Could not open JDBC Connection for transaction; nested exception is org.apache.commons.dbcp.SQL ...

  8. Swift2.0语言教程之Swift2.0语言中的标准函数

    Swift2.0语言教程之Swift2.0语言中的标准函数 Swift2.0中的标准函数 函数除了可以根据参数列表的有无分为无参函数和有参函数,还可以从定义角度分为用户自定义函数和标准函数两种.以上的 ...

  9. 利用python实现新浪微博爬虫

    第一个模块,模拟登陆sina微博,创建weiboLogin.py文件,输入以下代码: #! /usr/bin/env python # -*- coding: utf-8 -*- import sys ...

  10. ONVIF开发实例

    <开发过过程中的经验总结> ➤工具的使用     (1)首先将文件soapClientLib.c 中"代码"的第二行和第三行注释掉,实际上该文件根本没有用,为了保险起见 ...