最近一周忙着做一个东西,本来没有我什么事,有一个浏览图片的项目想使用书本翻页的效果。动画效果参考一个flash,2D效果。出于对算法的强烈兴趣,我蹦将出来,大吼一声我能做,随之就陷入了一周的悲惨世界。
十多张A4演算和草图,一对平面几何点线关系的公式,一天时间就弄明白了算法,其实简单的不值一提,就是对效能十分怀疑。作为科学家的我很快完成了工作,接着就是作为工程师的工作,这个时候真羡慕那些有小弟的同事了。
一捋袖子,我就操练起刚刚学的C#,一边是VS,一边是MSDN,一篇GDI+的文档,两天不吃不喝外加睡觉上厕所的时间,基本完成,C#和GDI+确实比传统的C++和GDI方便太多。兴奋之余,拿出一个演示版交给老大。
主管显然不以为然,因为他有自己的一套框架和打算。一番讨价还价之后,我明白他已经交待的解决方案是MFC+DirectX,框架是MFC,创建子窗口内嵌D3D。项目实现人员基于此方案的实现是在发现3D翻书的算法相当复杂之后,采用3DSMAX绘制动画,导出后用D3D实时渲染。可叹我CAD专业出身,又对游戏编程满腔热情,却没有机会凭此报效公司。回到我的方案,成了3D方案的后背方案,前提是把C#改成C++的。
有过上一次为他们做记分牌特效的经验,我在实现之初就定义了良好的类和接口(巴掌的程序,也体现不出什么类的良好定义),改成C++也不是什么难事。这时候又开始幻想有个小弟就好了。话说回来,万一改写者完全不考虑指针的回收问题,岂不坏了我的算法。一咬牙,又花了一天改了个C++版本。
3D版本很快陷入了困境,实现人员的小弟显然还不是很熟悉3DS导出X文件的使用。虽然这里面完全没有什么技术含量,但弄了很多天之后,他们终于明白算法为王。不过我们做软件的,都有一套发包应付实现不了的方案。主管很快英明决定删减功能。最后的方案是做成一个实时渲染的动画,动态改变纹理贴图,翻动动作是固定的,根据鼠标位置前后播放动画。
这个时候我的2 D C++版也新鲜出炉。不过最初的担心还是出现了,效能不很好,勉强达到flash的水平。一番测试,性能主要损耗在GDI+的函数,SetClip和DrawImage,一声叹息,这可是我没办法优化的,或者要优化就需要更大的精力。也许更好的方案是2D算法+D3D渲染,就这样吧,交差!
也许下周真正把我的成功交付其他项目组使用的时候,调试的任务还用很多。毕竟很多人喜欢问别人而不是仅仅参考别人的代码,而相比于不耻下问,还有很多人喜欢直接跟你说:“嗨,听说这是你写的,真不出,可我们不知道接口怎么用啊,帮我们整合一下吧。”我要连忙说:“客气客气,您谬赞了,您老先歇着哈。”哎,至少有个小妹帮我写文档也好呀。
最近看Silverlight,似乎有翻书的示例,可惜我无缘拜阅。总有更合适的技术和工具来做项目,现实却有很多阻力。总在科研和工程之间摇摆,挺郁闷。啥时候能有自己的研究所才好,工作室也成。不是说软件是艺术嘛。我很想在人类历史长河中找一个生产组织形式形容我现在工作的部门状况,却由于对早期原始社会的不了解而想不出来,大概形势就是主管是酋长或长老,拿着挂着骷髅头的木棒一吆喝,大家就拿着顺手的家伙一起呼啸着朝一只小松鼠冲过去了。恐怕能看到的最高级的家伙也不过是两头绑着石块的草绳吧。
2601

被折叠的 条评论
为什么被折叠?



