Для моего проекта я использую DirectX 9 C++. Я использую пиксельный шейдер, чтобы отобразить большое изображение, используя пару текстур в методе индексного изображения (цветное изображение )а>.
Чтобы сэкономить пространство текстуры, я хотел бы сохранить пиксели изображения, используя записи таблицы поиска, чтобы использовать значения таблиц поиска в качестве значений пикселей изображения на этапе пиксельного шейдера.
Я использую 2 текстуры, первая текстура — это текстура изображения размером 2048 ^ 2. Разрешение пикселей составляет 128 пикселей, вторая текстура имеет размер LUT (таблицы поиска) 128*1.
Я использую вторую текстуру как индексное изображение (поиск по таблице),
почему-то мне трудно сэмплировать значение из первой текстуры (текстура изображения) --> A[i,j] и сэмплировать вторую текстуру в том же месте --> Значение пикселя = 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;
}
float4 realColor = tex2D(LUTSampler, locationInLUT);
. - person ErikEsTT   schedule 20.09.2012