Я пишу игровой движок для iPhone на основе плитки, и он работает, в общем, помимо следующего сбоя. В принципе, камера всегда будет держать плеер в центре экрана, и он перемещается, чтобы правильно следить за игроком и правильно рисует, когда он неподвижен. Однако в то время как игрок двигаются, плитки на поверхности игрок ходит по глюку, как показано:Сбой при перемещении камеры в OpenGL
http://img41.imageshack.us/img41/9422/movingy.png
По сравнению с неподвижным (правильным):
http://img689.imageshack.us/img689/7026/still.png
Кто-нибудь есть любая идея, почему это может быть?
Спасибо за ответы. Ошибка с плавающей запятой была моей первой мыслью, и я попытался немного увеличить размер плитки, но это не помогло. Изменение glClearColor на красный все еще оставляет черные зазоры, поэтому, возможно, это не ошибка с плавающей запятой. Поскольку плитки вообще будут использовать разные текстуры, я не знаю, можно ли использовать вершинные массивы (я всегда думал, что одна и та же текстура должна быть применена ко всему массиву, исправьте меня, если я ошибаюсь), и я не думаю, что VBO доступен в OpenGL ES. Настройка фильтрации для ближайшего соседа улучшила ситуацию, но сбой все равно происходит каждые десять кадров или около того, а результат pixelly означает, что это решение не является жизнеспособным в любом случае.
Основное различие между тем, что я делаю сейчас, и тем, что я делал в прошлом, заключается в том, что на этот раз я перемещаю камеру, а не неподвижные объекты в мире (т. Е. Плитки, игрок все еще переехал). Код, я использую для перемещения камеры является:
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);
}
Есть проблема с делать вещи таким образом, и если да, есть ли решение?
Просто хотел убедиться, что вы понимаете, что GL_NEAREST применяется к параметрам фильтра, но GL_CLAMP_TO_EDGE применяется к параметрам текстурной упаковки, поэтому вы все равно можете попробовать. Не обращайте внимания на это, если вы уже это пробовали. –
Я должен был упомянуть, я уже пробовал. –