我正在使用OpenGL ES开发2D游戏。我正在使用正交投影,因为它可以简化2D内容。现在,我想创建一个简单的3D效果,例如绕Y轴旋转精灵(类似于Cover Flow)。如果我理解正确,则无法在正射投影中完成。是否可以做到而又不会弄乱其余的代码?就像在帧中间切换投影一样,将当前帧图像当作背景,并在背景上方绘制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渲染之间切换时,您可能需要使用深度缓冲区设置,以便正确绘制事物。

07-26 09:21