天天看点

OpenGL glut深度测试不起作用?

为什么深度测试没有起作用

OpenGL中使用glEnable(GL_DEPTH_TEST)后深度测试没有起作用?

代码如下:

void Display()
{
      glEnable(GL_DEPTH_TEST);
      //do rendering
}
int main(int argc,char **argv)
{
     glutInit(&argc,argv);//初始化
     glutInitDisplayMode(GLUT_RGBA);//设置初始显示模式
     glutInitWindowSize(640, 480);//设置窗口大小
     glutInitWindowPosition(100, 100);//设置窗口初始位置
     glutCreateWindow("Demo");//窗口标题
     glutDisplayFunc(Display);//绘图时调用Display();
     glutMainLoop();//主循环

     return 0;

}
           

这里的问题是由于深度缓冲没有创建。glut库在兼容模式(GL_COMPATIBILITY_PROFILE)下displaymode默认值为GL_INDEX,GL_SINGLE,GL_DEPTH,而我使用的是核心模式(GL_CORE_PROFILE),在指定dispalymode的时候使用的是:

glutInitDisplayMode(GL_RGB);只指定了颜色现实模式。如果向要创建深度缓冲,需要再指定GL_DEPTH:

glutInitDisplayMode(GL_RGB|GL_DEPTH);
           

glutInitDisplayMode除了指定窗口颜色显示模式和深度缓冲之外,还可以指定模板缓冲(GL_STENCIL)及其它的一些参数(参照官网)。

修改后代码如下:

int main(int argc,char **argv)
{
     glutInit(&argc,argv);//初始化
     glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);//设置初始显示模式
     glutInitWindowSize(640, 480);//设置窗口大小
     glutInitWindowPosition(100, 100);//设置窗口初始位置
     glutCreateWindow("Demo");//窗口标题
     glutDisplayFunc(Display);//绘图时调用Display();
     glutMainLoop();//主循环

     return 0;

}
           

继续阅读