2009年9月10日 星期四

[ARToolkit]Developing your First Application, Part 1

Introduction

為了說明中詳細介紹如何開發ARToolKit應用,我們將逐步的來源碼示例程序的現有:simpleTest(或簡單的根據您的ARToolKit版本)。 該程序被發現在該目錄的examples/simple/. 。


在SimpleTest計劃

該文件我們將注視的是simpleTest.c(或simple.c)。 這個程序非常簡單包括一個主例程和幾個圖形繪製程序。
對應的功能,應用程序的六個步驟前面描述見表1。相應的步驟2到5在主循環(主迴圈)功能。

最重要的功能在程序的main, init, mainLoop, draw跟 cleanup。 ,我們將解釋這些函數調用的細節。


main

主要的簡單程序如下:



在 init初始化例程包含的代碼啟動視頻捕獲,閱讀標記和相機參數,並設置了圖形視窗。這相當於第1步在development method。接下來,我們進入即時狀態,以函數arVideoCapStart視頻為起點。 之後,該argMainLoop函數被啟動主程序LOOP和連結程式 keyEvent任何鍵盤事件和主迴圈的主圖形渲染迴圈。argMainLoop的定義是包含在文件gsub.c。


init

在初始化中應用從主要程序和用於初始化視頻捕捉和讀取初步ARToolKit應用參數。

起初,視頻路徑是打開視頻圖像的大小發現:



該變量vconf包含了初步的視頻配置和定義頂部的simple.c。在功能上您的平台的內容可以真正不同:看video configuration page。對於每個平台的默認字符串的定義,一般而言,是開放的第一個可用的視頻流在你的架構。

之後,我們需要初始化ARToolKit應用參數。 關鍵參數的ARToolKit應用如下:

‧該模式將用於模板匹配的模式和虛擬物體的這些模式相對應。
‧視訊的特性被使用。

這些都是從閱讀的文件名可以是指定的命令行或使用默認的硬編碼文件名。

因此,相機參數讀取默認的攝像頭參數文件名數據/ camera_para.dat:



下一步,這些參數都轉化為當前圖像的大小,因為視訊參數的變化取決於圖像的大小,即使使用相同的視訊也一樣。

將視訊參數設置讀入,並將視訊參數印在螢幕上:


之後,讀入模式定義默認的模式文件數據/ patt.hiro:



patt_id已被確定的模式識別。
最後一個圖形視窗打開:


第二個參數定義的argInit縮放功能,設置為1.0吻合的視頻圖像格式,設置為2.0倍大小(例如,有一個VGA AR display 與320x240image顯示輸入)。
mainLoop
這是例行的ARToolKit函數應用,它包含的代碼對應步驟2至5所需的應用程序的步驟。
首先一個視頻幀抓到函數arVideoGetImage:

視頻圖像,然後顯示在螢幕上。 這可以是一個unwarped圖像,或圖像扭曲,以校準的視訊扭曲。變形的圖像產生更正常的形象,但可能導致大量減少在視頻的幀速率。在這個例子中的形象是不unwarped:


然後,arDetectMarker用於搜索視頻圖像中查詢有正確的標記模式:



標誌物的數目找到包含在變數marker_num,而marker_info是一個指標結構包含坐標信息的信任和認可的價值觀和資訊的每個標記。marker_info結構詳細的用法在API documentation
此時,視頻圖像已顯示和分析。因此,我們並不需要頻繁使用它:我們可以要求偵測啟動一個新的攫取的同時,才再次打開新的程式。為此剛才呼叫arVideoCapNext:


接下來,所有的信心值檢測到的標記是比較正確的標記關聯資訊最高的數值:



標記之間的轉換和視訊可以被發現使用arGetTransMat功能:



真正的視訊的位置和方向相對於標記對象i是包含在3x4矩陣,patt_trans。

最後,虛擬物體,可以得出在卡上使用的繪製功能:



一個簡單的步驟進行優化,如果沒有發現模式(k==- 1),我們可以直接交換緩衝區call to draw 和 return:

沒有留言: