我试图将我的场景渲染到纹理,以在着色器中使用它来进行一些后期处理效果.我对这种东西不是很有经验,所以我在这里有一些问题.
首先是全部:
首先是全部:
我在我的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.但是我必须在哪里设置它?在每个帧渲染调用?在我渲染场景中的其他对象之前或之后?我的猜测是我必须制作一个新的着色器,我将这个纹理创建为与它一起使用.
感谢您的任何见解:/
解决方法
每次要渲染到纹理时都必须设置它,是(并且只要您没有切换到另一个渲染目标或后缓冲区).将数据渲染到纹理后,设置处理此数据的着色器并绘制与此纹理对齐的四边形屏幕.