Смотрите мой ответ здесь: Координаты текстуры OpenGL в пиксельном пространстве
Об этом спрашивали несколько раз, но у меня нет ссылок под рукой, поэтому быстрое и грубое объяснение. Допустим, текстура имеет ширину 8 пикселей:
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
^ ^ ^ ^ ^ ^ ^ ^ ^
0.0 | | | | | | | 1.0
| | | | | | | | |
0/8 1/8 2/8 3/8 4/8 5/8 6/8 7/8 8/8
Цифрами обозначены пиксели текстуры, столбцы - края текстуры и в случае ближайшей фильтрации граница между пикселями. Однако вы хотите поразить центры пикселей. Итак, вы заинтересованы в текстурных координатах
(0/8 + 1/8) / 2 = 1 / (2 * 8)
(1/8 + 2/8) / 2 = 3 / (2 * 8)
...
(7/8 + 8/8) / 2 = 15 / (2 * 8)
Или, в более общем случае, для пикселя i в текстуре шириной N правильная координата текстуры:
(2i + 1) / (2N)
Однако, если вы хотите идеально выровнять текстуру по пикселям экрана, помните, что то, что вы указываете в качестве координат, - это не пиксели квадратора, а ребра, которые, в зависимости от проекции, могут совмещаться с краями пикселов экрана, а не с центрами, поэтому могут требуются другие текстурные координаты.