Я пытаюсь нарисовать базовую 2-мерную наземную сетку, составленную из меньших плиток, из текстурного атласа (обратите внимание на прозрачную границу в 1 пиксель):
![enter image description here](https://i.stack.imgur.com/C3nVw.png)
Я рендерингплитки в виде квадратов текстуры с использованием следующего кода:
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, m_texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glVertexPointer(2, GL_SHORT, 0, &m_coords[0]);
glTexCoordPointer(2, GL_FLOAT, 0, &m_uvs[0]);
glDrawArrays(GL_TRIANGLES, 0, m_coords.size() / 2);
glBindTexture(GL_TEXTURE_2D, 0);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisable(GL_TEXTURE_2D);
Позиции, очевидно, являются целочисленными координатами.Координаты UV для углов рассчитываются следующим образом:
u0 = float(x) / float(texWidth);
v0 = float(y) / float(texHeight);
u1 = float(x+w) / float(texWidth);
v1 = float(y+h) / float(texHeight);
Где w и h - размер плитки без отступов.
Отлично смотрится, когда преобразование вида модели привязано кцелочисленная позиция (справа), но когда она начинает двигаться, я получаю черные вещи между плитками (слева):
![enter image description here](https://i.stack.imgur.com/syQ57.png)
Из того, что я понимаю, я должен сместить координаты UV споловина текселя, чтобы заставить его работать, но если я изменю расчеты ультрафиолета на:
u0 = float(x+0.5f) / float(texWidth);
v0 = float(y+0.5f) / float(texHeight);
u1 = float(x+w-0.5f) / float(texWidth);
v1 = float(y+h-0.5f) / float(texHeight);
Это все равно не работает.Это правильный способ сделать это?Нужно ли смешивать, чтобы это работало?Если я смещу плитки, чтобы убедиться, что они привязаны к пиксельной сетке, это работает, но это заставляет их привязываться при медленном движении.Как люди обычно решают это?
РЕДАКТИРОВАТЬ
Я должен был сказать, что это на iphone.