В свободное время я люблю поиграть с разработкой игр на iPhone с помощью OpenGL ES. Я собираю небольшую демонстрацию 2D-скроллера для развлечения, и я относительно новичок в OpenGL, и мне хотелось услышать мнение более опытных разработчиков по этому поводу.
Итак, вот мой вопрос: имеет ли смысл указывать вершины каждого 2D-элемента в пространстве модели, а затем переводить каждый элемент в его окончательное пространство просмотра каждый раз, когда отрисовывается кадр?
Например, скажем, у меня есть набор блоков (квадратов), которые составляют землю в моем боковом скроллере. Каждый квадрат определяется как:
const GLfloat squareVertices[] = {
-1.0, 1.0, -6.0, // Top left
-1.0, -1.0, -6.0, // Bottom left
1.0, -1.0, -6.0, // Bottom right
1.0, 1.0, -6.0 // Top right
}
Скажем, у меня есть 10 таких квадратов, которые мне нужно скомпоновать в качестве фона для следующего кадра. Должен ли я сделать что-то подобное для каждого квадрата, видимого в текущей сцене?
glPushMatrix();
{
glTranslatef(currentSquareX, currentSquareY, 0.0);
glVertexPointer(3, GL_FLOAT, 0, squareVertices);
glEnableClientState(GL_VERTEX_ARRAY);
// Do the drawing
}
glPopMatrix();
Мне кажется, что выполнение этого для каждого 2D-элемента в сцене, для каждого кадра становится немного напряженным, и я могу представить, что более умные люди, которые используют OpenGL гораздо чаще, чем я, могут иметь лучший способ сделать это.
При всем сказанном я ожидаю услышать, что мне следует профилировать код и посмотреть, где могут быть узкие места: этим людям я говорю: я еще не написал ни одного этого кода, я просто в процессе обдумывать это, чтобы, когда я все-таки собираюсь писать, все шло гладко.
Что касается профилирования и оптимизации, я действительно не пытаюсь преждевременно оптимизировать здесь, я просто пытаюсь понять, как можно настроить 2D-сцену и отрендерить ее. Как я уже сказал, я относительно новичок в OpenGL и просто пытаюсь понять, как все это делается. Если у кого-то есть предложения по тому, как это сделать лучше, я хотел бы услышать ваши мысли.
Имейте в виду, что меня не интересует 3D, пока только 2D. Спасибо!