0

複数のアルファ オブジェクトを重ねてレンダリングしようとすると問題が発生します。現時点では、1 つのアルファ オブジェクトを別のアルファ オブジェクトの上にレンダリングすると、一番上のアルファ オブジェクトは表示されますが、一番下のオブジェクトは、最初のオブジェクトを通り過ぎたり回ったりするまで表示されません。追加のブレンディング エフェクトを取得しようとしているので、一番上のオブジェクトは、その背後に別の透明なオブジェクトがあることを示しています。XNAでこれをどのように行いますか?? 私の現在のレンダリング状態の設定は次のとおりです。

RenderState rs = Globals.g_Device.RenderState;
rs.AlphaBlendEnable = true;
rs.BlendFunction = BlendFunction.Add;
rs.DepthBufferFunction = CompareFunction.LessEqual;
rs.DepthBufferEnable = true;
rs.DepthBufferWriteEnable = true;
Globals.g_Device.PresentationParameters.EnableAutoDepthStencil = true;
Globals.g_Device.PresentationParameters.AutoDepthStencilFormat =     DepthFormat.Depth24Stencil8;
4

1 に答える 1

1

深度バッファは、オブジェクトをレンダリングする順序が問題にならないようにするためのものです。すでに描画されているピクセルの「下」にピクセルを描画すると、そのピクセルはスキップされます。画面上の「上」にピクセルを描画すると、そのピクセルが描画され、画面の内容 (および次に描画される三角形と比較するための正しい深度を提供する深度バッファー) が上書きされます。

残念ながら、これは透明なオブジェクトには機能しません。シーンの上に透明なオブジェクトを描画すると、表示されているシーンとブレンドされます。しかし、深度をブレンドする方法がないため、上書きするだけです。そのため、その透明なオブジェクトの「下」に別のオブジェクトを描画しようとすると、通常どおりスキップされます。

透明なオブジェクトを含むシーンをレンダリングする一般的なプロセスは次のとおりです。

  • 深度の読み取りと書き込みをオンにして、不透明なオブジェクトをシーンに描画します。

  • 透明なオブジェクトを後ろから前に並べ替えます。

  • 深度読み取りをオンにして、並べ替えられた透明なオブジェクトを描画します。

これを行うと、透明なオブジェクトが不透明なオブジェクトによって正しく隠されます。ただし、それらは正しくソートされているため、透明なオブジェクトは、まだ描画されていない他の透明なオブジェクトを覆い隠す機会がありません。

于 2011-03-14T13:08:57.957 に答える