3D-эффекты в 2D-игре с использованием OpenGL
-
22-07-2019 - |
Вопрос
Я работаю над 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 рендерингом, чтобы все было нарисовано правильно.