2

次の形式で通常のアダプターを作成する directx9 ゲーム エンジンがあります: D3DFMT_X8R8G8B8 一部のオブジェクトをオフスクリーン レンダー ターゲットにライトマップとしてレンダリングするシステムがあります。次に、そのライトマップ データを使用してバック バッファーに合成し、フル スクリーンの「マスク」として機能させ、暗いシーンで松明やその他の光源の効果を得ることができるようにします。すべてがうまく機能します。問題は、大きな解像度の大きなオフスクリーン ライトマップ レンダー ターゲットがそれぞれ 16 MB であり、実際にはそれらから 8 ビットのデータ (グレースケール) しか必要としないため、32 ビット レンダー ターゲット メモリの 75% が無駄。(私は低スペックのカードをターゲットにしています)。レンダー ターゲットを D3DFMT_A8 として作成しようとしましたが、directx はサイレントに失敗し (CheckDeviceFormat() を追加すると発生することがわかります)、とにかく 32 ビットを作成します。

助けてくれてありがとう、私はレンダーターゲット関連のものが苦手です:)

4

2 に答える 2

1

D3DFMT_L8 は 8 ビットの輝度です。GeForce 3 (つまり、シェーダー 1.1 を搭載した最初の消費者向けカード!) でサポートされているので、どこでも利用できるはずです。色はL,L,L,1、つまりrgb=輝度値、alpha=1と読むと思います。

編集: このツールはキャップを見つけるのに便利です:

http://zp.lo3.wroc.pl/cdragan/wizard.php

于 2011-09-28T23:14:08.947 に答える
0

Ontopic: 低スペックのカードをターゲットにしている場合、8 ビットのシングル チャネル レンダー ターゲットがまったくサポートされていないシステムで実行している可能性が非常に高くなります。

シェーダーを使用してレンダリングと合成を行う場合、ライトマップの 4 つの交互ピクセルに rgba チャネルを使用して、情報をパックすることができるはずです。現在のレンダリング設定についてもう少し教えていただけないでしょうか?

オフトピック: あなたが StackOverflow に参加してくれたことは素晴らしいことです。あなたの作品の大ファンです!

于 2011-06-28T11:45:06.253 に答える