2010-06-06 4 views
0

간단한 텍스처 매핑 모델을 DirectShow 소스 필터의 출력으로 렌더링해야합니다. 3D 렌더링은 Direct3D에서 올 필요가 없지만 좋을 것입니다. OpenGL이나 다른 공급자라면 DirectShow 소스 필터의 컨텍스트에 맞출 수 있다고 가정해도 좋습니다.DirectShow 소스 필터에서 3D 그래픽을 렌더링하는 방법

비주얼 스튜디오 2008 C++

난 당신이 당신이 다음 소스 필터 이미지 버퍼

로 복사 할 수 있습니다 원시 이미지 바이트에 대한 액세스를 얻을 수있는 D3D 장치에서 GetRenderTargetData를 호출 할 수 있습니다 것으로 나타났습니다 Direct3D를 가진

+0

중복 가능성 렌더링 얻는 방법의 예시적인 코드는 2985319/how-to-render-direct-direct-source-direct-source-filter) 및 [How to to 웹캠 피드 라이브 위에 3d 그래픽을 배치하십시오] (http://stackoverflow.com/questions/2981497/how-to-overlay-3d-graphics-on-top-of-webcam-feed-live) –

+0

Kirill, this post 유사하지만 복제본이 아닙니다. 질문은 좀 더 일반적인 것입니다. –

+0

나는 여전히 받아 들일 수있는 대답이없는 다른 질문을 편집하는 것이 좋을 것이라고 생각합니다. –

답변

0

여기 D3D는 [방법에 Direct3D를 렌더링 - 인 - 어 - 다이렉트 소스 - 필터 (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(); 
    } 
} 
관련 문제