Пиксельный шейдер | Директкс 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;
    }

person TripleS    schedule 20.09.2012    source источник
comment
Попробуйте float4 realColor = tex2D(LUTSampler, locationInLUT);.   -  person ErikEsTT    schedule 20.09.2012
comment
Вы правы - получилось! Спасибо   -  person TripleS    schedule 21.09.2012


Ответы (2)


Пытаться

float4 realColor = tex2D(LUTSampler, locationInLUT);

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

person ErikEsTT    schedule 21.09.2012

Вместо

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

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

   float4 realColor = tex2D(LUTSampler, locationInLUT);
person TripleS    schedule 21.09.2012