cocos2D-X源码分析之从cocos2D-X学习OpenGL(14)----深度测试

原创 2016年06月13日 10:29:12

     深度测试类似于颜色缓冲(颜色缓冲存储片元颜色),深度缓冲是由窗口系统自动创建的,它储存着16、24或32位的浮点数的深度值。在大多数系统中,是24位的。

     当深度测试开启时,openGL会用每个片元的深度值和深度缓冲的值对比,执行一次深度测试,如果测试通过,深度缓冲就会用深度值更新,如果深度测试失败,则片元就被抛弃。深度测试是在像素着色器运行后,模板测试完成后,在屏幕空间中完成的。屏幕空间坐标与openGL的glViewport函数定义的视口相关,在像素着色器中,可以用内建变量gl_FragCoord来获取,它的xy元素代表屏幕坐标,而z元素是当前片元的深度值,就是用来和深度缓冲对比的那个值

      深度测试默认是关闭的,你需要调用如下函数开启它

glEnable(GL_DEPTH_TEST);
      之前我们已经说过,深度测试如果成功,会保留片元并且更新深度缓冲,但是有时候你并不希望更新缓冲,openGL中允许我们关闭深度缓冲
glDepthMask(_oldDepthWriteValue);
      注意,这个函数只有在深度测试开启时才有效

glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT);
      每一帧的时候都要清理这三种缓冲(当被使用的情况下),否则会和上一帧的数据纠缠在一起

      类似于模板缓冲,深度缓冲也允许我们用深度测试方程灵活的改变测试方式

glDepthFunc(GL_LEQUAL);
      其中可用的参数和意义见下表:


       由于像素着色器开销很大,如今大多数gpu都支持一个硬件功能-前置深度测试,它可以在像素着色器运行之前运行深度测试,但是有个前提,不要在像素着色器中对深度值进行任何写操作。

       下一篇介绍帧缓冲

       能力不足,水平有限,如有错误,欢迎指出。




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

cocos2D-X源码分析之从cocos2D-X学习OpenGL(6)---cocos内置着色器

上一篇我们介绍了cocos2d-x绘制基本图形的基本流程,我们还留下了一个着色器的部分没有讲,本篇内容将从openGL的渲染流程讲起,介绍cocos2d-x中的着色器,openGL的渲染流程如图所示:...
  • bill_man
  • bill_man
  • 2016年06月02日 18:22
  • 6736

cocos2D-X源码分析之从cocos2D-X学习OpenGL(4)---混合

之前在项目中就使用过混合,但是研究的不深入,近期美术的一个需求让我下决心重新深入的研究了一下混合以及它在cocos2d-x中的使用,在这里分享给大家。...
  • bill_man
  • bill_man
  • 2015年12月30日 20:12
  • 4018

探cocos2dx裁剪结点、拖尾效果、进度效果、渲染纹理实现(misc_nodes),源码版本(2.2.3)

模块包含4个功能,可以实现任意形状裁剪的CCClipingNode、具有拖尾效果的CCMotionStreak、具有2种进度展示效果的CCProgressTimer、能够渲染到纹理而不是帧缓存的CCR...
  • Crazy_Number
  • Crazy_Number
  • 2014年08月30日 16:16
  • 2404

cocos2d-x中Zorder和VertexZ属性的区别

1:zOrder 表示节点相对其“兄弟”节点(拥有共同的父节点)Z顺序值。对于像CCSprite这样有视觉呈现的节点,该参数决定了节点的绘制顺序,拥有最小Z值的节点最先被绘制。如果多个节点拥有相同Z值...
  • wonengxing
  • wonengxing
  • 2014年06月22日 17:08
  • 3490

cocos2D-X源码分析之从cocos2D-X学习OpenGL(1)----cocos2D-X渲染结构

cocos2D-X 3.0渲染结构代码讲解,也是cocos2D-X源码讲解系列文章和从cocos2D-X学习OpenGL系列文章的开始...
  • bill_man
  • bill_man
  • 2014年06月29日 22:17
  • 12944

cocos2d-x源码剖析之整体框架

刚阅读完了cocos2d-x的大部分源码,感觉受益匪浅,cocos2d-x的代码并不复杂,可读性很强,并且其中一部分精华的部分也可以运用到工作中去,相得益彰。现在看来,阅读源代码的最好方式是top-d...
  • zhanglei8893
  • zhanglei8893
  • 2013年08月24日 20:46
  • 5600

Cocos2d-x 源码分析 : Scheduler(定时器) 源码分析

1.Scheduler与Timer的关系相当DataManager与Data的关系。 2.Scheduler的两种定时模式,一种是customer selector模式,一种是update 模式。 ...
  • u011225840
  • u011225840
  • 2014年06月18日 17:14
  • 1586

【cocos2d-x 源码解析】事件系统

事件是一个“数据体”,由事件类型和携带的数据组成。事件监听器是“处理事件的人”,其存储了相应事件的回调函数,当事件触发时,这些回调函数就会被调用。事件派发器是一个“事件管理者”,它有两个作用,注册事件...
  • xingxinmanong
  • xingxinmanong
  • 2018年01月18日 11:46
  • 46

cocos2d-x:参考案例源码解析之一:Cocos2dx各个文件说明

本人比较懒,文笔也不怎地,况且网络上有很多不错的资源,所以热衷于转载。不说废话,该文章转载于:http://blog.csdn.net/leoncoder/article/details/125874...
  • afei198409
  • afei198409
  • 2013年11月07日 15:31
  • 2510

基于Cocos2d-x学习OpenGL ES 2.0系列——编写自己的shader(2)

在上篇文章中,我给大家介绍了如何在Cocos2d-x里面绘制一个三角形,当时我们使用的是Cocos2d-x引擎自带的shader和一些辅助函数。在本文中,我将演示一下如何编写自己的shader,同时,...
  • czh3642210
  • czh3642210
  • 2017年07月17日 09:21
  • 304
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:cocos2D-X源码分析之从cocos2D-X学习OpenGL(14)----深度测试
举报原因:
原因补充:

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