Я пытался рисовать растровые изображения с точностью до пикселя, используя квадроциклы в OpenGL... и, к моему удивлению, отсутствовал очень важный ряд пикселей: (зеленый - нормально, красный - плохо)
Размеры четырехугольников были 30x30 пикселей с красным 2x2 в верхнем левом углу.
- Может кто-нибудь объяснить, что происходит?
- Как OpenGL решает, куда поместить пиксели?
- Какую коррекцию выбрать?
Текстура использует GL_NEAREST.
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
Я не использую glViewport и glOrtho. Вместо этого я отправляю шейдерам размеры экрана через униформы:
uniform float cw;
uniform float ch;
...
gl_Position = vec4( -1.0f + 2.0f*(in_pos.x + in_offset.x)/cw,
1.0f - 2.0f*(in_pos.y + in_offset.y)/ch,
0.0f, 1.0f);
Но это не похоже на источник проблемы, потому что, когда я добавляю (0.5,0.5) в шейдер (эквивалентно третьему случаю), проблема исчезает...
Хорошо, теперь я понимаю, что третий вариант тоже не работает: