zoukankan      html  css  js  c++  java
  • 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;
    
    }
    
  • 相关阅读:
    使用IDEA运行Spark程序
    scala for spark
    Spark源码编译
    5分钟弄懂Docker!
    开源HTML5 APP开发神器CanTK发布
    scala学习笔记5 (隐式转化/参数/类)
    scala学习笔记4(apply方法)
    scala学习笔记3(trait)
    做嵌入式开发时将标准输出输入到一个文件的一种方法
    使用O_APPEND标志打开文件对文件进行lseek后进行读写的问题
  • 原文地址:https://www.cnblogs.com/xin-lover/p/8734577.html
Copyright © 2011-2022 走看看