(4)glClearDepth()

原创 2016年08月30日 16:18:05
opengl里面的深度缓存 
在现实生活中,一个实心物体挡在另外一个实心物体的前面, 后面的那个物体有部分会被遮盖掉
那么opengl里面如何模拟这个情况呢? 每个物体的每个像素都有一个深度缓存的值(在0到1之间,可以想象成是z轴的距离)
如果glDepthFunc启用了GL_LESS(现实生活中的前景), 那么当前个物体挡住后个物体时, 由于前个物体深度值小(越靠近人的), 所以它就被画了出来, 后面的物体被挡住的像素就被忽略掉了。(当然你如果启用了GL_GREATER, 那么情况就反过来了)

这个时候再来说glClearDepth, 它给深度缓冲指定了一个初始值,缓冲中的每个像素的深度值都是这个, 比如1,这个时候你往里面画一个物体, 由于物体的每个像素的深度值都小于等于1, 所以整个物体都被显示了出来。 如果初始值指定为0, 物体的每个像素的深度值都大于等于0, 所以整个物体都不可见。 如果初始值指定为0.5, 那么物体就只有深度小于0.5的那部分才是可见的


glClearDepth(1.0);            // 1.0是最大深度([0.0,1.0])
glClear(GL_DEPTH_BUFFER_BIT);
glEnable(GL_DEPTH_TEST);    // 最好在display()中调用

 glColor3f(1.0, 0.0, 0.0);
    glBegin(GL_TRIANGLES);
    for(int i=0; i<3; i++) {
        int offset = i*3;
        glVertex3f(vertexArr1[offset], vertexArr1[offset+1], vertexArr1[offset+2]);
    }
    glEnd();

    glColor3f(0.0, 1.0, 0.0);
    glBegin(GL_TRIANGLES);
    for(int i=3; i<6; i++) {
        int offset = i*3;
        glVertex3f(vertexArr1[offset], vertexArr1[offset+1], vertexArr1[offset+2]);
    }
    glEnd();

     如果不使用glEnable(GL_DEPTH_TEST),则绘制的结果是绿色三角形在红色三角形之上;

这同时说明了openGL的绘制顺序与代码中的出现顺序相反。


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

glShadeModel,glClearDepth,glHint

http://blog.chinaunix.net/space.php?uid=11353969&do=blog&id=1741407 glShadeModel,glClearDepth (2011...

glClearColor、glClear、glColor、glShadeModel、glClearDepth、glDepthFunc

简述:OpenGL 支持两种颜色模式:一种是RGBA,一种是颜色索引模式。无论哪种颜色模式,计算机都必须为每一个像素保存一些数据。不同的是,RGBA模式中,数据直接代表了颜色;而颜色索引模式中,数据代...
  • hebbely
  • hebbely
  • 2017年04月10日 17:01
  • 925

JNI学习(4)(我是菜鸟)-JNI类型签名

所有内容为记录学习过程,不是大牛尽情谅解。所有分析都参考深入理解Android 卷一 先看一下动态注册中的代码 现在看processFile 方法 一直都没明白后面的那一长...

Pixhawk原生固件PX4之TAKEOFF的启动流程

Takeoff模式启动流程...

PCL点云特征描述与提取(4)

如何从一个深度图像(range image)中提取NARF特征 代码解析narf_feature_extraction.cpp #include #include #include #inc...

港科VINS-Mono系统学习(4) 里程计

vins是今年刚开源的vio系统,跑了数据集效果挺好的,所以看了paper和代码。 视频地址:https://www.youtube.com/watch?v=I4txdvGhT6I github:...

fabric源码解析4——配置系统

fabric源码解析4——配置系统fabric的配置系统是程序原始数据的来源之一,虽然简单却很重要。在阅读源码过程中对于具象化程序也很有帮助。在分析peer的具体交易工作之前,我们可以先分析一下fab...

log4j 不同的包(package)下的日志写入到不同的日志文件下

所需要的包:commons-logging-1.1.x.jar,log4j-1.2.x.jar(主要)两个jar包(放入项目bin目录下)及log4j.properties文件(放入到项目src根目录...

extjs4 grid 新增、删除、修改

删除与修改的操作,分两块进行。页面删除与后台删除。因此在页面上进行删除或修改后成功后,后台只传递一个SUCCESS标记,若后台同步成功,则在页面的store中执行删除或者修改。减少网络中的数据传输。 ...
  • dys1990
  • dys1990
  • 2012年04月21日 17:20
  • 29648

Log4j 日志配置示例详解

日志是应用软件中不可缺少的部分,Apache的开源项目Log4j是一个功能强大的日志组件,提供方便的日志记录,具体请参考Log4j文档指南。Log4j下载在apache网站,可以免费下载到Log4j最...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:(4)glClearDepth()
举报原因:
原因补充:

(最多只允许输入30个字)