У меня в основном 2d-игра на 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);
Немного о моем массиве с плавающей запятой на переднем плане ... он чередуется. Для моего переднего плана это вершина x, вершина y, текстура x, текстура y, повтор. Все это прекрасно работает.
Это мой FOREGROUND-рендеринг:
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 просто для удовольствия, но безуспешно). Пожалуйста, помогите, я чувствую, что это всего лишь одна тупица. При необходимости выложу еще код.