Tex2D возвращает интерполированные значения, когда от пиксельного центра в HLSL

голоса
0

Функция возвращает tex2D интерполированное значение, когда от пиксельного центра ((0,5, 0,5), например), это действительно проблема, когда у вас есть большая текстура как 1920х1080.

У меня есть пиксельные шейдеры HLSL, что первые образцы небольшое изображение, а затем вычисляет соответствующий пиксель в большой таблице поиска (1920x1080) и образцах его. Проблема заключается в том, что с плавающей точкой точности ошибка делает невозможным ударить пиксель мертвый, поэтому он возвращает цвет, который интерполированный с соседними пикселями.

Как я могу решить эту проблему? Могу ли я установить его не интерполировать в пробоотборник?

Редактировать:

Очевидно, что я могу использовать внутреннюю функцию tex2Dproj где я разделю координаты х и у по 1,92 и 1,08 заранее, а затем передать в 1000 как Tw аргумент, чтобы избежать каких-либо существенных ошибок с плавающей точкой точности. Но это кажется странным, что я должен сделать это.

Задан 07/11/2018 в 20:06
источник пользователем
На других языках...                            


1 ответов

голоса
0

Значение по умолчанию для пробоотборника фильтра ЛИНЕЙНАЯ делает его интерполировать. Для того, чтобы сделать образец текстуры без интерполирования вам нужно сделать, это:

texture2D ColorMap;
sampler2D ColorMapSampler = sampler_state
{
    texture = <ShadowMap>;
    AddressU = clamp;
    AddressV = clamp;
    magfilter = POINT;
    minfilter = POINT;
    mipfilter = POINT;
};

Что споткнулся меня было то , что у меня была только эта проблема с этой текстурой. Я использую MonoGame и установка SamplerState к PointClamp вне шейдера, но только для первой текстуры GraphicsDevice.SamplerStates[0] = SamplerState.PointClamp;. Если у вас есть несколько текстур это лучшая идея , чтобы объявить его в явном виде для каждой текстуры в затенении.

Ответил 28/11/2018 в 08:47
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more