sphere.png

圖1. DK01.CC 貼圖的 FLARToolKit 實作 XD (點擊上圖可下載操作影片)

 

簡介

FLARToolKit 一個為 ActionScript 3 而生的 ARToolKit,可說是徹底解決了 C/Java 不容易製作 UI 的問題;另一方面,也讓多媒體人員或設計師更容易上手製作 AR 應用程式。

PS. 不過效能卻是沒 C/Java 好這是很明顯的。

雖然國外網站認為 NyARToolKit (Java 版本的 ARToolKit) 是所有版本中執行最快的,不過就筆者的經驗而論: C > Java > AS3

 

 

運作模式 (大致與 ARToolKit 相同):

憑藉相機所拍攝的畫面偵測標記 (marker) 以計算出相機 (camera)、標記在三維空間的位置,再以上述資訊來提供 3D 模型繪製時的參考。

 

 

必要環境

‧Adobe Flash CS3 以上之版本
‧FLARToolKit
‧Papervision3D (rev. 814以上)
‧影像輸入裝置
‧將標記列印出來

官方範例下載下來之後就能直接 RUN 了(似乎相對的 Papervision3d 的 library 也包在裡面),直接打開 SimpleCube.fla 及 SimpleCube.as 即可開始開發囉!

 

 

程式碼 (SimpleCube.as)


package {
 import org.papervision3d.lights.PointLight3D;
 import org.papervision3d.materials.WireframeMaterial;
 import org.papervision3d.materials.shadematerials.FlatShadeMaterial;
 import org.papervision3d.materials.utils.MaterialsList;
 import org.papervision3d.objects.primitives.Plane;
 // Import Sphere 及貼圖相關函式
 import org.papervision3d.objects.primitives.Sphere;
 import org.papervision3d.materials.BitmapFileMaterial;
 
 public class SimpleCube extends PV3DARApp {
   private var _plane:Plane;
   // 宣告 Sphere 及 Bitmap
   private var _sphere:Sphere;
   private var _bitmap:BitmapFileMaterial;
   public function SimpleCube() {
     // 改為 ARToolKit 中的 patt.hiro
     this.init('Data/camera_para.dat', 'Data/hiro.pat');
   }

   protected override function onInit():void {
     super.onInit(); // Initial
 
     // 再標記上面畫上平面方格,相關方式請查閱 Papervision3D API
     var wmat:WireframeMaterial = new WireframeMaterial(0x0000ff, 1, 2);
     this._plane = new Plane(wmat, 80, 80); // 80mm x 80mm。
     this._plane.rotationX = 180;
     this._baseNode.addChild(this._plane);
     // 新增一個光源,相關方式請查閱 Papervision3D API
     var light:PointLight3D = new PointLight3D();
     light.x = 0;
     // 座標系請參考圖2.
     // Y 軸改成-1000之後的差別,請參閱下方圖3. 4.
     light.y = 1000;
     light.z = -1000;

     // 原本官方範例是實作繪出 Cube,這邊我們改成貼圖的 Sphere
     // 相關函式請查閱 Papervision3D API
     // new 一個 BitmapFileMaterial 用來貼圖
     this._bitmap = new BitmapFileMaterial('Data/sphere.png');
     // 將 _bitmap 餵給 sphere 函式
     // 後面參數請查閱 Papervision3D API
     this._sphere = new Sphere(this._bitmap, 50, 10, 10);
     this._sphere.z = 20;
     this._baseNode.addChild(this._sphere);
   }
 }
}

 


相關圖片

marker-axis.jpg

圖2. FLARToolKit 座標系 (資料來源:FLARToolKit)

 

 

Y1000.png

圖3. Y = 1000 的光源

 

 

Y-1000.png

圖4. Y = -1000 的光源

 

 

pattHiro.gif

圖5. ARToolKit 的 Hiro (patt.hiro),可以直接餵給 FLARToolKit 用喔!

 

用自己的 3D 模型

FLARToolKit 其實只是提供對於 Marker 的 Tracing 和 Recognizing 的方法,所有關於 3D 繪圖的事情,理論上是交給 Papervision3D (P3D) 和 Flash 去作。

想當然在多媒體技術這麼發達的年代,無論 sphere, cone, cube, cylinder 都再也無法吸引大眾目光,(搞不好老師上課教這些,學生都懶得看了)

於是乎,與 ARToolKit 一樣,FLARToolKit 必須能外部匯入、而且是通用格式的模型檔才行!所以,這部份雖然筆者還沒實作,但大致提供一個方向,

P3D 中有一個類別能支援繪製由 3D Studio Max 產生的 Ase 檔,有興趣的可以看看如何實作。 >> Class Ase


延伸閱讀

>> Papervision3D Flash之神魂顛倒

>> Papervision3D Official API Documentation

 

 

範例下載

本文範例 SWF 檔(含 hiro pattern 及 sphere 貼圖):

>> 下載 FLARToolKit Sphere Sample by DK01.CC

 

 

arrow
arrow
    全站熱搜

    DK 發表在 痞客邦 留言(9) 人氣()