У меня проблемы с использованием текстур в OpenGl (только 2D)
Я хочу показать уровень (размер 15х15), и каждое поле может иметь различное значение / рисунок.
У меня есть около 100 различных типов полей, и в соответствии с дизайном уровней я должен отображать разные изображения для каждого типа.
Если я использую один tga-Image для каждого возможного поля (100 файлов), все работает нормально,
но теперь я собираю все изображения в один файл и, в зависимости от типа поля, я всегда показываю другую часть изображения.
Проблема: иногда тонкие линии на изображениях не отображаются и между различными спрайтами часто есть черные или серые линии, которые делают всю графику безобразной.
Есть ли способ легко решить эту проблему?
(Может быть, мне нужно загрузить tga-изображение в один GLuint, а затем разделить его на 100 различных GLunint? Или есть настройка для улучшения рендеринга? Или мне нужно изменить разрешение самого файла tga-image?)
Вот часть моего файла изображения, каждый элемент имеет разрешение 220×220 пикселей -> вся картинка: 2200×2200 пикселей
И это OpenGl-вывод:
Я действительно не хочу иметь сотни изображений. Тем более, что загрузка всех этих файлов занимает много времени, и я уверен, что есть решение
РЕДАКТИРОВАТЬ:
Я использую следующие настройки:
// Specify filtering and edge actions
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP);
EDIT2:
Теперь я изменил GL_LINEAR на GL_NEAREST и добавил половину текселя в текстурных координатах, между изображениями больше нет линий 🙂
Но у меня все еще есть другая проблема:
Небольшие элементы (линии) на изображении отображаются неправильно.
Вот как это должно выглядеть:
«Имейте в виду, что OpenGL пробует текстуры в текстовых центрах»
Посмотрите на ответ здесь:
Слегка выключены координаты текстуры OpenGL ES
Вам нужно добавить отступающие пиксели к вашим текстурам, чтобы избежать линий по их краям. Таким образом, когда OpenGL выбирает пиксели из текстуры для рисования (включая уровни mipmap, если вы отображаете их в меньшем размере, чем они есть в ваших файлах), не используются пиксели неправильно окрашенных.