0

私がやりたいのは、ピクセルシェーダーのHLSLシェーダー内からスプライトバッチ描画呼び出しから色合いを取得できるようにすることです。

以前、これに似たものを聞いたところ、スプライトバッチのストック効果を確認するように言われました。これらを見て、困惑していましたが、COLOR0セマンティックで色合いがピクセルシェーダーに渡されていることは明らかでした。ただし、以下のように色パラメータを追加してこのセマンティックを使用しようとしましたが、機能しませんでした。

float4 PixelShaderFunction(float2 texCoord : TEXCOORD0, float4 inputColor : COLOR0) : COlOR0

私は何か、おそらく頂点シェーダーと関係がある何かが欠けていると思いますか?頂点シェーダーの経験はありませんが、スプライトバッチから色合いを取得できるようにするだけです。

誰もがこれを経験したことがありますか?ヘルプをいただければ幸いです

編集:なぜそれが機能しなかったのかについてより具体的に言うと、スプライトバッチの色合いの色に何を設定しても、inputColorは常に0でした

4

1 に答える 1

1

頂点シェーダーを通過します。セマンティクス関数の引数の入力修飾子のドキュメントに注意してください。

基本的なプロセスは次のようになります。

[vertex buffer data] -> [vertex shader] -> [pixel shader] -> [output]

ピクセルシェーダーは、頂点シェーダーから出てくるものだけを認識します。各段階で、データはセマンティクスに応じて解釈されます。

頂点バッファーと頂点シェーダーの間で、頂点宣言はバイナリデータをセマンティクスによって記述された入力レジスタにマップします。

頂点シェーダーとピクセルシェーダーの間で、出力は、一致するセマンティック名によって記述された入力に渡されます。繰り返しますが、このセマンティクスのリストに注意してください。(ここには、頂点間のピクセルの入力値を取得するためのブレンドステップもあります。)

最後に、ピクセルシェーダーの出力は、パイプラインの残りの固定部分(深度テスト、ブレンディングなど)の入力の固定セット(セマンティクスを含む)に渡されます。


この場合、混乱しているのは、シェーダーからデータを出力する方法が2つあるという事実だと思います。データを返し、戻り値にセマンティック(または構造体を返す場合は多くのセマンティック)を与えることができます。

outただし、またはinout修飾子を使用して値を引数に割り当てる(または単に引数に残す)ことで値を出力することもできます。

これは、の頂点シェーダーが実行しSpriteBatchていることです。すべてのパラメータが指定されていることに注意してくださいinout。また、色やテクスチャ座標のパラメータはまったく変更されていません。これらのパラメータは、(適切なブレンドを使用して)ピクセルシェーダに直接渡されます。

于 2012-08-15T04:56:35.710 に答える