flash 3d flash3d 研究所 pv3d
登陆 | 注册  flash 3d 研究所
教程区





最近更新:
● fool_tiger阁下在讨论区里 回复“旋转摄像机的问题...”(09:40:55)
● fool_tiger阁下在讨论区里 回复“旋转摄像机的问题...”(09:19:42)
● webbise阁下在讨论区里 回复“交换链接...”(23:30:47)
正在浏览教程: 《超简易papervision3D基础 第十二篇 用研究所RoomCube功能制作'全景观察器'》
《超简易papervision3D基础 第十二篇 用研究所RoomCube功能制作'全景观察器'》
DDM君 , Flab3D.com(允许转载,转载请注明)

全景观察,大概是大部分目前将flash3d商用化的朋友需要的东西。这是一个想上去简单,做起来却不那么简单的功能。所以我们flash3d研究所的自制功能里加入了RoomCube。这次我们就来一起看看怎么用RoomCube功能制作我们自己的所谓"全景观察器"。
研究所RoomCube功能下载(解压后覆盖以前傻瓜包的flab3d包即可)

研究所1月4日范例,点击可变换正面贴图






原理解释
将一个立方体(大多为正立方体)的法线反向向内显示,每个面的贴图可以自由的控制,并且更新一面的贴图立方体上会立即更新。
RoomCube的setMaterial方法即可实现更换任意面任意贴图,并立即显示出来。



这次我们不会分析具体RoomCube内部如何实现,只是分析如何使用这个功能做我们想要的产品。我们要制作一个点击一下就可以换前面的贴图。当然具体实用中按情况点键钮换都可,这里只是个范例。
这里下载源代码

代码分析
构造RoomCube可使用9个参数,前三个为必须填写;后6个是长宽高,和长宽高的段数,可直接使用我们的默认。
参数一:我们pv3d的窗口viewport,必须是一个Viewport3D。
参数二:我们要用的摄像机,必须是一个FreeCamera3D。
参数三:是我们要用的对应立方体六个面的6张图的地址,必须是一个数组Array,且每个元素为一个String。数组对应面的顺序为:"前后左右上下",乖孩子请跟我们读一次"前后左右上下"。
参数四,五,六:是空间的长宽高
参数七,八,九:是长宽高的段数

var cube1: RoomCube =new RoomCube(viewport,camera,["front.jpg","back.jpg","left.jpg","right.jpg","top.jpg","bottom.jpg"]);


下面我们加入一个鼠标点击事件,每次都切换对应面为"前"的贴图。
SetMaterial()是我们RoomCube的内置方法,接受两个参数:
参数一:要更换贴图的地址
参数二:要被更换的面。"前后左右上下"即是"front","back","left","right","top","bottom"

viewport.addEventListener(MouseEvent.CLICK,onMClick);
private var cont:Boolean=false;
private function onMClick(evt:MouseEvent):void {
  if(!cont){
  cube1.setMaterial("front_blue.jpg","front");
  cont=true;
  }else{
  cube1.setMaterial("front.jpg","front");
  cont=false;
  }
}


希望我们研究所提供的这个功能能够帮你在实战中解决实际问题。使用中遇到任何问题都可以告诉我们。好好加油!


DDM君
Flab3D.com


Flash3d研究所推荐的最新pv3d傻瓜包
研究所RoomCube功能下载(解压后覆盖以前傻瓜包的flab3d包即可)
源文件下载(无法右键另存,直接点击即可)







kyoichi886
(2009-01-04 09:25:48)
谢谢您,此技确可解决室内装潢,
然室外景致当何以实现,盼赐教。
另,恭贺IK难题初步攻克成功。
DDM君
(2009-01-04 14:24:41)
非常感谢kyoichi886君的支持!不知您新年过的如何。
感觉室内室外因该是一样的,只是拍照时候的连接点注意一下呢。用立方体比球体最大的好处就是头上的天/天花板永远不会因为UV问题而出现劣质贴图。
CC
(2009-01-04 15:23:20)
外景建议用球体,室内建议用立方体
fur3
(2009-01-04 15:53:54)
球体变形好大哦~而且正上方那块常常是挤在一起的,只能限制不准往上看
kyoichi886
(2009-01-04 19:10:14)
回复DDM君,若室外亦使用立方体,即便接点衔接流畅,镜头旋转时恐难掩直角之不自然。
之前曾见一蓝天白云草地奶牛之范例。
该例之外景连同起伏地面同奶牛般亦以DAE格式读入。
换言之,整个场景即为一建模。
效果虽佳,但却影响读入效率。
不过若使用球体状况下实存以上诸兄所述之问题。
或许读入DAE制场景也不失为一法。

fur3
(2009-01-04 20:12:09)
读入场景就不是全景观察器了啦,就是....就是..普通的建模flash3d了=___=狂汗一个
每个方法都有代价啦,全景观察器的好处就是立即可以换,又不用真的花钱找人把场景的模型建出来,现在专门建一个模型至少要好几百啦。弊端当然是旋转会变形
kyoichi886
(2009-01-05 13:57:11)
要好几百~~Orz...
在下爱好而以,非专此道。
说了外行话,抱歉。>_<
DDM君
(2009-01-05 14:20:34)
没事没事哈,随意表达意见啦。说不定以后有什么简便方法了呢。革新的创意就是这么来的嘛。
这里介绍一下到底为什么目前必须要这样做:
一个模型,比如说可以用做室内展示的模型,一般收费是要上千的,而且要好几天到一周。
模型又分‘简模’(面数10000面以下,每个物件的贴图都是手工绘制),和‘高模’(面数几十万,不用贴图,最后用来渲染图),我们实时三维啊,游戏啊都一般必须要专门制作的简模。这些都是很麻烦很贵的事。当然如果自己就是美工,当然要好点,自己不用收自己钱嘛,呵呵。
这也是为什么明知道这种全景观察的效果差,也必须要球体或着立方体来贴照片的原因 呵呵^A^
kyoichi886
(2009-01-05 20:14:37)
谢谢DDM君的详尽讲解~
敢问DDM君和fur3兄都是网页设计师么?
DDM君
(2009-01-05 20:23:55)
在下完全是网盲啦 在下做三维动画开发的。fur是做游戏程序,这个网页主要是他老兄在制作,我们没有专业作网页的OTL。。。。。。。。。。。
kyoichi886
(2009-01-06 08:12:09)
原来如此,以后可能有诸多问题要讨教于二位。还望能得二位赐教。
在下从事日语语言研究,PHP编程还成,MAYA、3DSMAX和ZB也算是处于会用状态。Orz...
Q是404650320,若二位有日文资料需要翻译,可以找我,免费的(但不要太长^A^)。
fur3
(2009-01-06 12:22:47)
日文翻译,羡慕~一会儿ddm下班叫他加你哈
hello-jacky
(2009-01-06 15:15:06)
非常棒,是否可以考虑增加在贴图上添加标注点的功能,还有,为什么总是感觉在一个很小的空间里面旋转?
fur3
(2009-01-06 18:25:28)
谢谢hellojacky的建议,我们会考虑加上此功能。你可以试试贴上真的8面的照片看看效果,感觉小是因为贴图,而且尺寸是可以自己调的,构造函数中参数4,5,6就是尺寸,写上100000,100000,100000就大了

hello-jacky
(2009-01-07 17:27:08)
谢谢,可能是贴图的原因,参数我改过的,但是没有效果,我会换成照片试试的。
贪心一下,是不是可以考虑交互贴图,比如用swf做贴图,我见过有人做的室内360的墙上是可以播放视频的,并且,标注点也是可以点击的。谢谢!
kevinwong
(2009-01-07 18:28:27)
我试了一下 确实有点奇怪我也没想明白 目前可以试试调节摄像机的参数
动画贴图和标注是可以的,我们有空会做出修改。标注有范例吗?不大清楚想要求什么样的标注,点击打字?

hello-jacky
(2009-01-08 13:36:45)
我还没有找到摄像机的参数在哪里,记得好像是有个透视角度的参数。我说的标注就是比如墙上有幅画,可以在上面加个热区,点击就会弹出窗口之类的。
yzhkof
(2009-01-13 17:44:08)
hello-jacky
你说那个应该是away3D做的。。。。。MovieMaterial

可以直接贴可互交的MC....

不知道pv3d有没实现
DDM君
(2009-01-14 17:59:39)
可以做的,不过我们这几天比较忙,而且大家的各种需求是很多的。希望理解。
rijjom
(2009-02-13 14:46:37)
可交互MC怎么做啊

YAGER多媒体
(2009-02-24 20:56:07)
DDM君,春节期间你们网站因备案问题关门,我们都非常着急,盼着你们的网站早一天恢复起来!
关于全景的实现,我作了深入的研究;并且,我已经用圆球Sphere+Camera成功实现全景的浏览;但当我加载的全景图太大,或者我加载的全景图太多的情况下,系统会因为内存不足,而导致后面加载的全景图黑屏;这个问题也在你们网站上找到了“Flash不会自动释放内存的罪魁祸首”,就这个问题,我在其它论坛帖子上有找到一个能解决这个内存机制问题的方案:
他说将图片切割成二维数组矩阵的小图,然后再加载,内存使用就会大大减少,可是DDM君,我有一个问题一直没想通!
那就是,我通过把大的全景图切割成小图片,并通过XML文档加载这些图片到二维数组了,但应该怎么样才能把这个二维数组的图附加到PV3D的Sphere上????
想了无数个黑夜,还是弄不懂,还希望DDM君赐教!感激涕零!
YAGER多媒体
(2009-02-24 21:01:52)
貌似Sphere只能通过 BitmapFileMaterial 加载一个外部的全景图;
sphere = new Sphere(material, ...., ..., ...);
这里的参数material可以支持二维数组矩阵图材质么? 我的问题就是这个,(因为论坛帖子上有找到一个能解决这个内存机制问题的方案:他说将图片切割成二维数组矩阵的小图,然后再加载)

如果不支持,DDM君有其它方法实现吗?(把这个二维数组的图附加到PV3D的Sphere上????

YAGER多媒体
(2009-02-24 21:02:25)
在线等结果。。。。
DDM君
(2009-02-25 15:42:48)
感谢,常常不来教程区转,所以不能及时回复您,真实抱歉,以后这种比较长的问题推荐去讨论区^_^

切割开的优势在下不大明白。但要作为贴图,首先还是得合成为一张整图,也就是需要bitmapData的draw相关的方法来完成,然后把这个bitmapData数据附值给‘三维物体.material’即可。
DDM君
(2009-02-25 15:43:09)
另外感谢您对我们的支持,感动T_T
rijjom
(2009-04-23 19:54:17)
mc材质里面怎么样才能接收到鼠标的事件?
我把一个swf 导入到mc里面了,可是里面的的动画不能接收到鼠标的事件 有谁知道怎么做不?

aswind
(2009-06-10 10:46:10)
所有的源代码都不能下载了。上个星期还是可以的,现在注册了用户也不能了。这个怎么好?
wmhades
(2009-07-01 16:58:43)
怎么修改能实现,用mousedown拖动,而不是随着鼠标随意动

(2009-08-01 14:57:44)
请问下,为什么我用2.0自带的BasicView类去初始化3D场景,出来的ROOMCUBE只能左右移动,不能上下移动?
sable
(2009-09-22 16:47:45)
请问为什么我把整个工程下下来以后运行时会出现下面的问题ERROR: MaterialObject3D: transformUV() material.bitmap not found!
犹豫不在
(2009-10-27 16:51:56)
和楼上的一样,报错,as3,并且感觉画面离的太近了。刚开始学..

(2009-11-03 01:07:25)
dd君 你好 现在我想在这个效果的基础上加上命令语句,控制camera的可视范围 比如向左60度 向右60度 向上45度向下45度。这命令语句是什么》?加在什么位置?本人新手请说明 谢谢
annie
(2009-11-09 17:50:06)
全景图片怎么加载到立方体模型上啊?
LeeXPer
(2009-11-12 17:00:04)
我觉得RoomCube应该写成一个球状的模型,贴一张3D全景图就可以做3D全景多好。呵呵,那就应该叫RoomBall了。
Greg
(2009-11-17 11:45:40)
请问,在这个类似房屋内部的场景中,我想在地面上(“下”这个面上)再放一个小的立方体cube,但是小的立方体总是缺几个面,不完整,是什么原因呢?
NLX
(2009-12-02 17:13:54)
请问DDM君,如何在全景图中添加热点,能够点击的那种,
在下初涉Flex与pv3d,如得赐教,不胜感激。效果如此网站http://gz.city8.com/panosearch-pid413617_8URN-ptz270_10_90-ctps-sn_city8.html

(2010-01-10 20:53:29)
如果是用键盘来控制6个面的转动要怎么写?

(2010-05-01 21:45:13)
你就拿这烂东西出来装

评论人:
邮   箱: (填入邮箱,博客地址均可)

内   容:
链接地址
(广告和垃圾内容可能会被删除,望理解)