DirectX渲染到纹理

时间:2012-06-29 20:05:49

标签: c++ directx textures

我正在尝试将我的场景渲染为纹理,以便在着色器中使用它来获得一些后期处理效果。我对这种东西不是很有经验,所以我在这里有一些问题。 首先关闭所有:

我在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。但是我从哪里开始呢?我是否必须定义另一个缓冲区或者它是否可以工作?

具体地,

所以我想我知道我必须使用:renderTargetViewMap和depthStencilView设置OMRenderTargets。但是我必须在哪里设置它?在每个帧渲染调用?在我渲染场景中的其他对象之前或之后?而且我的猜测是我必须制作一个新的着色器,我将这个纹理创建为可以使用它。

感谢您的任何见解:/

1 个答案:

答案 0 :(得分:1)

每次要渲染纹理时都需要设置它,是(只要你没有切换到另一个渲染目标或后缓冲区)。将数据渲染到纹理后,设置处理此数据的着色器并绘制与此纹理对齐的四边形屏幕。