Координаты выборки текстур для визуализации спрайта

Допустим, у нас есть текстура (в данном случае 8x8 пикселей), которую мы хотим использовать в качестве листа спрайта. Одно из подизображений (спрайт) - это субрегион 4x3 внутри текстуры, как на этом изображении:

enter image description here

(Показаны нормализованные текстурные координаты четырех углов)

Теперь, в основном, есть два способа присвоить координаты текстуры кваду размером 4px x 3px так, чтобы он фактически стал искомым спрайтом; Первым и самым простым является выбор текстуры в углах субрегиона:

enter image description here

// Texture coordinates

GLfloat sMin = (xIndex0                  ) / imageWidth;
GLfloat sMax = (xIndex0 + subregionWidth ) / imageWidth;
GLfloat tMin = (yIndex0                  ) / imageHeight;
GLfloat tMax = (yIndex0 + subregionHeight) / imageHeight;

Хотя при первой реализации этого метода, ок. В 2010 году я понял, что спрайты выглядят слегка «искаженными». После небольшого поиска я наткнулся на сообщение на форумах cocos2d, объясняющее, что «правильный путь» Пример текстуры при рендеринге спрайта это:

enter image description here

// Texture coordinates

GLfloat sMin = (xIndex0                   + 0.5) / imageWidth;
GLfloat sMax = (xIndex0 + subregionWidth  - 0.5) / imageWidth;
GLfloat tMin = (yIndex0                   + 0.5) / imageHeight;
GLfloat tMax = (yIndex0 + subregionHeight - 0.5) / imageHeight;

... и после исправления моего кода я был на некоторое время счастлив. Но где-то на этом пути, и я полагаю, что это связано с внедрением iOS 5, я начал чувствовать, что мои спрайты выглядели не очень хорошо. После некоторого тестирования я снова переключился на «синий». метод (второе изображение), и теперь они, кажется, выглядят хорошо, ноnot always.

Я схожу с ума, или что-то изменилось с iOS 5, связанным с наложением текстур GL ES? Возможно, я делаю что-то еще не так? (например, координаты положения вершины немного не совпадают? Неправильные параметры настройки текстуры?) Но моя база кода не изменилась, поэтому, возможно, я делаю что-то не так с самого начала ...?

Я имею в виду, по крайней мере, с моим кодом, этоfeels как будто "красный" Раньше метод был правильным, но теперь «синий» метод дает лучшие результаты.

Прямо сейчас моя игра выглядит нормально, но я чувствую, что что-то наполовину неправильно, что я должен исправить рано или поздно ...

Есть идеи / опыт / мнения?

ADDENDUM

Чтобы визуализировать спрайт выше, я бы нарисовал квадратик размером 4х3 в ортогональной проекции, где каждой вершине были назначены координаты текстуры, подразумеваемые в коде, упомянутом ранее, например:

// Top-Left Vertex
{ sMin, tMin };

// Bottom-Left Vertex
{ sMin, tMax };

// Top-Right Vertex
{ sMax, tMin };

// Bottom-right Vertex
{ sMax, tMax };

Исходный четырехугольник создается от (-0,5, -0,5) до (+0,5, +0,5); то есть это единичный квадрат в центре экрана, затем масштабированный до размера субрегиона (в данном случае, 4x3), а его центр расположен в целочисленных (x, y) координатах. Я чувствую, что это тоже чем-то связано, особенно когда ширина, высота или оба не равны?

ADDENDUM 2

Я также нашел эту статью, но я все еще пытаюсь собрать ее вместе (она здесь 4:00 утра) http://www.mindcontrol.org/~hplus/graphics/opengl-pixel-perfect.html

Ответы на вопрос(1)

Ваш ответ на вопрос