Пиксельный шейдер | Directx 9 | Проиндексированное изображение с помощью пиксельного шейдера | Как использовать 2 текстуры: первую текстуру в качестве изображения, вторую как в индексном изображении

Для своего проекта я использую 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;
}

0

Решение

Пытаться

float4 realColor = tex2D(LUTSampler, locationInLUT);

В следующий раз используйте FXC компилятор и посмотрите на вывод ошибок.

1

Другие решения

Вместо

   float4 realColor = tex2D(LUTSamplerm , input.LUT_Texture);

Используйте следующее:

   float4 realColor = tex2D(LUTSampler, locationInLUT);
0

По вопросам рекламы [email protected]