Да, вы можете создать шейдер и использовать фрагментный шейдер (в псевдошейдере):
frag()
{
float4 color = tex2D(myTexture);
return float4(0,0,color.b,1);
}
Это вернет только синий цветовой спектр вашей текстуры. Обратите внимание, что значения цвета в фрагментном шейдере всегда находятся в диапазоне от 0 до 1.
ОТВЕТ НА ВОПРОС 1
Возвращает части вашей текстуры, которые содержат любой синий. Так и в случае вашей красно-синей текстуры. Он вернет только синие части, а красные будут черными. Если бы у вас была какая-то смешанная текстура, вы бы получили голубую тонированную текстуру.
Я понимаю, что вы на самом деле совсем не хотите видеть красные части. Вы можете сделать это по-разному. В HLSL есть функция clip
. Но я не знаю синоним GLSL. Другой вариант - установить прозрачность вашей текстуры следующим образом:
frag()
{
float4 color = tex2D(myTexture);
return float4(color.rgb, color.b);
}
Это будет использовать синюю часть вашей текстуры, чтобы определить прозрачность. Поскольку красный не имеет синего, красный будет полностью невидимым. И синий имеет 1, поэтому он будет полностью виден.
ОТВЕТ НА ВОПРОС 2
Если у вас есть текстура камня / камня и вы хотите видеть только синие пиксели в диапазоне, вы должны сделать оператор if. Если вы хотите увидеть «голубоватость» текстуры, этот шейдер сделает свое дело.
Если это действительно для целей отладки, было бы лучше использовать первый шейдер, потому что он будет поддерживать альфа-значение равным 1. Так что вместо прозрачности вы получите черный.
Чтобы использовать только показ диапазона «синевы», вы можете объединить оператор if с созданием цвета, описанным выше:
frag()
{
float4 color = tex2D(myTexture);
float4 result;
if(color.b > 0.2f && color.b < 0.7f)
{
result = float4(0,0,color.b,1); // only return the blue part
// or
result = float4(color.rgb,1); // return the original color if blue is ok
}
else
{
result = float4(0,0,0,0); // fully transparent, won't show a thing
}
return result;
}
Как видите, эти проверки довольно легко выполнить. GLSL такой же, как C, поэтому вы можете использовать свои базовые навыки программирования для таких утверждений.