Эффекты HLSL: черно-белое изображение

Визуализация изображения в черно-белых тонах представляет еще один простейший эффект HLSL. В данном случае с помощью скалярного произведения мы преобразуем цвет каждого пикселя в оттенок серого. Чтобы увидеть этот эффект в действии, замените код пиксельного шейдера на следующий:

float4 PixelShaderFunction(VertexOut input) : COLOR0
{
    float4 color;
    color = tex2D( ColoredTextureSampler, input.textureCoordinates.xy);
    return dot(color, float3(0.3, 0.59, 0.11));
}

Что делается в этом коде? Во-первых, шейдер извлекает цвет каждого пикселя по определенной координате. Затем мы вычисляем скалярное произведение двух векторов: цвета пикселя текстуры (а цвет - это тоже вектор) и вектора, использующего значения (0.3, 0.59, 0.11). Почему именно эти значения? Вы можете также использовать для всех значений, например, число 0,33. чтобы получить некоторый средний цвет. Однако уже давным давно некоторые люди, более умные и изобретательные, чем я, заметили, что именно эти значения больше всего похожи на те оттенки, которые воспринимаются человеческим глазом. Я очень не люблю ссылаться на Википедию, но именно данный ресурс поможет вам разобраться во всех этих числах (смотрите страницу http://en.wikipedia.org/wiki/Grayscale).

В результате изображение станет черно-белым, как на рисунке 13-9.

Рисунок 13-9. Черно-белая картинка кажется немного жутковатой

Как вы видите, эффекты HLSL обладают неограниченными возможностями. Я привел здесь только несколько простейших примеров. Как упоминалось в начале главы, данная книга не претендует на всеохватность информации по HLSL. Однако, если вас заинтересует данная технология, то вы можете найти соответствующие книги и интернет-ресурсы, которые помогут вам более глубоко погрузиться в замечательный мир эффектов HLSL.


Hosted by uCoz