快速导航:   教程资源  | 经典范例  | 友情链接  | 联系我们  | 官方微博
登陆 | 注册

 flash 3d 研究所
flash3d 研究所 pv3d 教程 研究所小贴士: 别开玩笑朋友,flash怎么可能建模,找个正规的三维软件吧










最近更新:
● Antuanettiz阁下在讨论区里 发表新主题“male dating faqs — 2...”(23:09:31)
● DonaldRox阁下在讨论区里 回复“Ceftin|how to order ...”(06:50:08)
● Gregorytuche阁下在讨论区里 发表新主题“mesihs...”(12:09:01)
浏览主题:《超简易papervision3D基础 第五篇 ViewportLayer分层排列》

《超简易papervision3D基础 第五篇 ViewportLayer分层排列》
DDM君 (2012-03-16 05:50:43)

DDM君 , Flab3D.com (允许转载,转载请注明)


也许您会说,这是个什么鬼东西,你们讲这些废功能干嘛,不是说讲的都是最实用的东西吗?我干嘛要学这个功能,跳过!
如果看过我们的 《为什么我的模型老破面/缺面》这篇就会知道,这是目前解决破面的一个有效方法。是的,这个方法有一天可能会拯救您的flash3d作品/产品。(it gonna save your ass!如果用英语=_=)


 
 
 


原理解释:
我们以前使用的默认渲染,是将所有构成模型的三角形放在同一层,只不过以先后顺序一个个三角形放上去的,才产生了谁遮住谁的排列。这种排列的弊端是,当两个物体靠近时,他们的某些面会进行错误的排列,产生很难看的破面现象。具体原因请参看 《为什么我的模型老破面/缺面》—>点击去。
使用viewportLayer是把一个或几个模型人为的放进一个或几个图层,然后排列这些图层的顺序。它的弊端是会出现镜头旋转时突然一个物体整个跳到另一个物体前面。不过我们只要尽可能注意和调整,是能够大大避免很多默认下难以解决的图像瑕庇。
viewportLayer还有个好处是我们可以对图层进行很多类似MovieClip的控制。对!我们可以对每个图层加入滤镜等等,你甚至可以用来模拟镜头焦距现象,比如Depth of Field(当然前提是不怕拖慢速度)

建立viewPortLayer的办法有几种,可以先建立一个空层,然后再一个个加入物体;也可以直接向‘窗口’将一个物体变成图层。(如果不记得什么是窗口, 请参考 请参考《超简易papervision3D基础
  第一篇 人人都能PV3D》

但是使用viewportLayer要注意的是:一旦使用layer,就要场景里所有物体都使用,没有使用的物体都会被默认排列在最底层,也就是说,没加入任何层的模型都会被上面的图层盖在最下面。
我们这里讲解流程最常用的方法。其他的方法欢迎自己去尝试,使用中遇到日任何问题欢迎去 讨论区留言

破面

这次我们要用viewPortLayer,来解决原来用默认渲染出破面现象很严重的正方体和平面。最后我们还要故意给地面加入一个模糊渲染。
这里可以先下载--> 源文件下载 (无法右键另存,直接点击即可)

代码分析:
首先还是声明两个层,分别用来装立方体和地面
private var layer1:ViewportLayer;
private var layer2:ViewportLayer;

viewPortLayer有两种整理层的方法,一种是按整个物体的中心距离摄像机的垂直距离- Z_SORT;另一个是靠自己强行给与每个层一个排列序号(layerIndex)的INDEX_SORT。我们这里用自动排列Z_SORT。(对INDEX_SORT的使用有问题,欢迎去讨论区留言)
viewport.containerSprite.sortMode = ViewportLayerSortMode.Z_SORT;

下面就是具体把各个物体加入到每个层里面。
layer1=viewport.getChildLayer(cube);
layer2=viewport.getChildLayer(plane);

给含有地面的层加入模糊滤镜
var filter:BlurFilter = new BlurFilter(10,10);
layer2.filters=[filter];

在源代码里,你也许会注意到这句,这就是我们前几天发布的方便镜头旋转的orbitY。 讨论区这里有具体的使用方法和参数代表的含义。--〉 去讨论区
总之这句是为了能让我们更容易看出破面有没有解决慢慢转动摄像机用。
camera.orbitY(plane,1,500,100);

当然,为了使用上面的所有功能,要导入这些必须的类:
导入Flash自带的模糊滤镜
import flash.filters.BlurFilter;
导入我们必须的viewPortLayer类和整理layer顺序的类:
import org.papervision3d.view.layer.ViewportLayer;
import org.papervision3d.view.layer.util.ViewportLayerSortMode;



ViewportLayer的理解也许对一些初学者来说稍稍有点麻烦,但它确实是个基础且重要的功能,请记住并熟练掌握它,它确实在很多情况下会save your ass.
不要放弃,请继续加油!
有任何不清楚的地方,欢迎到讨论区发言。(无需注册)



DDM君
Flab3D.com

Flash3d研究所推荐的Pv3d傻瓜包下载
源文件下载





flash 3d 研究所
(2008-11-24 15:21:59)
测试测试1


flash 3d 研究所
(2008-11-24 15:58:10)
Cool~~~帮我解决了很多问题,谢谢各位~~~


flash 3d 研究所
(2008-11-24 16:28:26)
有个问题,导入的Collada貌似不起作用,我对此Collada使用了viewportlayer,但其还是显示在最后,不知道为什么,其他对象都正常~~


flash 3d 研究所
(2008-11-24 17:02:03)
并不是不起作用,我虽然没有看justin你的代码,但是我这里估计是你‘地面’(或者类似的东西)
太大了,然后刚好被自动排列错了,试着把地面缩小看看先
然后多转转摄像机看看到底是什么问题 对吧


flash 3d 研究所
(2008-11-25 16:18:41)
我用的是INDEX_SORT属性对场景内所有物体分层(共三层:不妨设为A,B,C),一切正常。
但是之后又新添加进物体到最上面的A层中,可是这个新添加的物体却总是被下面的B,C两层所挡住,不能正常显示,请问这是什么原因呢?3Q


flash 3d 研究所
(2008-11-25 16:33:37)
自己搞定了,我自己弄错了


flash 3d 研究所
(2008-11-25 17:09:30)
=_________=我也经常糊涂


flash 3d 研究所
(2008-12-04 21:12:52)
太好了。。。viewportlayer可以解决我现在的问题


flash 3d 研究所
(2008-12-23 16:10:04)
这个sprite 在flex中.Panel或者是Cancas为什么无法显示.

需要通用什么手段么?


flash 3d 研究所
(2008-12-23 16:23:52)
请问你用的Pv3d是什么版本啊.

我用的pv3d里居然没有.FreeCamera3D这个类


flash 3d 研究所
(2008-12-23 23:11:04)
flex方面我们研究不是很多,,panel和canvas是继承至sprite的,不理解为什么能够用“.”。
为了避免麻烦,请初学时务必使用我们的傻瓜包,才能最好的配合我们的教程。我们的傻瓜包都由每段时间的最新版专门经过修改刚好能配合教程的。


flash 3d 研究所
(2008-12-29 15:18:19)
为什么上一篇打不开?


flash 3d 研究所
(2009-03-12 11:52:41)
发现个奇怪的现象,为什么立方体上的图像上的文字是上下凹凸变形的,这好象不符合透视原理。


flash 3d 研究所
(2009-03-12 22:24:31)
对了,没有显卡的贴图修正功能时代的三维都是这样的。


flash 3d 研究所
(2009-03-19 20:55:06)
大聰明了 DDm君


flash 3d 研究所
(2009-03-19 20:56:10)
把ps內面的功能都用上了 呵呵


flash 3d 研究所
(2009-03-25 09:43:57)
我用的pv3d 是 Papervision3D Public Alpha 3.0 - PapervisionX (18.09.08) 这个版本,没有camera的orbitY方法。。。。。


flash 3d 研究所
(2009-04-02 01:25:27)

layer1=viewport.getChildLayer(cube);
layer2=viewport.getChildLayer(plane);
不理解,这里的层是不是指flash里普通的那种图层啊?通过这两句就可以建立两个图层是吧?
另外对viewport.containerSprite.sortMode = ViewportLayerSortMode.Z_SORT;也不理解,这样设置后,图层的次序是不是根据layer1和layer1得到值的先后顺序来的呢?


flash 3d 研究所
(2009-04-14 22:49:50)
INDEX_SORT应该怎么用啊,能给3层的例子吗?


flash 3d 研究所
(2009-04-20 18:30:25)
1046: 找不到类型,或者它不是编译时常数: FileLoadEvent。

直接运行可以显示,放到flash cs3 里没做修改 就用不了了...倒了...

FileLoadEvent 明明import进了哈


flash 3d 研究所
(2009-04-23 16:34:14)
我的也和楼上是一样的问题没有camera的orbitY方法,我更新到最新的了呀


flash 3d 研究所
(2009-04-25 11:02:53)
orbitY是我们flab3d包里的FlabCamera3d,要下载我们的最新傻瓜包。
PapervisionX还早呢,个人估计至少等待下半年,您被又被代码库那些家伙骗了OTL。。


flash 3d 研究所
(2009-06-06 14:05:25)
ViewportLayer只能垂直排列吗?能不能水平排列?


flash 3d 研究所
(2009-06-28 23:25:29)
DDM的讲解很贴心啊,我一定定要好好学。
随便问下为什么上一章“模拟物理运动”的链接打不开啊。


flash 3d 研究所
(2009-12-31 17:23:05)
DDM讲解的教程很实用,真是太感谢你们了,一直想学pv3d,在你们这学到了很多,一直会关注你们的教程的,真的很感谢!


flash 3d 研究所
(2010-10-23 17:06:31)
"发现个奇怪的现象,为什么立方体上的图像上的文字是上下凹凸变形的,这好象不符合透视原理。"

这个问题是因为你材质分段数太少了,你把材质分段数提高就行


flash 3d 研究所
(2011-08-23 22:47:27)
Mighty uesufl. Make no mistake, I appreciate it.


flash 3d 研究所
(2011-08-23 22:47:51)
Your answer was just what I nedeed. It's made my day!


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

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

验证码:(为防止机器人骚扰,请麻烦输入验证码^_^)
  

(目前需登陆方可发表)


不想添加了