2

私はスプライトベースの格闘ゲームを作成しており、実行時に画像のカラースワッピングを実装したいという開発が進んでいます(ユーザーがインターフェイスを介して、正確な色を何に変更するかを指定できるようにします。そして、ロード画面による中断なしに、瞬時に実行されます)。ピクセルシェーダーで簡単に実現できると思いました。特に他の色を変更するように値を設定して試してみましたが、非常にうまくいきました。次のステップでは、テキストファイル(変更する色と変更する色のカラーコードを含む)からデータを読み取るようにしました。いくつかのエントリがあり、次のような配列に格納されます。

XMFLOAT3 palette[10][2];

そして、これがシェーダーの対応する定数エントリです。

float4 xPalette[10][2];

つまり、変更する色は10色、変更する色は10色です。これを定数バッファーを介してピクセルシェーダーに渡しますが、配列の最後のエントリのみが認識され、他のすべてのエントリはゼロであるため、計画どおりに機能しません。GPUにデータを送信する前の16ビットアラインメントが原因だと思いますか?このようなデータをピクセルシェーダーに送信する方法は他にありますか?これを読んでいただきありがとうございます!

4

1 に答える 1

1

スワップをテクスチャ自体として送信できます。おそらく、テクセルの一番上の行を置き換えたいもので、[x] [y+1]を変更したい色にします。(テクスチャ座標の範囲は0から1であるため、置換する色の数を整数として渡す必要があります。その後、(1 / replaceCount * i)でインデックスを作成できます。GLSLを使用すると、sampler2DのIを使用してテクスチャを渡すことができます。考えてみてください。HLSLと似ていると思います(HLSLを書いてから数か月経ちました。:()

次に、シェーダー中に一番上の行の各テクセルをサンプリング/比較するだけです。

于 2013-02-12T17:11:35.067 に答える