cocos2D-X源码分析之从cocos2D-X学习OpenGL(13)----模板测试

原创 2016年06月12日 10:54:03

     像素着色器调用完成后。模板测试就开始了,它可以丢弃片元,模板缓冲在渲染时获得有意思的效果。

     模板缓冲中一个模板值有8位大小,每个窗口都会创建一个默认的模板缓冲,它可以通过数据控制屏幕显示,从而形成了显示裁剪的效果,如图所示。


glEnable(GL_STENCIL_TEST);
       首先需要调用上面函数开启模板测试,然后进行模板测试的操作

       我们曾经介绍过cocos2d-x的裁剪节点(文章地址:http://blog.csdn.net/bill_man/article/details/8498424),这种节点在2d游戏中经常应用,比如卡牌游戏的卡牌展示等等,这个类就是用模板测试完成的,我们后续会介绍关于模板测试的函数

glStencilMask(mask_layer);
        glStencilMask函数允许我们给模板值设置一个位遮罩,它与模板值进行And操作决定缓冲是否可写。

glStencilFunc(GL_NEVER, mask_layer, mask_layer);
         模板方程决定何时模板测试通过或失败,它有三个参数,第一个参数是选择关系符号,可用的参数有:

       它和深度缓冲的方程用的值类似(深度缓冲会在后面介绍);第二个参数是指定模板测试的引用值。模板缓冲的内容会与这个值对比,第三个参数是指定一个遮罩,在模板测试对比引用值和储存的模板值前,对他们进行And参数,初始设置为一,glStencilFunc描述了openGL对模板缓冲做什么,我们需要另外一个函数gllStencilOp函数告诉我们如何更新缓冲

glStencilOp(!_inverted ? GL_ZERO : GL_REPLACE, GL_KEEP, GL_KEEP);
       第一个参数设置如果模板测试失败将采取的动作,第二个参数设置如果模板测试用过,但是深度测试失败时采取的动作,第三个参数是如果模板测试和深度测试都通过将采取的动作,每个选项可以使用如下的动作:


      使用glStencilFunc和gllStencilOp,就可以指定在什么时候以及如何更新模板缓冲,并且指定何时让模板测试通过或不通过

      通过模板测试,我们可以实现图片裁剪效果,需要注意的是在一个裁剪节点上不能再用另外一个裁剪节点,否则会产生错误的效果。

      

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




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

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
  • 12800

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

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

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

在上篇文章中,我给大家介绍了如何在Cocos2d-x里面绘制一个三角形,当时我们使用的是Cocos2d-x引擎自带的shader和一些辅助函数。在本文中,我将演示一下如何编写自己的shader,同时,...
  • czh3642210
  • czh3642210
  • 2017年07月17日 09:21
  • 284

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

深度测试类似于颜色缓冲(颜色缓冲存储片元颜色),深度缓冲是由窗口系统自动创建的,它储存着16、24或32位的浮点数的深度值。在大多数系统中,是24位的。     当深度测试开启时,openGL会用每个...
  • bill_man
  • bill_man
  • 2016年06月13日 10:29
  • 4390

《Cocos2d-x实战 C++卷》上线了-源码-样章-感谢大家的支持

《Cocos2d-x实战 C++卷》上线了感谢大家一直以来的支持! 全面介绍Cocos开发技巧,采用Cocos2d-x3.2版本,并且详细介绍跨平台移植已经多平台发布细节。· 各大商店均开始销售:京东...
  • tonny_guan
  • tonny_guan
  • 2014年12月01日 21:05
  • 5000

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

http://blog.csdn.net/bill_man 从本篇文章开始,将分析cocos2D-X 3.0源代码,第一部分是从cocos2D-X学习OpenGL,也就是分析cocos2...
  • canglangclient
  • canglangclient
  • 2016年04月06日 14:03
  • 237

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

原文地址http://blog.csdn.net/bill_man         从本篇文章开始,将分析cocos2D-X 3.0源代码,第一部分是从cocos2D-X学习OpenGL,也就是...
  • CyWn_d
  • CyWn_d
  • 2014年12月25日 10:59
  • 367

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

个人原创,欢迎转载,转载请注明原文地址http://blog.csdn.net/bill_man         从本篇文章开始,将分析cocos2D-X 3.0源代码,第一部分是从cocos2...
  • Const_Gong
  • Const_Gong
  • 2016年01月09日 18:08
  • 329

cocos2d-x 源码剖析(1)

原文出处:http://www.tsiannian.com/book/archives/34 我认为在看这些文章的时候,最好有一些cocos2d-x的经验。起码能新建一个cocos2d-x的hel...
  • u012866513
  • u012866513
  • 2014年03月10日 12:46
  • 676

Cocos2d-x实现简易翻牌效果

翻牌效果网上找了好多,复杂点的有自己重写一个sprite类来实现,简单的就利用引擎自带的动作CCOrbitCamera来实现,但是存在一些问题,图片旋转之后变反了。 我在用的只是一个简单的翻牌效果,点...
  • Nat_myron
  • Nat_myron
  • 2014年08月08日 10:43
  • 1260
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:cocos2D-X源码分析之从cocos2D-X学习OpenGL(13)----模板测试
举报原因:
原因补充:

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