2015-07-08 2 views
0

Я новичок в hlsl. Я пытаюсь написать пиксельный шейдер, который преобразует из пространства RGB в пространство YIQ (NTSC). Процесс преобразования прекрасен, но я не могу заставить сэмплер и tex2D возвращать любой цвет, кроме того, что в левом верхнем углу текстуры. Я знаю, что это должна быть глупая ошибка, но поиск в Google только что смутил меня.HLSL Pixel Shader Color Sample

Я попытался объявить текстуру и связать ее с sampler2D с помощью sampler_state, но это ничего не изменило. Я использую Ventuz, в котором работают DirectX 9 и Pixel Shader 3.0. У меня есть простой объект плоскости с текстурой изображения. Я просто хочу видеть, что текстура не тронута после прохождения шейдера, поэтому я могу попробовать выполнить шаги преобразования.

float4x4 WorldViewProjection : WORLDVIEWPROJECTION; 

sampler2D TextureSampler : register(s0); 

float4 VS(float4 Position : POSITION){ 
    return float4(mul(Position, WorldViewProjection)); 
} 

float4 PS(float2 uv : TEXCOORD) : COLOR 
{ 
    float4 Colour = tex2D(TextureSampler, uv.xy); 

    /* Perform colour space conversion steps */ 

    return YIQA; 
} 

technique Tech1 
{ 
    pass pass0 
    { 
     vertexshader = compile vs_3_0 VS(); 
     pixelshader = compile ps_3_0 PS(); 
    } 
} 

Что я делаю неправильно?

ответ

2

Ваш Vertex Shader не выводит атрибут «TEXCOORD», поэтому вход в пиксельный шейдер будет (0,0) для параметра «uv», поэтому вы получаете только верхнюю левую руку угловой выбор.

Попробуйте вывести «float2 uv: TEXCOORD» и установите UV-координаты как (0,0), (1,0), (1,1), (0,1) для четырех углов экрана квадрат по часовой стрелке от верхнего левого угла.

Смежные вопросы