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,就可以指定在什么时候以及如何更新模板缓冲,并且指定何时让模板测试通过或不通过

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

      

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




版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/bill_man/article/details/51644216

Part 13:Cocos2d-x开发实战-Cocos2d-x中使用的数据容器类

-
  • 1970年01月01日 08:00

解决了一个cocos2dx 在部分 android手机上模板测试错误的问题

在android 手机上,大部分的机器模板测试都没问题。但是有一个奇葩的手机,小米2S, 当只有一层需要模板测试的时候 ,在cocos2dx 里具体地说就是 使用 CCClippingNode 的时候...
  • korekara88730
  • korekara88730
  • 2014-12-29 23:34:17
  • 1950

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

像素着色器调用完成后。模板测试就开始了,它可以丢弃片元,模板缓冲在渲染时获得有意思的效果。     模板缓冲中一个模板值有8位大小,每个窗口都会创建一个默认的模板缓冲,它可以通过数据控制屏幕显示,从而...
  • bill_man
  • bill_man
  • 2016-06-12 10:54:03
  • 4066

OpenGL模板测试

模板测试 模板测试是所有OpenGL测试中比较复杂的一种。首先,模板测试需要一个模板缓冲区,这个缓冲区是在初始化OpenGL时指定的。如果使用GLUT工具包,可以在调用glutInitDisplayM...
  • pizi0475
  • pizi0475
  • 2011-01-06 22:20:00
  • 5760

Shader 模板缓冲和模板测试

http://blog.sina.com.cn/s/blog_6e159df70102xa67.html 模板缓冲的概念 Unity官方的Shader文档根本没有提到这个玩意,这个概念...
  • OnafioO
  • OnafioO
  • 2016-12-30 15:04:30
  • 1444

<em>cocos</em>2d-x权威指南完整版

下载<em>Cocos</em>2D/ 4 1.2.2 安装<em>Cocos</em>2D<em>模板</em>/ 6 1.2.3 创建<em>Cocos</em>2D-iPhone的...运行ActionsTest<em>测试</em>/ 94 4.1.2 <em>Cocos</em>2D中的动作类/ 96 4.2 动作的分类及...
  • 2018年04月17日 00:00

OpenGL--模板测试

理论基础 模板测试:通俗点讲就是为屏幕每个像素设置了一个模板值,然后拿一个参考值与之比较,满足条件就通过,则对应像素就会绘制,否则不绘制。类似深度测试一样,只是服务情形不同,深度测试主要用来消除背面...
  • u010223072
  • u010223072
  • 2015-04-25 17:17:37
  • 2021

模板测试

当片段着色器处理完片段之后,模板测试(Stencil Test) 就开始执行了,和深度测试一样,它能丢弃一些片段。仍然保留下来的片段进入深度测试阶段,深度测试可能丢弃更多。模板测试基于模板缓冲(Ste...
  • killallpigs
  • killallpigs
  • 2017-02-04 15:08:19
  • 210

深入了解OpenGL——模板测试

我们在用OpenGL绘图时往往想制作一些复合图形以及凹凸多边形,像五角星、大的矩形里再画一个小的矩形;另外有时还想做些镂空图或类似的效果。 这时我们可以开启模板测试功能来完成这些需求。 由于OpenG...
  • zh13544539220
  • zh13544539220
  • 2015-06-01 11:36:19
  • 805

DirectX11 模板测试

模板测试1. 模板测试实现过程如前所述,我们可以使用模板缓冲区来阻止像素片段渲染到后台缓冲区的某些区域。判断一个特定像素是否可以写入后台缓冲区的操作称为模板测试(stencil test),其实现过程...
  • sinat_24229853
  • sinat_24229853
  • 2015-10-04 12:21:09
  • 1319
收藏助手
不良信息举报
您举报文章:cocos2D-X源码分析之从cocos2D-X学习OpenGL(13)----模板测试
举报原因:
原因补充:

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