2010-05-09 34 views
3

我正在尋找關於如何在directshow中將視頻(網絡攝像機)饋送疊加到direct3d上的教程或文檔。如何在directshow中疊加direct3d

我想提供一個虛擬的網絡攝像頭(看起來像一個網絡攝像頭的系統(即一個虛擬設備。因此,它被用在以往正常的網絡攝像頭可以像IM視頻聊天使用)

我想從連接到計算機的網絡攝像頭捕捉視頻源 我想在視頻源頂部覆蓋一個3d模型並將其作爲輸出提供

我曾計劃在directshow中這樣做,它看起來可能做到這一點,如果你對可能的替代方案有任何想法,我全力以赴。我正在使用visual studio 2008編寫C++。

回答

3

使用Video Mixing Renderer Filter將視頻渲染到紋理,然後將其渲染爲全屏四邊形。之後,您可以將其餘的3D內容渲染到頂部,然後呈現場景。

1

您是否在圖形中的某個位置放置了一個過濾器,該過濾器將D3D渲染到視頻上?

如果是這樣,那麼你需要看看從CTransformFilter派生出一個過濾器。像EZRGB的例子會給你一些工作。基本上,一旦你有這種排序你的過濾器需要做直接3D渲染,並從字面上,將結果圖像插入直接顯示流。唉,您無法將Direct3D直接渲染到直接顯示視頻幀,因此您必須執行渲染,然後鎖定前/後緩衝區,並將3D數據複製到直接顯示流中。這是不理想的,因爲它會很慢(與標準的D3D渲染相比),但是據我所知它是最好的。

編輯:根據你的更新,你想要的是相當複雜的。您需要創建一個源過濾器(您應該查看CPushSource示例)以開始。完成之後,您需要將其註冊爲視頻捕獲源。基本上你需要通過在你的DLLRegisterServer函數中使用IFilterMapper2::RegisterFilter調用並傳入一個類ID「CLSID_VideoInputDeviceCategory」。添加Direct3D將如上所述。

您想要花費盡可能多的時間閱讀Windows SDK中的DirectShow示例並開始修改它們以執行您希望它們執行的操作。