Я предполагаю, что вы установили параметры обтекания текстур на GL_CLAMP_TO_EDGE
.См. glTexParameter
.Это вызывает растяжение пикселей при доступе к текстуре с помощью функции поиска текстуры texture2D
, выходящей за пределы диапазона [0.0, 1.0].
Вы можете создать «плиточную» текстуру с параметром обтекания GL_REPEAT
.
Но если вы хотите
«Как заменить его на любой цвет или прозрачный?»
, тогда вам нужно выполнить проверку диапазона.
Следующий код устанавливает альфа-канал на 0,0, если предел 1,0 превышен по координате x
или y
.Где переменная inBounds
установлена в 1.0, если координата текстуры в границах, а в противном случае она установлена в 0.0:
vec2 toprightcoord = textureCoordinate + 0.25;
vec4 tr = texture2D(inputImageTexture, toprightcoord);
vec2 boundsTest = step(toprightcoord, vec2(1.0));
flaot inBounds = boundsTest.x * boundsTest.y;
tr.a *= inBounds;
Вы можете расширить это до теста диапазона в [0.0, 1.0]:
vec2 boundsTest = step(vec2(0.0), toprightcoord) * step(toprightcoord, vec2(1.0));
Обратите внимание, функция glsl step
genType step( genType edge, genType x);
возвращает 0.0, если x[i] < edge[i]
, и 1.0 возвращается в противном случае.
С помощью функции glsl mix
цвет можно заменить другим:
vec4 red = vec4(1.0, 0.0, 0.0, 1.0);
tr = mix(red, tr, inBounds);