要在FLASH中玩3D看來還是要靠PV3D
不過即使真的導入DAE模型
要控制他也不是一件很直覺的事情
而且DAE模型最好還是一張貼圖搞定
不然整個FLASH就會慢到要人抓狂!!!
[DEMO]MOVEROUSE會變透明,MOUSEOUT後回復
奇怪,沒辦法貼在文章中….
是PV3D的關係嗎!?
算了…看程式碼就好了^^”
package { import flash.display.*; import flash.events.*; import org.papervision3d.materials.utils.MaterialsList; import org.papervision3d.objects.parsers.DAE; import org.papervision3d.materials.*; import org.papervision3d.events.*; import org.papervision3d.view.BasicView; import caurina.transitions.Tweener; public class LoadModel extends Sprite{ private var view :BasicView; private var dae :DAE;//DAE物件 public function LoadModel(){ init3DEngine(); init3DObject(); } private function init3DEngine():void{ view = new BasicView(0, 0, true, true, "Target"); view.camera.y = 200; this.addChild(view); this.addEventListener(Event.ENTER_FRAME, onEventRender3D); } private function init3DObject():void{ dae = new DAE(true, "dae", true); dae.load("dae/shop2.dae"); dae.y = -250; dae.scale = 100; dae.addEventListener(FileLoadEvent.ANIMATIONS_COMPLETE, daeComplete); view.scene.addChild(dae); } private function daeComplete(e:FileLoadEvent) { dae.getMaterialByName("shop2").interactive = true; //在shop2.dae中的material標籤 dae.getChildByName("COLLADA_Scene").getChildByName("Mesh_Object").addEventListener(InteractiveScene3DEvent.OBJECT_OVER, daeOverHandler); dae.getChildByName("COLLADA_Scene").getChildByName("Mesh_Object").addEventListener(InteractiveScene3DEvent.OBJECT_OUT, daeOutHandler); dae.useOwnContainer = true; dae.getChildByName("COLLADA_Scene").getChildByName("Mesh_Object").useOwnContainer = true; } private function daeOverHandler(e:InteractiveScene3DEvent) { Tweener.addTween(dae, {alpha:0.5 , time:0.5}); } private function daeOutHandler(e:InteractiveScene3DEvent) { Tweener.addTween(dae, {alpha:1 , time:0.5}); } private function onEventRender3D(e:Event):void{ dae.rotationY += 2; view.singleRender(); } } } |
hello!
請問怎樣可以將dae中的某一個mesh(triangle)設成透明呢?
我沒試過
不過理論上來說應該是找到你像要設成透明的該素材
在flash中useOwnContainer設成true
就可以控制才對
你好,請問能否控制DAE的一個三角面透明?
謝謝!
我不太懂這一題@@
謝謝您!!
我已經解決問題了~
問題出在getChildByName(“Mesh_Object”)中的Mesh_Object
我把它改成bottle就可以互動了,
請問getChildByName(“Mesh_Object”)這是什麼意思?
我也不是很清楚耶
我猜可能是不同軟體弄出來的DAE中
素材的命名方式有不同吧!?
我把載入的DAE檔案用文字編輯器打開後,
尋找Material標籤,
material id=”bottleMaterial” name=”bottleMaterial”>
instance_effect url=”#bottleMaterial-fx”/>
/material>
所以是把shop2換成bottleMaterial嗎?
可是我還是只有載入的DAE檔案在旋轉,
並沒有與材質互動,
麻煩您了!!
先確定你的DAE檔跟那張貼圖的名稱都是bottleMaterial
然後把我的程式的SHOP2都改成bottleMaterial試試看吧
我用文字編輯器打開DAE檔案,
並且搜尋Material標籤
所以是要把shop2換成bottleMaterial嗎?
可是還是只有載好的DAE在旋轉沒有透明的效果~
麻煩您了!!
可是我有使用DAE檔案,並且有成功的載入!!
載入之後也有旋轉,但是就是沒有辦法與3D物件互動變成透明.
還有出現我第一次留言的錯誤~
dae.getMaterialByName(“shop2”).interactive = true;
我想要知道的是上面的shop2是Material標籤裡面的ID嗎?
恩 用文字編輯器打開DAE檔
搜尋Material可以看到妳的Material直
再把shop2用該值取代掉
因為我只有用一張圖作素材 所以只有一個Material
我試了一下,好像是這行有錯誤,
dae.getMaterialByName(“shop2”).interactive = true;
請問可以詳細的告訴我shop2是怎麼來的嗎?
亦或著可以寄給我DAE檔案嗎?
麻煩您了!!
ㄜ 所以你沒有用DAE檔?
不過抱歉我沒辦法給你這個DAE耶
因為他是公司正式網站要用的東西
你可上網找找應該有免費的測試用檔案可以下載
我想請問一下
為什麼會出現以下錯誤:
TypeError: Error #1009: 無法存取 Null 物件參考的屬性或方法。
at LoadModelUseMaterialsList/daeComplete()
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at org.papervision3d.objects.parsers::DAE/ onParseAnimationsComplete()
at org.papervision3d.objects.parsers::DAE/buildScene()
at org.papervision3d.objects.parsers::DAE/onParseComplete()
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at org.ascollada.io::DaeReader/onImagesComplete()
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at org.ascollada.core::DaeDocument/readNextImage()
at org.ascollada.core::DaeDocument/onImageComplete()
光看錯誤訊息只能知道你試圖要存取一個不存在的元件(可能是DAE?)
多下幾個trace看看是在哪邊錯誤吧~