顯示具有 Augmented Reality 標籤的文章。 顯示所有文章
顯示具有 Augmented Reality 標籤的文章。 顯示所有文章

2014年4月17日 星期四

[ Android Blender] 把Blender 3D 物件輸出成AndAR格式

Blender是一套很強3D Model的工具,AndAR則是Android上的擴增實境的軟體,我們可以從Google Play下載。
 
選擇Play商店,輸入AndAR,就可以下載AndAR Model Viewer APP,下圖是已經下載完成。

 
執行AndAR Model Viewer APP。
 
 
你可以選擇內建的 3D Model來進行測試

 
由於AndAR是有標籤的擴充實境,你需要先準備好AR標籤,如下圖,你可以在Google上輸入AndAR Marker即可以找到。
 
 
當你選擇其中一個Model執行後,把手機攝像頭對著標籤即可看到3D MODEL站在AR標籤上。
 
 
接下來打開Blender,進行模型繪製,如下圖。
 
選擇File->Export->Wavefront(obj),並依圖參數進行設定(在圖的左邊)
 

把下列5種參數打勾
1.Write Normals
2.Write Materials
3.Taiangulate Faces
4.Material Group
5.Keep Vertex Order
按下Export Obj,在儲存目檔下即可以看到mtl及obj檔。

把mtl及obj檔複製到手機上
回到AndAR APP選擇Select a model file選項
 
 
找到download目錄
 
選擇obj檔。
 
 
執行結果
 
 

2014年3月9日 星期日

[ Android AR ] AndAR 基本架構

AndAR架構圖如下:
首先您必須要新增CustomActivity並繼承AndARActivity,在CustomActivity類別中新增CustomRenderer物件,這個物件會交由setNonARRenderer函式來設定。
利用getArtoolkit來取得ARToolkit。
接下來建立CustomObject物件,並呼叫registerARObject來注冊。


[Android AR] 準備工作

先到Google Play 市場下載APP來玩玩。


一個很不錯的標籤式擴增實境開放式源始碼:

AndAR - Android Augmented Reality

一本介紹AndAR的專業書籍

Pro Android Augmented Reality



ProAndroidAugmentedReality專業書籍的範例下載:
https://github.com/RaghavSood/ProAndroidAugmentedReality

開發工具:

2014年1月5日 星期日

[ mixare ] 在擴增實境上繪製縮放的捲軸

如果想安裝設mixare Android可以參考下列文章:

[ mixare ] 一套開放式源始碼擴增實境瀏覽器資源分享


因有讀者問到如何在鏡頭畫面中加上一些繪圖的功能,敏哥花了一些時間研究其原始碼。

當程式執行時,其畫面如下:
按下功能表鍵,就可以看到功能表單。
 選擇Zoom/level功能表,就可以看到捲軸了。


當讀者把程式滙入後,在org.mixare可以找到MixView.java打開程式後,可以在1146行找到AugmentedView類別,在該類別下有onDraw(Canvas canvas)重繪事件程序,在1185~1207行就是捲軸的繪製程式,程式碼如下:

if (app.isZoombarVisible()) {
zoomPaint.setColor(Color.WHITE);
zoomPaint.setTextSize(14);
String startKM, endKM;
endKM = "80km";
startKM = "0km";
/*
* if(MixListView.getDataSource().equals("Twitter")){ startKM =
* "1km"; }
*/
canvas.drawText(startKM, canvas.getWidth() / 100 * 4,
canvas.getHeight() / 100 * 85, zoomPaint);
canvas.drawText(endKM, canvas.getWidth() / 100 * 99 + 25,
canvas.getHeight() / 100 * 85, zoomPaint);

int height = canvas.getHeight() / 100 * 85;
int zoomProgress = app.getZoomProgress();
if (zoomProgress > 92 || zoomProgress < 6) {
height = canvas.getHeight() / 100 * 80;
}
canvas.drawText(app.getZoomLevel(), (canvas.getWidth()) / 100
* zoomProgress + 20, height, zoomPaint);
}