我正在使用OpenGL ES制作2D游戏。由于正交投影使2D元素更加容易处理,因此我选择了它。现在我想创建一个简单的3D效果,比如让精灵绕Y轴旋转(类似CoverFlow)。如果我理解得正确,这在正交投影中无法实现。是否可能在不干扰其他代码的情况下完成它?比如在帧中间切换投影,将当前帧图像视为背景,并在背景上方绘制三维物体?
是的,这是可以实现的:只需保存旧的投影矩阵,加载新的投影矩阵,并在完成后恢复旧的矩阵。
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渲染时,要小心深度缓冲区 - 你可能需要调整深度缓冲区设置,以确保物体正确绘制。