2012-06-29 67 views
4

我試圖使我的場景到紋理用它着色器的一些後期處理效果。我不是很用這種東西經歷了那麼我有一些問題在這裏.. 首先關閉所有:的DirectX渲染到紋理

我有我的OnCreateDevice這個代碼()方法:

D3D11_TEXTURE2D_DESC textureDesc; 
    D3D11_RENDER_TARGET_VIEW_DESC renderTargetViewDesc; 
    D3D11_SHADER_RESOURCE_VIEW_DESC shaderResourceViewDesc; 

    ZeroMemory(&textureDesc, sizeof(textureDesc)); 

    textureDesc.Width = 800/2; 
    textureDesc.Height = 600/2; 
    textureDesc.MipLevels = 1; 
    textureDesc.ArraySize = 1; 
    textureDesc.Format = DXGI_FORMAT_R32G32B32A32_FLOAT; 
    textureDesc.SampleDesc.Count = 1; 
    textureDesc.Usage = D3D11_USAGE_DEFAULT; 
    textureDesc.BindFlags = D3D11_BIND_RENDER_TARGET | D3D11_BIND_SHADER_RESOURCE; 
    textureDesc.CPUAccessFlags = 0; 
    textureDesc.MiscFlags = 0; 


    pd3dDevice->CreateTexture2D(&textureDesc, NULL, &renderTargetTextureMap); 


    renderTargetViewDesc.Format = textureDesc.Format; 
    renderTargetViewDesc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2D; 
    renderTargetViewDesc.Texture2D.MipSlice = 0; 


    pd3dDevice->CreateRenderTargetView(renderTargetTextureMap, &renderTargetViewDesc, &renderTargetViewMap); 

    shaderResourceViewDesc.Format = textureDesc.Format; 
    shaderResourceViewDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D; 
    shaderResourceViewDesc.Texture2D.MostDetailedMip = 0; 
    shaderResourceViewDesc.Texture2D.MipLevels = 1; 


    pd3dDevice->CreateShaderResourceView(renderTargetTextureMap, &shaderResourceViewDesc, &shaderResourceViewMap); 

我創建紋理,一個renderView和一個resourceView。但我從哪裏去?我是否必須定義另一個緩衝區或完成這項工作?

具體來說,

所以我想我知道我必須與設置OMRenderTargets:renderTargetViewMap和depthStencilView。但我要在哪裏設置?在每一幀渲染調用?在我場景中渲染其他物體之前還是之後?我的猜測是我必須製作一個新的着色器,我將這個紋理創建成與它一起工作。

感謝您的見解:/

+0

你嘗試過什麼?我敢肯定有很多紋理渲染教程那裏(https://www.google.com/search?q=D3D+11+render+to+texture&ie=utf-8&oe=utf-8&aq=t&rls=org。 Mozilla瀏覽器:EN-US:官方與客戶端=火狐-A)。什麼部分,特別是你在尋求幫助? – Ani

+0

所以我想我知道我必須設置OMRenderTargets:renderTargetViewMap和depthStencilView。但我要在哪裏設置?在每一幀渲染調用?在我場景中渲染其他物體之前還是之後?我的猜測是我必須製作一個新的着色器,我將這個紋理創建成與它一起工作。 – puelo

+0

每次你想渲染到紋理時,你都必須設置它,是的(只要你沒有切換到另一個渲染目標或後臺緩衝區)。將數據渲染到紋理後,設置處理此數據的着色器,並使用此紋理繪製與屏幕對齊的四邊形。 – Ani

回答

0

你必須要渲染到紋理每次都設置它,是(只要你還沒有切換到另一個渲染目標或後臺緩衝區) 。將數據渲染到紋理後,設置處理此數據的着色器,並使用此紋理繪製與屏幕對齊的四邊形。