Я пишу игровой движок на основе плитки для iPhone, и он работает в целом, за исключением следующего глюка. По сути, камера всегда будет держать игрока в центре экрана, и она будет двигаться, чтобы следовать за игроком правильно и правильно рисовать все в неподвижном состоянии. Однако, пока игрок движется, плитки поверхности, на которой он ходит, сбиваются, как показано на рисунке:
http://img41.imageshack.us/img41/9422/movingy.png
По сравнению со стационарным (правильно):
http://img689.imageshack.us/img689/7026/still.png
Кто-нибудь знает, почему это может быть?
Спасибо за ответы до сих пор. Ошибка с плавающей точкой была моей первой мыслью, и я попытался немного увеличить размер тайлов, но это не помогло. Изменение glClearColor на красный все еще оставляет черные пробелы, поэтому, возможно, это не ошибка с плавающей запятой. Поскольку для плиток в общем случае будут использоваться разные текстуры, я не знаю, можно ли использовать вершинные массивы (я всегда думал, что одну и ту же текстуру нужно было применить ко всему массиву, поправьте меня, если я ошибаюсь), и я не думаю, что VBO доступно в OpenGL ES. Настройка фильтрации для ближайшего соседа улучшила ситуацию, но сбой по-прежнему происходит каждые десять кадров или около того, и пиксельный результат означает, что это решение в любом случае нежизнеспособно.
Основное различие между тем, что я делаю сейчас, и тем, что я делал в прошлом, заключается в том, что в этот раз я двигаю камеру, а не неподвижные объекты в мире (т. Е. Плитки, игрок все еще перемещается ). Код, который я использую для перемещения камеры:
void Camera::CentreAtPoint( GLfloat x, GLfloat y )
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrthof(x - size.x / 2.0f, x + size.x / 2.0f, y + size.y / 2.0f, y - size.y / 2.0f, 0.01f, 5.0f);
glMatrixMode(GL_MODELVIEW);
}
Есть ли проблема с такими действиями, и если да, то есть ли решение?