0

シーンの深度マップを描画しようとしています。ここで、次のような HLSL ファイルを作成しました: http://www.riemers.net/eng/Tutorials/XNA/Csharp/Series3/Shadow_map.php そして、すべてうまくいきました。でも!各ピクセルの正確な値を知りたいので、通常のレンダー ターゲットで描画する代わりに、次のように Texture2D である新しいレンダー ターゲットを作成しました: http://www.riemers.net/eng/Tutorials/XNA /Csharp/Series3/Render_to_texture.php そして、スプライトバッチを使用して描画しました。

それで!画像を表示すると、最初の画像、つまり画面に直接描画する画像が次の出力を返します。

深度画像の修正

そして、スプライトを使用してテクスチャに描画してから画面に描画するものは、次のようになります。 スプライト描画イメージ

2 番目のキャプチャでは、明らかに身体の後ろにある身体の右腕が、オーバーラップ領域に身体が存在しないかのように描かれていることに注目してください。

前の頂点が最初にテクスチャに描画され、次に遠い頂点が近くの頂点を上書きして、観察された画像になるため、順序付けの問題だと思います。

ご意見をいただければ幸いです。

4

1 に答える 1

2

SpriteBatch 使用時にグラフィックス デバイスの状態を変更します。リンクされた記事から、これが設定するものです:

GraphicsDevice.BlendState = BlendState.AlphaBlend;
GraphicsDevice.DepthStencilState = DepthStencilState.None;
GraphicsDevice.RasterizerState = RasterizerState.CullCounterClockwise;
GraphicsDevice.SamplerStates[0] = SamplerState.LinearClamp;

おそらく、深さステンシルの状態をデフォルト (深さの読み取りと書き込み) に戻す必要があります。

GraphicsDevice.DepthStencilState = DepthStencilState.Default;

レンダリングに必要なものに応じて、他の状態を設定する必要がある場合もあります。

于 2012-02-29T01:50:10.327 に答える