2

DirectX9 で非常に基本的なディファード シェーディングを実装しようとしています。現在、2 つのレンダー ターゲット (バック バッファーと別のテクスチャ) しか使用できません。したがって、法線または深度をレンダリングできますが、両方はレンダリングできません。私の質問は、誰かが複数のテクスチャ ターゲットにレンダリングする方法を説明できるかどうかです。以下のコードのようなものを使用できるという印象を受けました。インデックスがゼロの場合にのみ機能します。これは、おそらくサーフェスの 1 つが書き込まれていないことを意味します。

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);
4

2 に答える 2

2

あなたの質問により、私はこの問題をより集中的に発見しました。

それが私が見つけたものです:

まず、D3DCAPS9.NumSimultaneousRTを確認する必要があります。1以上ですか?すべてのレンダーターゲットは同じ結果とビット深度である必要がありますが、異なる形式にすることができます。アンチエイリアスは使用できません。

于 2012-10-24T09:34:59.090 に答える
2

n がターゲット番号であるすべてのターゲットに対して set d3dDevice->SetRenderTarget(n, surface) と言うだけで、ピクセル シェーダーで複数のレンダー ターゲット構造に出力する手法を設定します。

于 2012-08-31T19:08:52.577 に答える