Render to Texture Inversed

Я пытаюсь сделать рендеринг в текстуру, но текстура делает трафарет противоположным тому, что я хочу сделать. т. е. чистый цвет сохраняется и отображается, в то время как фактический объект, который я хочу отобразить, является альфа-удаленным.

//Set the render target
RenderToTexture(RENDERTEXTURE_PARTICLESTAGE);
//Draw the scene (using the new render target)
m_Renderer.Draw();
//Save the file out so we can see the result
m_pRenderTextures[RENDERTEXTURE_PARTICLESTAGE]->SaveToFile(L"data/particle.tga");
This is the code I use to render to texture

В функции рендеринга в текстуру, я делаю это

m_pDeviceContext->OMSetRenderTargets(1, &m_pRenderTargetView, _pDepthStencilView);

m_pRenderTargetView не зависит от объекта m_pRenderTexture, а _pDepthStencilView передается из моего основного приложения.

Я также очищаю цель рендеринга и очищаю трафарет глубины заранее, я просто оставил код, чтобы свести вопрос к минимуму.

Я уверен, что это не просто проблема сохранения текстуры - я попытался отобразить ресурс обратно в приложение и получил тот же результат.

Я вполне уверен, что это из-за моего описания глубины трафарета, но я не уверен, что именно может быть не так.

//Depth Stencil
    D3D11_TEXTURE2D_DESC DepthStencilDescription;
    {
        DepthStencilDescription.Width               = m_uiClientWidth;
        DepthStencilDescription.Height              = m_uiClientHeight;
        DepthStencilDescription.MipLevels           = 1;
        DepthStencilDescription.ArraySize           = 1;
        DepthStencilDescription.Format = DXGI_FORMAT_D24_UNORM_S8_UINT;
        DepthStencilDescription.SampleDesc.Count    = 1;
        DepthStencilDescription.SampleDesc.Quality  = 0;
        DepthStencilDescription.Usage               = D3D11_USAGE_DEFAULT;
        DepthStencilDescription.BindFlags           = D3D11_BIND_DEPTH_STENCIL;
        DepthStencilDescription.CPUAccessFlags      = 0; 
        DepthStencilDescription.MiscFlags           = 0;
    }
    Utility::Assert(m_pDevice->CreateTexture2D(&DepthStencilDescription, 0, &m_pDepthStencilBuffer));
    Utility::Assert(m_pDevice->CreateDepthStencilView(m_pDepthStencilBuffer, 0, &m_pDepthStencilView));

В отличие от моего описания текстуры в моем RenderTextureClass, который

TextureDescription.Format = DXGI_FORMAT_R8G8B8A8_UNORM;

Однако попытка сопоставить их друг с другом вызвала ошибку.

Вот результаты PIX того, что происходит:

Это я рендеринг на текстуру Это когда я рендеринг на текстуру. Пока все выглядит хорошо... Но я сохраняю текстуру, и это выглядит так Рендеринг текстуры обратно на экран непосредственно через представление ресурса шейдера... (Не проблема функции сохранения текстуры) Белый цвет на самом деле является чистым цветом BackBuffer, красный цвет - чистым цветом RenderTexture. Так что это спасло противоположное от того, что я хочу.

Я ожидаю синие шары на белом фоне

Если бы кто-нибудь мог указать мне правильное направление, это было бы здорово. Ура:)

0 ответов

Другие вопросы по тегам