打印

[AS1&2] 基于flash的360虚拟现实引擎(cubicVR)实现原理

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视角

http://blogbeta.blueidea.com/UploadFiles/2007-1/131904388.swf


原理:
1.1点透视与投影
  通过1点透视来产生远小近大的变化以产生空间感,在cubicVR中,设想观察者camera在一个正六面体中央,通过一点透视来计算每个面的在空间投影中的位置,以产生透视效果。
  demo:没有导入透视方程的情况:


http://blogbeta.blueidea.com/UploadFiles/2007-1/131747091.swf

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

3.消隐算法
  如果没有消隐算法,那么观察者只能看到离屏幕最近的面,而不能看到整个3D空间,理论上消隐算法有3个步骤:1在一个六面体中,面法线与视锥体夹角大于180度则应设为不可见,2在同一个像素上,只显示与camera最近的多边形(Zbuffer算法),3投影在屏幕以外的多边型不可见,但这三种算法非常占用cpu资源,andrew设计了一种更简单的算法:1多边形的中心与camera重合,在camera坐标系中Z值<0的多边形不可见,2投影在屏幕以外的多边型不可见。

[ 本帖最后由 hxgenius 于 2007-2-1 10:17 编辑 ]
本帖最近评分记录
  • mirycat 威望 +3 原创内容 2007-2-1 13:36
真强啊 不过多看了 非常头晕
xhtml/css/Ajax/AS/php/mysql你才是程序员,你家全是程序员 -__-
给个源代码看看撒

TOP

认证您的手机,获得手机认证图标, 更多手机认证的好处
看不懂迷糊~~!
不错,好东西.

TOP

要源代码就自己下了swf反编译吧
论坛没法上传大于500k的东西

TOP

这个全景技术应该是老早就有的了,
看看city8实景地图

TOP

支持楼主奉献精神!包括以前的开源相册!
向热心朋友致敬

TOP

向LZ学习!LZ好象是北大的,强人~
灵感源于生活~

TOP

留个名,呵呵,好东西

TOP

cubicVR不是已经开源了吗?

TOP

看晕了....

TOP

引用:
原帖由 haxe 于 2007-2-3 08:47 发表
cubicVR不是已经开源了吗?
andrew在1个月前将他的程序开源了,不过我是做完这个东西才知道的

TOP

有个很好用的 FLASH 3D 引擎,有兴趣的可以去看一下, 目前是个开源项目。

http://www.flashsandy.org/

TOP

回复 #7 cyywill 的帖子

...........强

[ 本帖最后由 9089040 于 2007-2-6 14:36 编辑 ]

TOP

好想法

TOP

不是很流畅,拖动出现锯齿

研究研究Pano2QTVR,他的flash vr 也算目前比较优秀的了
o.cn
panoramaz.cn

TOP

楼上是都市圈的呵,你们跟E都市在拼吧

TOP

锯齿是因为细分贴图数量的设置(程序中subdivx与subdivy变量)
数量越大,细分越多,锯齿就越小,而且也越占资源.

做测试用的,所以就没把细分做太多

现在所有的flashvr都是基于此原理.

TOP

强啊`~`

强悍的楼主,

    佩服ing`~`

TOP

这个东东,光看源代码没有什么意义,应该学习搂主的这套理论,有了理论基础
用什么语言实现,那就随你了
经典
确实 有 经典!

主页:
flash59.it50.net
FLASH论坛:
在首页里。

TOP

泼盆冷水~

这个全景真实感不够,面和面结合处的变形严重,基本不能用于商业vr领域,期待更好的vr算法
英领科技 引领潮流

TOP

引用:
原帖由 fictiony 于 2007-4-13 02:36 发表
这个全景真实感不够,面和面结合处的变形严重,基本不能用于商业vr领域,期待更好的vr算法
面与面的结合变形不是算法的原因
而是照相机的原因
我没有鱼眼镜头,相片是用手工拼接的

TOP

这种Idea现在美国非常的流行....
人生如棋, 举手无悔!!! 珍惜现在的每一分每一秒,珍惜你身边的每一个人;每一个机会. 别错过了再说后悔......

TOP

http://www.coffeeren.com/blog/blogview.asp?logID=182

这个加了多面效果比较直观~而且包括了圆型还有多边型~~!

TOP