VTK Applet 的开发进度
VTK 是一种 3D 的 visualization 处理 API,由 kitware 发布的开源计划。听说在很多大学中都是被广泛用作 visualiation 的实作示范,它包含的 class 真的是多到很恐怖的……
当然还有更大的专案,但对我来说,一人之力,这种 source file及 class 已经超过一千个的专案,已经算是够大了。
这几天见进度延后了,拼了……每天一起来就打开电脑继续研究,每天都通宵做到明天早上太太上班了,自己累倒了,才倒在床上睡觉。日复一日,做到电脑面前已经数不清有多少小时了。
我现在在做的东西是,要在 Java Applet 上面实现 VTK,换言之,signed-applet + JNI + VTK wrapper 是实现唯一的选择。
这个提议是我自己向上司提出的……毕竟要是要靠原本的手动用 Java 一个个 visualization method 实现下去,要做到何年何月才能做得出来?
而且这是重复发明轮子,比方说 contour/ isosurface 这些实现方式,早在 VTK 中就写出来了。
为了要在 Applet 上面使用(目的是要跨平台、在browser 上面使用),而用 Java 一个个程式再写过去,并不是明智之举。
尤其是只有我一个人手……要写到什么时候呢?
我硬着头皮向上司提出,尝试在 Java 里面,用 applet 驱动 VTK 的 DLL (VTK 是用 C/C++ 写的)。
对于我这个毛头小子来说,牵涉的技术未免稍微超过了我的能力范围了……要在browser 里面运行的 applet 中驱动属于 C/C++ 的,JNI 是唯一的解法。
要使用 JNI,第一步就必须用 signed-applet 穿透 JVM 的 sandbox……要不然,applet 是没办法读取 native 的 VTK DLL 的。
这第一关,花了一定的时间,托 Google 之福,大约知道了要怎么做成 signed-JAR,然后就能在 client-PC 上面横行无忌了。
第二关,就是该 applet 到底要驱动 VTK 的什么东西?
我就在这边踢到了铁板。
我以为只要用 JNI 驱动 VTK 的 DLL 就好,但我忘记了,VTK 是一个 visualization 的 API classes,它设计的目的,就是向荧幕输出影像,在 native 下面是没有问题,在 browser 的 applet 环境下面,怎么向它 pass screen 的 buffer?这真的是大大的麻烦!
最后,找到了一些方法解决到了(VTK 有提供相关的 wrapper classes)……坦白说我也不是很明白解决方法的工作原理。所以还是有隐忧的。中间还有种种问题,就不一一细说了。
到了几小时之前,终于在荧幕面前做出了骷髅头的 3D 模型!最大的技术难关应该算是实现了,这才稍微松了一口气。
比如用 JFileChooser 选择本地的档案、或者要怎样拿网上的 file 下来给 VTK class 处理(没办法,VTK 的 reader 是 file-based 的)……这些大概都有方法实现。
整个过程,其实承受了蛮大的压力。这绝对不是劳力活,也没人知道这样子尝试到底行不行得通。新的尝试是自己跟上司争取的,可一上 VTK 的 forum 看看,之前尝试过要把 VTK 用在 Applet 上面的人其实并不少,可是几乎全都哀嚎连天,好像没有听说过谁成功过的!
我自己对 Java 的底层运作一无所知,只好硬着头皮模着石头过河!还不知道河有多长,搞不好那不是河,是海!事实上,我现在也还没走到对岸,是看到了陆地的影子,搞不好那只是荒岛的影子……
我的部门里面,没有 senior 了(如果照年资,我自己也算是 senior 了),所以没人可以在前面带路了。
事实上我找了Google 很久,也没看过谁成功做出来过(当然也可能有人做出来了没公布,或者我没找到)。所以,在全世界的范围,也没有成功者在前面带路,大家全都是模着石头过河……
我心里不是不怕的,成果做不出来,这两、三个月的时间就白花了。上司追究下来,以后的信用度就没了。没别的方法,唯有多加苦功,尝试看做不做得出来再说了。
希望一切顺利吧……如果一切顺利,两个星期内我就可以看得更清楚了。不止要考虑能不能 implement 出功能,还要知道到底能不能达到需要的适用程度……
另外,也不是说能运行就行了,有些东西不在我控制的范围之内,例如 VTK 的 classes,如果全放在 JAR 里面下载,就要 700 KB 以上,VTK classes 的数量不是我能控制的。
有时候,可能 VTK + applet 这个点子像炼金术那样,从一开始就注定了是行不通的。我怕的就只是这样。若真如此,不管付出了多少的努力都是白费的。
如果可以行得通,那就有意思了,听上司本来的意思,是有打算要拿来 open source 的。或许可以投给 VTK 的 development team,或许可以有一部分的源代码可以做成 framework……
近期评论