Ваш конкретный пример интересен.Скажем, у вас есть 1D текстура размером 2 [a b]
То, что вы на самом деле получите из координаты текстуры 0.0, зависит от фильтрации.Это не обязательно a
.Единственное место, где у вас есть a
и просто a
для LINEAR (игнорирование отображения), находится в координате текстуры 0.25.То же самое верно для b
и 0,75.
При 0,0 и 1,0 (и 2,0, если на то пошло) вы получите (a + b) / 2 (снова LINEAR).Это не тот случай, когда 0 даст вам a, а 1 даст вам b.
-0.25 0 0.25 .5 0.75 1 1.25 ...
_____________________________
| | |
B | A | B | A
_____________________________
В случае фильтрации NEAREST 0.0 и 1.0 находятся точно на краю текселей, в то время как я неЯ не помню точно, что спецификация говорит в этом случае, я бы не стал полагаться на это.
Все это говорит ... Все это обсуждает координаты текстуры, которые используются фрагментом.Это не те, которые вы передали, а те, которые были растеризованы.
Например, если вы рисуете четырехугольник, покрывающий область в 2 пикселя, с 1 координатой текстуры от 0 до 1.
Вот диаграмма пикселей, которые покрываются вместе с интерполированными координатами:
0 0.25 .5 0.75 1
_________________
| | |
| P0 | P1 |
_________________
Координаты текстуры, которые будут использовать фрагменты, действительно равны 0,25 и 0,75 (иначе растеризатор интерполирует координаты текстуры в середина пикселя), даже если вы прошли 0 и 1.