zoukankan      html  css  js  c++  java
  • 【OpenGL】GL_DEPTH_TEST深度测试问题

    记录一个深度测试的问题

    在实现一个简单的OpenGL程序时,遇到了一个问题,深度测试总是有问题,无法正常显示,如下

        

    正常情况为

      

    通过调试发现屏幕空间中的所有深度值均为1。

    OpenGL代码如下:

    void initOpenGL()
    {
        glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
        glClearDepth(1.0f);
    
        glEnable(GL_DEPTH_TEST);
        glDepthFunc(GL_LEQUAL);
    
        vmath::mat4 projectionMatrix = vmath::perspective(60, float(width) / float(heigh), 0.0, 100);
        mvp.setProjection(projectionMatrix);
        mvp.setViewTranslate(0.0f, 0.0f, -3.0f);
    }
    
    void renderScence()
    {
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    
        ... ...
    
        glutSwapBuffers();
    }
     

      代码并无明显问题,通过查找相关资料,最后发现是投影矩阵的问题,问题的根源是perspective的第三个参数是透视投影的近平面,近平面的值要始终是正数

      将  vmath::mat4 projectionMatrix = vmath::perspective(60, float(width) / float(heigh), 0.0, 100);

      改为 vmath::mat4 projectionMatrix = vmath::perspective(60, float(width) / float(heigh), 0.1, 100);

    程序运行正确。

    深度图如下

    相关内容可以查看透视投影的推导过程,

    如下所示,透视投影假设人眼位置为0,近平面位置大于0,

      

      图出自OpenGL编程指南8

     
     
     
     
     
  • 相关阅读:
    地址栏访问Action,后来方法执行两次
    转:Android中的Selector的用法
    转:android 自定义RadioButton样式
    Android中@id与@+id区别
    INSTALL_PARSE_FAILED_MANIFEST_MALFORMED 错误
    Supervisor
    mysql 赋予权限连接
    定时任务
    git 提交代码五部曲
    Mysql 之事物
  • 原文地址:https://www.cnblogs.com/esCharacter/p/9024580.html
Copyright © 2011-2022 走看看