У меня есть в основном двумерная игра на iPhone, и я пытаюсь настроить несколько фонов, которые прокручиваются на разных скоростях (известных как фоны параллакса).
Поэтому я подумал о том, чтобы просто прикрепить фон за передним планом, используя разные плоскости z-координаты, и просто сделать их больше, чем передний план (по размеру) для размещения, чтобы можно было прокручивать все это (просто на другом скорость).
И (насколько я знаю) я в основном реализовал это. Единственная проблема заключается в том, что он, кажется, полностью игнорирует любое значение z, которое я ему даю, или, скорее, просто обнуляет их все. Я вижу фон (до сих пор я тестировал только ОДИН фон, чтобы сделать его простым ... поэтому сейчас у меня есть только передний план, и я хочу прокрутить один фон с другой скоростью), но он прокручивает 1: 1 с моим передний план, поэтому он явно не выглядит правильно, и большая его часть обрезана (потому что она больше). И я пробовал различные z-значения для фона и различные ближние / дальние плоскости отсечения ... это всегда одинаково. Я, вероятно, просто делаю одну простую вещь неправильно, но я не могу понять это. Мне интересно, имеет ли это отношение ко мне, используя только 2 координаты в glVertexPointer для переднего плана? (Конечно, для фона я прохожу 3)
Я выложу код:
Это начальная настройка:
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrthof(-1.0f, 1.0f, -1.5f, 1.5f, -10.0f, 10.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glEnableClientState(GL_VERTEX_ARRAY);
//glEnableClientState(GL_COLOR_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
//transparency
glEnable (GL_BLEND);
glBlendFunc (GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
Немного о массиве float моего переднего плана ... оно чередуется. Для моего переднего плана это вершина х, вершина у, текстура х, текстура у, повтор. Все это прекрасно работает.
Это мой предварительный рендеринг:
glVertexPointer(2, GL_FLOAT, 4*sizeof(GLfloat), texes); <br>
glTexCoordPointer(2, GL_FLOAT, 4*sizeof(GLfloat), (GLvoid*)texes + 2*sizeof(GLfloat)); <br>
glDrawArrays(GL_TRIANGLES, 0, indexCount / 4);
Фоновый рендеринг:
То же самое упражнение здесь, за исключением того, что на этот раз идет вершина x, вершина y, вершина z, текстура x, текстура y, повтор. Обратите внимание на значение z на этот раз. Я удостоверился, что данные в этом массиве были правильными во время отладки (получая правильные значения z). И снова он обнаруживается ... он просто не уходит далеко, как следовало бы.
glVertexPointer(3, GL_FLOAT, 5*sizeof(GLfloat), b1Texes);
glTexCoordPointer(2, GL_FLOAT, 5*sizeof(GLfloat), (GLvoid*)b1Texes + 3*sizeof(GLfloat));
glDrawArrays(GL_TRIANGLES, 0, b1IndexCount / 5);
И чтобы переместить мою камеру, я просто делаю простой glTranslatef (x, y, 0.0f);
Я не понимаю, что я делаю неправильно, потому что это кажется самой основной трехмерной функцией, которую можно себе представить ... все дальше и меньше, и не движется так быстро, когда камера движется. Не тот случай для меня. Похоже, что это должно быть довольно просто и даже не зависеть от моей проекции и всего этого (хотя я даже пытался сделать glFrustum просто для удовольствия, но безуспешно). Пожалуйста, помогите, я чувствую, что это всего лишь одна глупость. Я опубликую больше кода при необходимости.