C # / HLSL & XNA - Смешивание 2 цветов вместе в процентах в HLSL - PullRequest
1 голос
/ 25 марта 2012

Я создаю функцию тумана в моем файле Effect .. в пиксельном шейдере я вычисляю расстояние от положения камеры и положения входа, как показано ниже:

    float x = distance(_in.pos3d, CameraPosition);
float fd;
if(Fog)
{
    if(x > FogDistance)
        fd = ((x-FogDistance) * FogIntensity > 100) ? 100 : ((x-FogDistance) * FogIntensity);
    //_in.color = ???;
}

Где: x - эторасстояние от положения камеры и положения вершины, fd - это процент цвета тумана, FogDistance - это расстояние, на которое объекты не будут затронуты туманом, а FogIntensity - насколько интенсивен туман.

What I 'я пытаюсь получить цвет, который содержит (fd%) цвета тумана.Например, если цвет тумана был оранжевый, входное значение было белым, а fd было 25%, сгенерированный цвет был бы белым + 25% оранжевым.

РЕДАКТИРОВАТЬ: Кстати, извините за не поддерживаемый код настройки.

РЕДАКТИРОВАТЬ 2: Я заметил, что два прозрачных слоя имеют прозрачный результат, поэтому я немного прояснил вопрос.Там нет процента для ввода вершины.

1 Ответ

3 голосов
/ 26 марта 2012

Требуется функция lerp ( MSDN ). Это функция «линейной интерполяции».

Цвета в пиксельных шейдерах - это то же самое, что и векторы, поэтому вы можете использовать с ними любые векторные функции.

Вместо процента (в диапазоне от 0 до 100) функция lerp принимает значение от 0 до 1.

Так что ваш код, вероятно, будет выглядеть примерно так:

_in.color = lerp(_in.color, someOtherColor, fogAmount);
...