2009年3月1日 星期日

papervision3D 研究日誌 #1

click to open!











click草地, 波波會碌過黎.
click波波, 波波會飛走~

按圖後稍待數秒載入 =]

/==

之前一直間斷的研究papervision3D,
今次借flash assignment的機會, 總算正正式式迫自己學習了一下...XP

papervision3D是個flash的3D engine,
可以讀入簡單的polygon model,
亦支援基本bone animation,
並由flash player即時運算應用.
至於說可以用來做甚麼,
可看看 eco zoo =]
theFWA當然還有許多有趣的例子...~

有興趣研究可以先看看
http://papervision2.com/tutorial-list/

http://www.madvertices.com/2008/01/papervision-3d-training-videos.html
還有google =]



/==

好簡單既一個動畫,
最主要面對幾個問題...

第一, 兩樣野太近時會有部份顯示唔到,
問題係z-sorting錯誤產生.

解決方法有幾個,

最簡單可以增加物體面數, 效能會隨面數上升而下降~

另外, 可以用QuadTreeRenderingEngine(papervision內建)取代BasicRenderer,
可以有效解決問題, 甚至可以正常顯示有intersect既物件,
不過效能下降最為嚴重. 詳情可參考http://blog.zupko.info/?p=177

為物體設定example_object.useOwnContainer = true
在某些情況可以解決z-sorting問題, 但原因不明...

第二, 想為物件設置MouseEvent.

先要設定:
example_viewport.interactive = true;
example_material.interactive = true;

而正確既寫法係
example_object.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, clickHandler);

private function clickHandler(event:InteractiveScene3DEvent):void{
//do something
}

要為DAE物件設定就比較麻煩,
原因係dae入面既面冇detect到click event,
解決方法如下:

可以首先設定一條function如下:
public function addEventListeners(displayObject:DisplayObject3D, eventType:String, listener:Function):void{
displayObject.addEventListener(eventType, listener);
for each(var child:DisplayObject3D in displayObject.children){
addEventListeners(child, eventType, listener);
}
}
再為需要有interaction既dae加上:
addEventListeners(example_object, InteractiveScene3DEvent.OBJECT_CLICK, clickHandler)

第三, 將screen coordinate 轉做 3D座標.
過程繁複唔多講, 但可以睇呢度
http://pv3d.org/2008/11/27/plane3d-intersect-poin/

//--- 繼續努力 =]

沒有留言:

張貼留言