6

シーンをテクスチャにレンダリングして、後処理効果のためにシェーダーで使用しようとしています。私はこの種のことについてあまり経験していないので、ここでいくつか質問があります..まず第一に:

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 で設定する必要があることはわかっていると思います。しかし、これをどこに設定する必要がありますか?すべてのフレーム レンダー コールで? シーン内の他のオブジェクトをレンダリングする前か後か? 私の推測では、このテクスチャを操作するために作成した新しいシェーダーを作成する必要があると思います。

洞察をありがとう:/

4

1 に答える 1

1

はい、テクスチャにレンダリングするたびに設定する必要があります (別のレンダー ターゲットまたはバック バッファーに切り替えていない限り)。データをテクスチャにレンダリングしたら、このデータを処理するシェーダーを設定し、このテクスチャで画面に位置合わせされたクワッドを描画します。

于 2012-06-29T21:10:05.717 に答える