gpt4 book ai didi

c++ - DirectX 渲染到纹理

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:19:11 29 4
gpt4 key购买 nike

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

我的 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);

我正在创建一个纹理、一个渲染 View 和一个资源 View 。但是我从这里去哪里呢?我是否必须定义另一个缓冲区,或者这毕竟有效吗?

具体而言,

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

感谢任何见解:/

最佳答案

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

关于c++ - DirectX 渲染到纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11268284/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com