Рисование смежных текстурных прямоугольников в OpenGL - PullRequest
1 голос
/ 10 мая 2011

Я рисую несколько текстурных прямоугольников, которые расположены друг над другом, используя следующий код:

glBegin(GL_QUADS);
glTexCoord2f(0.0, 1.0); glVertex3f(x, y, 0);
glTexCoord2f(0.0, 0.0); glVertex3f(x, y + dy, 0);
glTexCoord2f(1.0, 0.0); glVertex3f(x + dx, y + dy, 0);
glTexCoord2f(1.0, 1.0); glVertex3f(x + dx, y, 0);
glEnd();

Это корректно отображается в полном размере, но когда я изменяю его размер на glScale, между некоторыми прямоугольниками появляются пробелы в один пиксель.

Однако, если я удаляю карту текстуры, прямоугольники всегда правильно прилегают друг к другу.

Что не так, и как я могу это исправить?

Ответы [ 3 ]

1 голос
/ 10 мая 2011

Прежде всего, убедитесь, что они действительно пробелы , а не текстурные артефакты, не используя альфа-канал (если вы были) и выбирая цвет фона, который выделяется, как больной большой палец. 1003 *

Даже если вы указали текстурирование как основную причину, гораздо более вероятный виновник - ошибки округления в координатах вершины. Растеризация соседних треугольников гарантированно будет без пропусков, если используемые координаты вершины соответствуют 100%. Вместо того, чтобы вычислять их на лету (x + dx, y + dy), почему бы не сохранить их в массиве и убедиться, что вы повторно используете те же координаты?

1 голос
/ 10 мая 2011

Я идиот.Изображения, которые я использовал, на самом деле имели прозрачный ряд пикселей вдоль верха и низа.

Первоначальный «полноразмерный» рендеринг уже изменял размер текстуры, и это была чистая случайность, что изменение размеров артефактов вызывало прозрачностьв этом случае строки не должны отображаться.

Затем, когда я снова изменил размер всей партии с помощью glScale, некоторые из артефактов, должно быть, исчезли, и прозрачные пиксели появились в виде пробелов.

1 голос
/ 10 мая 2011

Как выглядит текстура?Возможно, вам придется использовать другой режим зажима, в зависимости от содержимого текстуры.

...