#iphone #opengl-es
Вопрос:
Я создаю простую 2D — игру для iPhone. Он основан на аварийной посадке. таким образом, это в основном фоновая текстура и несколько перемещающихся прямоугольных текстур.
У меня есть эта странная небольшая проблема с графикой: некоторые из небольших 2d-элементов (можно предположить, что это просто прямоугольники), перемещающиеся вокруг, получают поверх них маленькую мигающую черную полосу (текстура фона почти полностью белая, поэтому небольшая полоса заметна).
Текстуры, которые я использую, небольшие (~1 Кб) png.
Кто-нибудь еще сталкивался с этим? Является ли это распространенной проблемой OpenGL?
Кстати, это происходит как на симуляторе, так и на самом устройстве.
Комментарии:
1. Видите ли вы проблему как в симуляторе, так и на реальном устройстве?
2. Это происходит как на симуляторе, так и на реальном устройстве.
Ответ №1:
У вас есть такая штука, как эта маленькая черная полоска в ваших текстурах?
Я сталкивался с подобными проблемами, когда делал что-то не так. Вот небольшой контрольный список:
- Вы сделали mip-сопоставление своей текстуры или нет, и проверьте, какие у нее параметры.
- глТекСпараметры. (WRAP_S, WRAP_T, MAG_FILTER, MIN_FILTER…)
- размеры текстуры. (Если не допускается использование двух текстур, это может вызвать графические сбои, в зависимости от того, как вы загружаете свои текстуры)
- Вы рисуете эту мигающую полосу поверх своих прямоугольников?
- Есть ли что-то, что вызывает черную полосу в вашей текстуре.
- Выравнивание кадров анимации.
- Смешивание и альфа-смешивание.
Если что-то в списке кажется вам расплывчатым, полезно почитать о них.
Я также делаю хорошее предположение: Я полагаю, что вы не переносите свои текстуры в любом направлении и что анимационные кадры немного смещены, так что ваше приложение имеет немного неправильные координаты/высоту текстуры в квадрате, который вы рисуете.
Я надеюсь, что мои советы имеют смысл. У меня есть только опыт работы с обычным opengl, а не с графическими конвейерами OpenGL, которые были обрезаны, чтобы сделать его более компактным, чистым и элегантным.
Ответ №2:
Поскольку это 2D-игра, содержатся ли эти маленькие прямоугольные спрайты в одном и том же листе текстур? Другим возможным виновником может быть фильтрация текстур.
Если вы пытаетесь манипулировать координатами текстуры, чтобы нарисовать подобласть вашей текстуры, вы можете проверить, рисуете ли вы спрайт в соотношении больше 1:1. Если у вас включена линейная фильтрация текстур (в отличие от ближайшей), OpenGL может захватить несколько пикселей из соседнего спрайта, если вы попытаетесь масштабировать спрайт больше 1:1.
В этом случае вы можете попробовать разместить буфер размером 1 пиксель на листе текстуры между спрайтами.