cocos2D-X源码分析之从cocos2D-X学习OpenGL(13)----模板测试
2016-06-12 10:54
609 查看
像素着色器调用完成后。模板测试就开始了,它可以丢弃片元,模板缓冲在渲染时获得有意思的效果。
模板缓冲中一个模板值有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,就可以指定在什么时候以及如何更新模板缓冲,并且指定何时让模板测试通过或不通过
通过模板测试,我们可以实现图片裁剪效果,需要注意的是在一个裁剪节点上不能再用另外一个裁剪节点,否则会产生错误的效果。
能力不足,水平有限,如有错误,欢迎指出。
模板缓冲中一个模板值有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,就可以指定在什么时候以及如何更新模板缓冲,并且指定何时让模板测试通过或不通过
通过模板测试,我们可以实现图片裁剪效果,需要注意的是在一个裁剪节点上不能再用另外一个裁剪节点,否则会产生错误的效果。
能力不足,水平有限,如有错误,欢迎指出。
相关文章推荐
- HTML5游戏开发/微信游戏开发——Cocos2dx-js开发环境搭建(win32平台)
- cocos2dx解决苹果正版ipv6的问题
- cocos2D-X源码分析之从cocos2D-X学习OpenGL(12)----立方体贴图和天空盒
- cocos2d 性能优化1
- cocos2D-X源码分析之从cocos2D-X学习OpenGL(11)----摄像机
- cocos2dx之中文乱码问题
- cocos2dx之apk编译失败原因
- cocos2dx之加载瓦片地图tmx
- cocos2dx-2.2.1结合VS2010游戏开发入门(环境搭建)
- cocos2D-X源码分析之从cocos2D-X学习OpenGL(10)----MVP矩阵
- 新作品上线了啦,等你来玩!!!
- 使用tiled-0.16.1创建地图用于cocos2dx
- cocos2D-X源码分析之从cocos2D-X学习OpenGL(9)----变换和坐标系统
- cocos2dx android添加广点通广告平台的---插屏广告
- sublime中的cocos-js代码提示
- [Android开发]cocos2dx工程中接入支付宝sdk
- cocos2dx android SDK接入总结
- 【图片处理】cocos2dx png图片压缩处理
- quick-cocos2d-x 从2.2.5升级到3.3的体会,quickcocos2dx3.3
- Cocos2dx/NDK .a静态库的制作与使用