iPhone OpenGL ES 2.0 - текстуры Pixel Perfect - PullRequest
5 голосов
/ 01 сентября 2011

Как я могу привести свои текстуры в соответствие с пикселями экрана для идеальной графики в OpenGL ES 2.0?Это очень важно для проекта, над которым я работаю, в котором используется пиксельная графика.Любая помощь в этом была бы великолепна!

Ответы [ 2 ]

9 голосов
/ 01 сентября 2011

Смотрите мой ответ здесь: Координаты текстуры 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)

Однако, если вы хотите идеально выровнять текстуру по пикселям экрана, помните, что то, что вы указываете в качестве координат, - это не пиксели квадратора, а ребра, которые, в зависимости от проекции, могут совмещаться с краями пикселов экрана, а не с центрами, поэтому могут требуются другие текстурные координаты.

1 голос
/ 01 сентября 2011

Эта ссылка может быть полезной:

http://glprogramming.com/red/appendixg.html#name1

Посмотрите на «Если желательна точная двумерная растеризация ...».Этот совет OpenGl расскажет вам, как лучше всего настроить орто-матрицу для 2D.

Также вам может потребоваться отключить любой вид фильтрации текстур.

...