私のプロジェクトでは、directx 9C++を使用しています。インデックス画像(カラー画像)の方法でカップルテクスチャを使用して大きな画像を表示するために、ピクセルシェーダーを使用しています。
テクスチャスペースを節約するために、ルックアップテーブルエントリを使用して画像のピクセルを保存し、ルックアップテーブルの値をピクセルシェーダーフェーズでの画像のピクセル値として使用したいと思います。
私は2つのテクスチャを使用しています。最初のテクスチャは画像テクスチャで、サイズは2048^2です。pixeslの種類は128pixeslで、2番目のテクスチャは128 * 1のLUT(ルックアップテーブル)サイズです。
2番目のテクスチャをインデックス画像(ルックアップテーブル)として使用しています。
どういうわけか、最初のテクスチャ(画像テクスチャ)-> A [i、j]から値をサンプリングし、同じ場所で2番目のテクスチャをサンプリングするのは難しいと思います->ピクセル値= LUT [A [i、j] ]
次に、ピクセル値を画面に出力します。
これが私のピクセルシェーダーコードです:
sampler2D layoutSample : register (s0)
sampler2D LUTSampler : register (s1)
struct PS_INPUT
{
float2 texture : TEXCOORD0;
float2 LUT_Texture: TEXCOORD1;
}
struct PS_OUTPUT
{
float4 color : COLOR0;
}
PS_OUTPUT ps_main ( in PS_INPUT input )
{
PS_OUTPUT out;
/// Sample the first texture - the image texture
float4 color = tex2D(layoutSampler, input.Texture);
float2 locationInLUT = float2(color.a , 0.0) ;
// I WOULD LIKE TO USE: But it's seems like a sampler is neccery for tex2D command
///float4 realColor = tex2D(locationInLUT , input.LUT_Texture);
float4 realColor = tex2D(LUTSamplerm , input.LUT_Texture);
Out.color = float4(realColor.r, realColor.b, realColor.g, 1.0);
return Out;
}