Почему координата текстуры 1,0 выходит за границы текстуры?
Я делаю поиск цвета, используя текстуру, чтобы применить эффект к изображению. Мой поиск - это карта градиента, использующая яркость фрагмента первой текстуры, а затем ее поиск на второй текстуре. 2-я текстура 256x256 с градиентами, идущими горизонтально, и несколькими различными градиентами сверху вниз. Таким образом, 32 горизонтальные полосы каждые 8 пикселей в высоту. Мой поиск на x - это яркость, на y - градиент, и я нацеливаюсь на центр полосы, чтобы избежать пересечения.
Мой фрагментный шейдер выглядит так:
lowp vec4 source = texture2D(u_textureSampler, v_fragmentTexCoord0);
float luminance = 1.0 - dot(source.rgb, W);
lowp vec2 texPos;
texPos.x = clamp(luminance, 0.0, 1.0);
// the y value selects which gradient to use by supplying a T value
// this would be more efficient in the vertex shader
texPos.y = clamp(u_value4, 0.0, 1.0);
lowp vec4 newColor1 = texture2D(u_textureSampler2, texPos);
Это работает хорошо, но я получал искажения в самых белых частях белых и самой черной части черных. По сути, это выглядело так, как будто он взял этот newColor из совершенно другого места на texture2, или, возможно, просто ничего не получил за эти фрагменты. Я добавил зажимы в шейдер, чтобы он не выходил за границы текстуры поиска, но это не помогло. Я правильно не использую зажим?
Наконец я подумал, что это может быть связано с моей исходной текстурой или с тем, как она загружена. В итоге я исправил это, добавив:
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
Итак .. ПОЧЕМУ?
Немного раздражает необходимость фиксировать текстуры, потому что это означает, что я должен написать исключение в своем коде при загрузке справочных таблиц.
Если мои textPos.x и .y зафиксированы на 0-1 .. как он тянет образец за край?
Кроме того, нужно ли использовать вышеупомянутый вызов зажима при создании текстуры или я могу вызвать его, когда собираюсь использовать текстуру?