日期:2013-12-02  浏览次数:20728 次

flash 360度3D虚拟实境(cubicVR)实现原理

flash的3D虚拟实境最早源自于德国的flash图形学大牛andre.michelle在其labsite:lab.andre-michelle.com上发表了一篇关于虚拟实境的文章,并提供了一个实例(NaN sourcecode).为了深入虚拟实境,在接下来的2个月里我陆续找到一些cubicVR的源文件并尝试破译了一些源码,我同时尝试开发了一个简单的flash3D引擎以及图片3D拉伸算法,所有这些的思想均来自于andre-michelle在其日志中提到的一些idea.如今在这篇文章中所用的实例仍然是我对andre晚期版本的整理,虽然目前我开发的新版本有更好的结构以及执行效率,但此版本的编程思想更通俗易懂。我想利用这个假期时间开发出flash球型虚拟实境,使它变得更真实。

在flash里部署3D虚拟实境无疑是一个反动性进步,我们再也不用去安装java虚拟机和QTVR了,理想上,在基于flash的可编程矢量图形界面基础上开发出来的虚拟理想可以通过创新的用户界面以达到完满的用户体验。city8.com既采用这种技术来部署他们的全景体验城市地图。

demo:鼠标拖拽以转换camera视角

原理:

点透视与投影

通过1点透视来产生远小近大的变化以产生空间感,在cubicVR中,设想观察者camera在一个正六面体地方,通过一点透视来计算每个面的在空间投影中的位置,以产生透视效果。

demo:没有导入透视方程的情况:

细分贴图

flash的matrix类只支持2D图形变换:切变、缩放、平面位移。位图无法实现3D变换,这与openGL不同,openGL只需求在定义多边型顶点和贴图法线,位图就会自动贴到一个面片上,而且整个贴图过程完全由GPU完成。而在flash中必须使用细分贴图的方法来欺骗人们的眼睛,既:将一张图片细分为n张小的三角面片,再将小三角面片进行平面切变,正由于如此,flash3D一旦涉及贴图必然导致大量占用cpu运算资源。

细分贴图的demo:
http://godson.blueidea.com/archives/2006/3708.shtml