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);
}

2014年1月4日 星期六

Android Renderscript 平行運算實作

Android在Honeycomb(3.x,API等級11)版的時候正式導入了Renderscript,它是針對高性能3D渲染和運算的新框架。Renderscript設計有三個主要目標:(出處)
可移植性(Portability):應用程序代碼需要能夠在所有設備使用的那些完全不同的Android 硬體上執行。
性能(Performance):上述的可移植性的限制範圍內,追求更多的性能。
可用性(Usability):簡化開發人員開發程式過程。
簡單來講,RS不需要像NDK一樣的複雜就可以寫出擁有比Java還要好的性能程式。

RenderScript是Android系統上的一種腳本(Script)語言,也就是說撰寫程式時除了Java部分外,還要寫一個附檔名為 rs 的腳本。在編譯上,我們所熟知Java部分會透過Java Compiler編譯成ByteCode,然後透過Dex Compiler編譯成Dalvik可執行的dex檔,而rs檔則透過 llvm-rs-cc Compiler一方面編譯成bc檔案與前面所述之dex檔合併於apk檔;另一方面則產生java程式碼的結構中產生相對應的 object。



上述內容中所敘述的 llvm-rs-cc編譯器是基於LLVM編譯器,也因為採用了LLVM(Low Level Virtual Machine)編譯器的關係等於增加了異質多核心的平行運算功能。

因此,Google 在發佈Android 4.2的時候同時在Renderscript Computation中說明了支援GPU 運算的功能。(見Renderscript Computation說明)

一般RenderScript (以下簡稱RS) 大多是用來圖形處理,本文主要實作一個簡單的a+b的範例來完成Renderscript 平行運算。