2012-06-29 71 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

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