下面来设置蒙板缓存和蒙板测试. 首先我们启用蒙板测试,这样就可以修改蒙板缓存中的值. 下面我们来解释蒙板测试函数的含义: 当你使用glEnable(GL_STENCIL_TEST)启用蒙板测试之后,蒙板函数用于确定一个颜色片段是应该丢弃还是保留(被绘制).蒙板缓存区 中的值与参考值ref进行比较,比较标准是func所指定的比较函数.参考值和蒙板缓存区的值都可以与掩码进行为AND操作.蒙板测试的结果还导致蒙板缓 存区根据glStencilOp函数所指定的行为进行修改. func的参数值如下: 常量…
启用模板测试时,OpenGL会在内存中开辟一块空间作为模板缓冲区,里边保存了每个像素的"模板值",模板测试的过程就是把每一个像素的模板值与一个设定的模板参考值进行比较,符合设定条件的通过测试,不符合条件的则不会绘制. glClearStencil函数用来指定模板值复位后的初始值,跟使用glClearColor函数指定复位后画板的颜色一样. glStencilFunc函数用来设置模板测试条件.第一个是模板测试条件,第二个是指定的当前模板的测试值,程序会使用改值与参考模板值进行比较,第三个…
我在学习OpenGL模板测试勾画物体轮廓的时候,出现了这个问题: 这个出现的原因就是,改变摄像机的时候,每次绘制,上次绘制中模板缓冲区的数据没有清除的原因.也就是在while循环开始的时候,glClear(GL_STENCIL_BUFFER_BIT);没有起作用,原来 我在while的末尾忘记了修改回来模板缓冲区为可写.glStencilMask(0xff);…
模板测试的主要功能是丢弃一部分片元,相对于深度检测来说,模板测试提出的片元数量相对较少.模板测试发生在剪裁测试之后,深度测试之前. 使用模板测试时很重要的代码提示: 1.glClear( GL_STENCIL_BUFFER_BIT); //启用模板测试 2.glEnable(GL_STENCIL_TEST); 大多数情况你的模板遮罩(stencil mask)写为0x00或0xFF就行. // 0xFF == 0b11111111,此时,模板值与它进行按位与运算结果是模板值,模板缓冲可写 glS…
本文是原创文章,如需转载,请注明文章出处 在游戏开发中,经常会有这样的需求:给定一张64x64的卡牌素材,要求只显示以图片中心为圆点.直径为64的圆形区域,这就要用到模板测试来进行不规则裁剪. 实现不规则裁剪的主要思路如下: 1.准备好素材:要显示的64x64图片一张,不规则形状的遮罩图一张(本例中为圆形图). 2.打开alpha测试,将测试通过条件设置成>0.5,使遮罩图中心的圆形区域可以通过测试,周围的透明像素无法通过测试. 3.打开模板测试,将测试通过条件设置成GL_NEVER,并将测试失…
原文地址:http://www.blogjava.net/qileilove/archive/2014/01/23/409269.html 帧缓冲区有许多缓冲区构成,这些缓冲区大致分为: 颜色缓冲区:用于绘图的缓冲区,它包含了颜色索引或者RGBA颜色数据. 深度缓冲区:存储每个像素的深度值,当启动深度测试时,片段像素深度值和深度缓冲区深度值进行比较,决定片段哪些像素点数据可以替换到颜色缓冲区中. 模板缓冲区:就像使用纸板和喷漆一样精确的混图一样,当启动模板测试时,通过模板测试的片段像素点会被替换…
片断测试其实就是测试每一个像素,只有通过测试的像素才会被绘制,没有通过测试的像素则不进行绘制.OpenGL提供了多种测试操作,利用这些操作可以实现一些特殊的效果.我们在前面的课程中,曾经提到了“深度测试”的概念,它在绘制三维场景的时候特别有用.在不使用深度测试的时候,如果我们先绘制一个距离较近的物体,再绘制距离较远的物体,则距离远的物体因为后绘制,会把距离近的物体覆盖掉,这样的效果并不是我们所希望的.如果使用了深度测试,则情况就会有所不同:每当一个像素被绘制,OpenGL就记录这个像素的“深度”…
OpenGL光照测试 花了大概半个月,研究了OpenGL的光照.请注意是固定管线渲染的光照,如果使用着色器的高手们请飘过.这个程序是通过光照对模型的照射,来研究OpenGL光照的性质.以后可以通过这个程序来构建更加复杂的场景.          目前框架和各类的引擎层出不穷,让我都无法选择哪一个了,所以我打算再花一段时间研究最基础的渲染器OpenGL和DirectX.当然,为配合这些渲染器我选择了Qt作为开发的平台,至今我使用Qt已经超过了一年了. 嗯,似乎话扯远了,放出几张图以飨读者吧. 和上…
Visual Studio 2013 屏幕保护程序opengl模板 ScreenSaver.cpp #define VC_EXTRALEAN #include <windows.h> #include <commctrl.h> #include <scrnsave.h> #include <time.h> #include <math.h> #include <string> #include <time.h> #incl…
参考链接: https://blog.csdn.net/u011047171/article/details/46928463 https://blog.csdn.net/JohnBlu/article/details/83539427 模板测试和深度测试很相似: 1.如果模板测试不通过,则该像素会被舍弃 2.有模板缓冲区,每像素对应存放一个8位整数(0-255) 3.模板测试也是一个比较值的过程,将参考值和模板缓冲的值进行比较 当然也有很不同的地方: 1.即使模板测试不通过,仍然可以修改模板缓…