3D-эффекты в 2D-игре с использованием OpenGL - PullRequest
4 голосов
/ 02 декабря 2008

Я работаю над 2D-игрой с использованием OpenGL ES. Я использую ортографическую проекцию, поскольку она упрощает работу с 2D. Теперь я хотел бы создать простой 3D-эффект, скажем, вращать спрайт вокруг оси Y (что-то вроде потока покрытия). Если я правильно понимаю вещи, это невозможно сделать в ортопедической проекции. Возможно ли сделать это, не испортив остальной код? Как переключить проекцию в середине кадра, рассматривать текущее изображение кадра как фон и рисовать 3D-объекты над фоном?

1 Ответ

6 голосов
/ 02 декабря 2008

Да, это возможно: просто сохраните старую проекционную матрицу, загрузите новую и восстановите старую, когда закончите.

void DrawScene()
{
  Draw2DStuff();

  glMatrixMode(GL_PROJECTION);
  glPushMatrix();  // Save old projection matrix
  gluPerspective(...);  // Load new projection matrix

  Draw3DStuff();

  glMatrixMode(GL_PROJECTION);
  glPopMatrix();  // Restore old projection matrix
}

Просто будьте осторожны с буфером глубины - вам может понадобиться поэкспериментировать с настройками буфера глубины при переключении между 2D и 3D рендерингом, чтобы все было нарисовано правильно.

...