Странное поведение OpenGL ES в приложении для iPhone - PullRequest
3 голосов
/ 10 октября 2008

Я делаю простую 2D-игру для iPhone. Он основан на CrashLanding. так что это в основном фоновая текстура и несколько прямоугольных текстур, движущихся вокруг.

У меня странная небольшая проблема с графикой: некоторые маленькие 2d элементы (могут принимать только прямоугольники), перемещающиеся вокруг, получают эту маленькую мигающую черную полосу поверх них (фоновая текстура почти полностью белая, поэтому маленькая полоска заметна) .

Текстуры, которые я использую, являются маленькими (~ 1Kb) pngs.

Кто-нибудь еще сталкивался с этим? Это распространенная проблема openGL?

Кстати, это происходит как на симуляторе, так и на реальном устройстве.

Ответы [ 2 ]

5 голосов
/ 14 октября 2008

У вас есть что-то вроде этой маленькой черной полоски в ваших текстурах?

Я столкнулся с подобными проблемами, когда сделал что-то не так. Вот небольшой контрольный список:

  • Имеете ли вы mipmapped вашу текстуру или нет, и проверьте, какие параметры она имеет.
  • glTexParameters. (WRAP_S, WRAP_T, MAG_FILTER, MIN_FILTER ...)
  • Размеры текстуры. (Если разрешены не-степени двух текстур, это может вызвать графические сбои, в зависимости от того, как вы загружаете свои текстуры)
  • Вы рисуете эту мигающую полосу поверх ваших прямоугольников?
  • Есть ли что-то, что вызывает черную полосу в вашей текстуре.
  • Выравнивание кадров анимации.
  • Смешивание и альфа-смешивание.

Если что-то в списке для вас неопределенное, полезно прочитать о них.

Я также делаю правильное предположение: я считаю, что вы не оборачиваете свои текстуры в любом направлении, и что кадры анимации немного смещены, так что ваше приложение имеет немного неправильные координаты / высоту текстуры в квадрате, которым вы являетесь. рисунок.

Надеюсь, мои советы имеют смысл. У меня есть опыт работы только с обычным opengl, а не с OpenGL ES, графические конвейеры которого были сокращены, чтобы сделать его более компактным, чистым и элегантным.

0 голосов
/ 18 октября 2008

Поскольку это 2D-игра, находятся ли эти маленькие прямоугольные спрайты в одном листе текстуры? Другим возможным виновником может быть фильтрация текстур.

Если вы пытаетесь манипулировать координатами текстуры, чтобы нарисовать субрегион вашей текстуры, вы можете проверить, рисуете ли вы спрайт с соотношением больше 1: 1. Если у вас включена линейная фильтрация текстур (в отличие от ближайшего), OpenGL может получить несколько пикселей от соседнего спрайта, если вы попытаетесь увеличить спрайт больше 1: 1.

Если это так, вы можете попытаться поместить буфер на 1 пиксель в свой лист текстуры между спрайтами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...