要在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看看是在哪邊錯誤吧~