4

グローバル スケールで 2D SpriteBatch レンダリングされた一連のグラフィックスのアンビエント ライティングを制御したいと考えています。SpriteBatch.Draw に渡された色をブレンドすることでこれを実行できることはわかっていますが、これをグローバルに実行したいと思います。

BasicEffect シェーダーは、単純なシーン用に XNA で固定関数パイプライン スタイルの照明を制御します。

BasicEffect シェーダーと SpriteBatch のシェーダーは互換性がありませんか? 誰かがこれらを一緒に機能させましたか?

4

4 に答える 4

2

私もこの問題を抱えていましたが、「互換性がありません」は間違っています。spriteBatch は、グラフィックス デバイスの「DepthStencilState」や「​​BlendState」などを変更します。これを修正するには、spriteBatch.End の後にこれを追加します。

GraphicsDevice.DepthStencilState = DepthStencilState.Default;

spriteBatch は DepthStencilState を None に変更するため、3D オブジェクトが正しく描画されません。他のプロパティも変更されます。これらをチェックしてください:

GraphicsDevice.BlendState = BlendState.Opaque;
GraphicsDevice.SamplerStates[0] = SamplerState.LinearWrap;
于 2011-10-10T21:28:49.010 に答える
2

これはあなたの質問に対する直接的な回答ではありませんが、役に立つかもしれません。BasicEffect オブジェクトと SpriteBatch オブジェクトは、XNA チームがリリースにバンドルした単なるシェーダーです。

これらのシェーダーのソース コードは、好みに合わせて表示/変更するために利用できます。独自のシェーダーを使用すると、継続的に障害物に遭遇することを回避できます。

詳細情報とソース コードは、 blogs.msdn.comから入手できます。

于 2009-07-25T01:41:37.647 に答える
0

私が知る限り、スプライト バッチはクワッドを画面にレンダリングするときに内部で独自の効果を使用します。一度に 1 つの効果でしかレンダリングできないため、私の答えはノーです。それらは互換性がありません。

于 2009-10-30T17:13:30.647 に答える
0

はい、互換性がありません。

これは、スプライトバッチが独自のカスタム頂点シェーダーを使用してクワッド レンダリングを行うためです。独自のカスタム ピクセル シェーダーを使用できます。xna クリエーターズ クラブの教育サイトには、スプライトバッチでカスタム ピクセル シェーダー効果を使用する方法を示すサンプルがあります。

于 2009-12-09T22:31:04.417 に答える