每月封存: 六月 2008

 C L I C K
一直想摸清楚 PV3D 的燈光材質,最近好不容易有點進展,但還不足以作 DEMO!
所以呢 ‥‥‥ 就把之前用 AS2 做的點陣特效拿到 3D 物件來試試吧!?
點陣特效在 AS2 和 AS3 的效能比較 ‥‥‥ 結果,不意外地,AS3 大勝!
直接把每個影格算出來的 BitmapData 當材質貼在球體模型上;同時讓球體不停旋轉。

 C L I C K
要怎麼把 PV3D 的線段繪圖功能用在幾何繪圖上呢!?
利用球體座標的運算式,以 phi、theta 的變動速率畫出三度空間幾何圖形。
話說 PV3D 的線段算不出遠近感,無論 Z 軸多少,線看起來都一樣粗一樣深;
只是隨機亂畫線根本看不出來是在 3D 空間!
再想想還有什麼其他的畫線方法吧!?

 C L I C K
奶綠茶提到 PV3D 可以直接在 3D 空間畫線,而且還是 2.0 版新增的功能喔!
只是單純測試 Lines3D 類別,再加上之前算過球體座標,那就簡單地畫個經緯線。
Lines3D 一樣要下材質 LineMaterial ,但也只能設定顏色和透明度而已。
畫線用 addNewLine() 方法最簡單,只要給一個寬度和兩組 xyz 座標就可以了!
另外還有一個 addLine() 方法,但得要給一個 Line3D 物件;
而 Line3D 的初始又得給 Vertex3D 物件;反正就是很麻煩!
要清除所有線段,找到一個 removeAllLines() 方法;但是沒有用!
研判這個 function 應該只能移除 Line3D 物件吧!?
看來還是不能偷懶呀! 改天再好好研究囉?

 C L I C K
禮拜六奶綠茶老師教到這個範例,今天就把它修得更精緻些。
在原點,鏡頭會隨著游標轉動;滑鼠滾輪則能前後移動鏡頭。
點卡片可以 Focus 到卡片正前方;此時鏡頭不會轉動,但仍能前後移動。
再點一次 Fucus 卡片會拉回起始點;點其他卡片也可以直接 Focus 過去。
moveForward 和 moveBackward 在網路上的教學已經看過;但並不覺得有多大用處。
這個範例,總算是見識到它們的價值了!
原來,move 系列的 function,座標軸都是相對於物件本身的!
另外,還學到一個 copyTransform();
顧名思義,就是完全複製參考物件的 位置、旋轉、縮放。

 C L I C K
使用 FreeCamera3D 類別實作另一個 3D Wall 版本!
比起前一篇的亂抖,這個 demo 似乎順暢多了。
看來 FreeCamera3D 才是王道呀!?
以後,能單靠 camera 解決的效果;
還是乖乖用 camera 來搞定吧!

 C L I C K
3D Wall 在很多網站上是必須付費購買的。既然值錢,就值得花時間實作一個囉!?
奶綠茶老師用了另一個 3D Camera 類別:FreeCamera3D。
和 Camera3D 自動指向的特性截然不同,可以任意旋轉方向!
但在這個 demo 裡,並沒使用到 FreeCamera3D!?
因為『牆』是弧面,就直接把它依圓心旋轉;
再加上垂直與水平的位移,效果就很類似了。
好像會有些不自然的抖動!?
改天再做個只變動 Camera 的來比較吧!

 C L I C K
來試試自訂的 Class 要如何透過自訂事件互相溝通。
自訂廣播事件的寫法是:dispatchEvent(new Event(“……”));
再把事件和偵聽函式串連:addEventListener(“……”, function);
至於繪圖的方式稍微改了一下,為的是和前一個有所區別,似乎原本的還是比較好看!?
另外還有一個新發現~~~
前陣子看到最新的 Flash Player 10,本著實驗的精神,就把自己的電腦全面升級。
沒想到,在 web base 下跑這兩個 demo 竟把 CPU 操到滿載!?
前幾個 demo 不管是 plane 還是 cube 都還不會操到這種程度。
我想,可能是 graphics 的關係吧!?
換回 9.0.124 就很順了。

 C L I C K
其實一直都很喜歡 360 幾何繪圖的效果,讓我體驗到純數學也可以繪圖。
這個 demo 主要是在測試 PV3D 的 MovieMaterial;
還有在 Flash 做好的 MovieClip 怎麼拿到 FlashDevelop 來用。
MovieMaterial 顧名思義就是用 MC 做為 Material,但 PV3D 的貼圖會自動縮放以佈滿 3D Model;
所以像這種動態產生內容的影片片段,最好在開始繪圖前先產生一張定義範圍用的背景。
至於在 FlashDevelop 匯入 MC 的方法,這次是用 SWC 匯入,而不是用 SWF !
用 Google 找到一個不錯的方法,在 Project 裡新增一個 src 資料夾,
把 SWC 放到裡面,在 FD 對其按右鍵選 Add To Library。
完全不用 import ,就可以直接取用裡面的 Class 了!
還沒有實驗組件內外的溝通與事件機制,下次再試囉!?

 C L I C K
當方塊的六個面都不一樣時,旋轉的寫法就不能那麼偷懶了!
和前一版主要的不同,是把方塊包在另一個 DisplayObject3D 物件底下;
游標在方塊上拖曳時,只旋轉上層物件,角度採相對計算並累加;
放開滑鼠左鍵或移出方塊後的 follow 則只有轉動方塊而已。
yaw(); pitch(); roll(); 這三個 Method 看來跟 rotation 一樣;
就如前一篇所引用的文章,PV3D 並沒有重置座標方向的功能;
利用外層物件,似乎就是個最簡單的解決方案了!?

 C L I C K
禮拜六老師教了幾個在 PV3D 裡除了 Plane 以外的 3D Object;
其中以 Cube 最為特別,所以就拿 Cube 來做個 Demo 吧!?
滑鼠移過會對著游標,移出後會帶 follow 旋轉,嘗試做出讓游標在玩這個 Cube 的感覺。
實驗後發現 Cube 的 rotationY 和 rotationZ 有點怪,總是無法照著想像中的樣子去旋轉!?
邦邦的部落格: Papervision3D 教學 part 5.2 — 不支援依照當下視角做旋轉
似乎 PV3D 的旋轉是有些限制的;但 DisplayObject3D 還有三個跟旋轉有關的 Methods 可以試試:
pitch(angle:Number):voidroll(angle:Number):voidyaw(angle:Number):void
另外,原本對 Material 下 smooth = true; 希望能有更好的顯示效果。
卻使得 Flash Player 頻頻「秀逗」!?
為了平衡效能,只好把 smooth 拿掉了。