Как OpenGL обрабатывает границу текстуры при использовании GL_REPEAT? - PullRequest
2 голосов
/ 26 августа 2010

Я понимаю, что параметр GL_REPEAT будет игнорировать целочисленную часть координаты текстуры, только дробная часть используется при отображении текстуры. Вопрос в том, как OpenGL обрабатывает границу текстуры? Например, если texcoord равно 2.0, возвращаемое значение должно быть таким же, как и возвращаемое значение в texcoord 0.0 или 1.0? Я предполагаю, что «нормальная» текстовая координата находится в диапазоне [0.0,1.0], который является наиболее распространенным диапазоном текстовой координаты.

Спасибо за ваш ответ!

Ответы [ 2 ]

2 голосов
/ 26 августа 2010

Ваш конкретный пример интересен.Скажем, у вас есть 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.

0 голосов
/ 26 августа 2010

2.0 ограничено до 0.0, так как оно не выпадает из диапазона [0, 1], оно не учитывает границу текстуры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...