flash 3d flash3d 研究所 pv3d 共享资源  | 经典范例  | 视频教程  | 友情链接  | 联系我们
登陆 | 注册  flash 3d 研究所
讨论区





最近更新:
● k0204阁下在教程区里 回复“《超简易papervision3D基础 ...”(01:44:24)
● k0204阁下在教程区里 回复“《超简易papervision3D基础 ...”(00:30:52)
● king26951阁下在讨论区里 回复“ pv3d 小问题...”(22:19:10)
浏览主题:关于N个模型贴N个图的研究~~

关于N个模型贴N个图的研究~~
noxss (2009-09-29 22:04:46)

呵呵,这个问题我看见好几次了,我曾经也以为PV3D只能给COLLADA模型贴一张图,还为此去给人物模型重新UNWRAP UWV,浪费了我一个下午的时间。。。其实方法手册里都讲有了,我看了手册才后悔。。。以后就养成了先翻手册和代码的习惯。

例子:在3DS MAX中画了两个平面,每个平面各有一张贴图,材质分别命名为'map1'和'map2',如图:




好了,代码来了~~

package
{
     import flash.events.Event;
     
     import org.papervision3d.events.FileLoadEvent;
     import org.papervision3d.materials.BitmapFileMaterial;
     import org.papervision3d.materials.utils.MaterialsList;
     import org.papervision3d.objects.parsers.Collada;
     import org.papervision3d.view.BasicView;
     
     public class duoMapTest extends BasicView
     {
           private var matList:MaterialsList;
           private var mat1:BitmapFileMaterial;
           private var mat2:BitmapFileMaterial;
           private var twoPlane:Collada;
           
           private var loadedObjectNum:int;
           
           public function duoMapTest()
           {
                 super(550, 400, true);
                 init();
                 init3d();
                 startRendering();
           }
           private function init():void
           {
                 
           }
           private function init3d():void
           {
                 matList = new MaterialsList();
                 
                 mat1 = new BitmapFileMaterial('map1.jpg');
                 mat2 = new BitmapFileMaterial('map2.jpg');
                 
                 mat1.name = 'map1';
                 mat2.name = 'map2';
                 
                 matList.addMaterial(mat1);
                 matList.addMaterial(mat2);
                 
                 twoPlane = new Collada('twoPlane.DAE', matList);
                 twoPlane.scale = 0.1;
                 
                 mat1.addEventListener(FileLoadEvent.LOAD_COMPLETE, onLoaded);
                 mat2.addEventListener(FileLoadEvent.LOAD_COMPLETE, onLoaded);
                 twoPlane.addEventListener(FileLoadEvent.LOAD_COMPLETE, onLoaded);
                 
                 viewport.addEventListener(Event.ENTER_FRAME, enterFrameCheck);
           }
           private function onLoaded(e:FileLoadEvent):void
           {
                 loadedObjectNum ++;
           }
           private function enterFrameCheck(e:Event):void
           {
                 if (loadedObjectNum == 3)
                 {
                       viewport.removeEventListener(Event.ENTER_FRAME, enterFrameCheck);
                       scene.addChild(twoPlane);
                 }
           }
           override protected function onRenderTick(event:Event=null) : void
           {
                 
                 
                 super.onRenderTick();
           }
     }
}

这个代码很简单,我懒,就不多讲了,关键就是材质的名称要跟你在3D软件里的一样,就行了,简单吧!

效果图:




flash 3d 研究所 noxss
(2009-09-29 22:58:06)
呃。。。粗心漏了一点:
  private function init():void
  {
    loadedObjectNum = 0;
  }
这个函数应该这样写严谨点。。都忘了给loadedObjectNum 赋初始值了,虽说不改也能正常使用。

flash 3d 研究所 sleep
(2009-09-30 00:42:07)
是我,哥们,写的很好,厉害。

flash 3d 研究所 sleep
(2009-09-30 00:48:55)
好像你用的也是cs4版本,
我说的问题:在cs4下导出的动画没有贴图?
你也会存在吗?


flash 3d 研究所 noxss
(2009-09-30 01:27:07)
我也是用CS4的,但是没有这个情况。。。建模我是用3DS MAX2008

flash 3d 研究所 DDM君
(2009-09-30 08:18:02)
noxss君的分析非常正确,好样儿的!

ps:看来cs4是否显示线框难道和导出软件有关?

flash 3d 研究所 DDM君
(2009-09-30 08:21:11)
noxcss君愿意我们把此教程编去教程区吗?
署名就用noxcss吗? 另外也可以把您的博客,主页或者qq留一个吗,可以写在教程上方便大家联系您? 呵呵

flash 3d 研究所 noxss
(2009-09-30 12:51:05)
可以放教程区啊,署名就是noxss就可以了。
导出没有贴图的问题我没有碰到过所以也不清楚呢。。不过用MaterialsList更灵活一些。

我的Email: czzzz@189.com

欢迎交流

flash 3d 研究所 DDM君
(2009-10-03 13:11:34)
呵呵,已经发入教程区,感谢noxss。多多交流。

flash 3d 研究所 ilovethilsinux
(2010-07-20 12:14:24)
TypeError: Error #1009: 无法访问空对象引用的属性或方法。这个代码有问题?

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

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

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

(目前需登陆方可发表)


不想添加了