2010-05-10

Media Foundation + ARToolkit + OpenGL

ARToolkit 裡面已經有DSVL影像擷取相關函式庫,此函式庫利用 DirectShow 來擷取影像,因此若要用 VC10 來編譯 DSVL,另外需要再安裝 Windows2003 SDK,這邊我用 Media Foundation 的 Video Capture 功能來取代 DSVL,Media Foundation 是設計來取代 DirectShow 的新一代技術。
Media Foundation 的 Video Capture 程式碼可以參考 MFCaptureD3D Sample,其 device.cpp 裡 DrawDevice::DrawFrame() 函數負責將擷取的影像轉換成 RGB32 (A8R8G8B8) 格式再用 DirectX 畫出,我們可以直接利用此函數轉換完成之後的 RGB32 影像來做影像辨識。
ARToolkit 的辨識功能函數 arDetectMarker() 讀取的影像格式為 (A8R8G8B8) 剛好與 DrawFrame() 函數裡轉換後的影像格式相同,因此直接將影像餵給 arDetectMarker() 即可得到辨識結果。 OpenGL 則要稍微做一點小變化來讀取 ARGB 格式影像:

圖片更新時(擷取到新的影像):
glTexSubImage2D (GL_TEXTURE_2D, 0, 0, 0, 640, 480, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, m_pBuffer);

0 意見 :

張貼留言