0
我需要渲染一個簡單的紋理映射模型作爲directshow源過濾器的輸出。 3D渲染不需要來自Direct3D,但那會很好。假設我可以將它放入DirectShow源過濾器的上下文中,OpenGL或任何其他提供者都可以。如何在directshow源過濾器中渲染3d圖形
Visual Studio 2008的C++
我需要渲染一個簡單的紋理映射模型作爲directshow源過濾器的輸出。 3D渲染不需要來自Direct3D,但那會很好。假設我可以將它放入DirectShow源過濾器的上下文中,OpenGL或任何其他提供者都可以。如何在directshow源過濾器中渲染3d圖形
Visual Studio 2008的C++
隨着Direct3D的我發現,您可以從D3D設備調用GetRenderTargetData讓你接觸到的原始圖像的字節,然後可以複製到源過濾圖像緩衝區
下面是如何獲得D3D渲染的[如何渲染的-Direct3D的IN-A-DirectShow的源濾波器(http://stackoverflow.com/questions/
void CaptureRenderTarget(IDirect3DDevice9* pdev)
{
IDirect3DSurface9* pTargetSurface=NULL;
HRESULT hr=pdev->GetRenderTarget(0,&pTargetSurface);
if(SUCCEEDED(hr))
{
D3DSURFACE_DESC desc;
hr=pTargetSurface->GetDesc(&desc);
if(SUCCEEDED(hr))
{
IDirect3DTexture9* pTempTexture=NULL;
hr=pdev->CreateTexture(desc.Width,desc.Height,1,0,desc.Format,D3DPOOL_SYSTEMMEM,&pTempTexture,NULL);
if(SUCCEEDED(hr))
{
IDirect3DSurface9* pTempSurface=NULL;
hr=pTempTexture->GetSurfaceLevel(0,&pTempSurface);
if(SUCCEEDED(hr))
{
hr=pdev->GetRenderTargetData(pTargetSurface,pTempSurface);
if(SUCCEEDED(hr))
{
//D3DXSaveTextureToFile(L"Output.png",D3DXIFF_PNG,pTempTexture,NULL);
D3DLOCKED_RECT data;
hr=pTempTexture->LockRect(0, &data, NULL, 0);
if(SUCCEEDED(hr))
{
BYTE *d3dPixels = (BYTE*)data.pBits;
}
pTempTexture->UnlockRect(0);
}
pTempSurface->Release();
}
pTempTexture->Release();
}
}
pTargetSurface->Release();
}
}
可能重複的示例代碼2985319/how-to-render-direct3d-in-a-directshow-source-filter)和[如何結束在攝像頭飼料生活頂部放置3d圖形](http://stackoverflow.com/questions/2981497/how-to-overlay-3d-graphics-on-top-of-webcam-feed-live) – 2010-06-06 18:58:06
Kirill,這篇文章是相似的,但它不是重複的。問題是更一般的 – 2010-06-06 18:59:52
我認爲最好的想法是編輯你還沒有接受答案的另一個問題。 – 2010-06-06 19:02:27