Dlaczego współrzędna tekstury 1,0 wykracza poza krawędź tekstury?

Wykonuję wyszukiwanie kolorów za pomocą tekstury, aby zastosować efekt do obrazu. Moje wyszukiwanie to mapa gradientu wykorzystująca luminancję fragmentu pierwszej tekstury, a następnie patrząc na drugą teksturę. Druga tekstura to 256x256 z gradientami przechodzącymi poziomo i kilkoma różnymi gradientami od góry do dołu. Tak więc 32 poziome paski o wysokości 8 pikseli. Moje spojrzenie na x to luminancja, na y to gradient i celuję w środek paska, aby uniknąć krzyżowania.

Mój fragment shader wygląda tak:

 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);

To działa dobrze, ale dostałem zniekształcenia w najbielszych częściach bieli i najczarniejszej części czerni. Zasadniczo wyglądało na to, że chwycił ten nowy kolor z zupełnie innego miejsca na texture2, albo po prostu nie dostał nic dla tych fragmentów. Dodałem zaciski w module cieniującym, aby powstrzymać go przed wyjściem poza krawędź tekstury wyszukiwania, ale to nie pomogło. Czy nie używam poprawnie zacisku?

Wreszcie uznałem, że może to mieć coś wspólnego z moją teksturą źródłową lub sposobem jej załadowania. Naprawiłem to, dodając:

    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

Więc dlaczego?

Trochę denerwujące jest zmuszanie do blokowania tekstur, ponieważ oznacza to, że muszę ładować wyjątek w moim kodzie podczas ładowania tabel wyszukiwania.

Jeśli moje textPos.x i .y są zablokowane do 0-1 .. jak to wyciąga próbkę poza krawędź?

Również .. czy muszę używać powyższego wywołania cęgowego podczas tworzenia tekstury, czy też mogę to nazwać, gdy zamierzam użyć tekstury?

questionAnswers(1)

yourAnswerToTheQuestion