Вопрос

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

Это было полезно?

Решение

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

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 рендерингом, чтобы все было нарисовано правильно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top