我試圖在DirectX9中實現非常基本的延遲着色。我現在有能力使用2個渲染目標(後臺緩衝區和另一個紋理)。所以我可以渲染法線或深度,但不能同時渲染。我的問題是有人可以解釋如何渲染到多個紋理目標。我的印象是,我只能使用下面的代碼。它只適用於索引爲零的情況,這可能意味着其中一個表面沒有被寫入。DirectX9中的多個渲染目標
d3dDevice->SetRenderTarget(0, surfaceDepth);
d3dDevice->SetRenderTarget(1, surfaceNormal);
我得到這個消息:的Direct3D9:(WARN):無法呈現的渲染目標,它也用作紋理。渲染目標被檢測爲綁定,但無法檢測渲染中是否實際使用了紋理。
我知道可能有幾件事情可能與此消息有關......我想如果有人可以解釋如何正確使用多個呈現目標索引。你也改變每個渲染目標的技巧。目前,我的着色器爲管道提供了「常規技術」和「深度技術」和「後處理技術」。
謝謝你的時間。
這裏是一些代碼:
SetTransforms();
d3dDevice->SetRenderTarget(0, surfaceDepth);
HR(d3dDevice->Clear(0, NULL, D3DCLEAR_ZBUFFER | D3DCLEAR_TARGET, 0xff000000, 1.0f, 0));
scenes[sceneIndex]->setTechnique("depthTech");
scenes[sceneIndex]->render(dt);
d3dDevice->SetRenderTarget(1, surfaceNormal);
HR(d3dDevice->Clear(0, NULL, D3DCLEAR_ZBUFFER | D3DCLEAR_TARGET, 0xff000000, 1.0f, 0));
scenes[sceneIndex]->setTechnique("normalTech");
scenes[sceneIndex]->render(dt);
你目前是否還將這些曲面設置爲紋理? (在調用d3dDevice-> SetTexture(...)) – Torious 2012-04-14 22:46:24
即時設置與當前FX的紋理。從設備調用set紋理意味着什麼?我最初使用它來解除紋理,如:pDevice-> SetTexture(0,NULL); //解除紋理渲染 \t pDevice-> SetTexture(1,NULL); //解除紋理渲染 – iEATeVo 2012-04-15 00:15:37
nm我想到了......我誤解了幕後發生的事情。 – iEATeVo 2012-04-15 21:46:56