OpenGl笔记 12.1 stencil 模版 缓冲区

在OpenGL中存在着多种缓冲区,这些缓冲区大致分为:

  深度缓冲区:存储每个像素的深度值,当启动深度测试时,片段像素深度值和深度缓冲区深度值进行比较,决定片段哪些像素点数据可以替换到颜色缓冲区中。

  模板缓冲区(Stencil Buffer):与颜色缓冲区和深度缓冲区类似,模板缓冲区可以为屏幕上的每个像素点保存一个无符号整数值。这个值的具体意义视程序的具体应用而定。在渲染的过程中,可以用这个值与一个预先设定的参考值相比较,根据比较的结果来决定是否更新相应的像素点的颜色值。这个比较的过程被称为模板测试。模板测试发生在透明度测试(alpha test)之后,深度测试(depth test)之前。如果模板测试通过,则相应的像素点更新,否则不更新。就像使用纸板和喷漆一样精确的混图一样,当启动模板测试时,通过模板测试的片段像素点会被替换到颜色缓冲区中,从而显示出来,未通过的则不会保存到颜色缓冲区中,从而达到了过滤的功能。下图描述了模板缓冲区的原理:

  累积缓冲区:累积缓冲区允许你把渲染到颜色缓冲区的值,拷贝到累积缓冲区。在多次拷贝操作到累积缓冲区时,可以用不同方式的把颜色缓冲区内容和当前累积缓冲区的内容进行重复混合

读者一定还记得在写OpenGL程序的时候熟悉的glClear命令吧,经常需要传入的缓冲区类型包括:

  1. 颜色缓冲区 GL_COLOR_BUFFER_BIT
  2. 深度缓冲区 GL_DEPTH_BUFFER_BIT
  3. 模板缓冲区 GL_STENCIL_BUFFER_BIT

为了方便可以在一个命令中清除多个缓冲区(使用|操作符)

时间: 2024-10-13 00:20:30

OpenGl笔记 12.1 stencil 模版 缓冲区的相关文章

OpenGL笔记12

OpenGL入门学习[十二] 片断测试其实就是测试每一个像素,只有通过测试的像素才会被绘制,没有通过测试的像素则不进行绘制.OpenGL提供了多种测试操作,利用这些操作可以实现一些特殊的效果.我们在前面的课程中,曾经提到了“深度测试”的概念,它在绘制三维场景的时候特别有用.在不使用深度测试的时候,如果我们先绘制一个距离较近的物体,再绘制距离较远的物体,则距离远的物体因为后绘制,会把距离近的物体覆盖掉,这样的效果并不是我们所希望的.如 果使用了深度测试,则情况就会有所不同:每当一个像素被绘制,Op

《30天自制操作系统》笔记(12)——多任务入门

<30天自制操作系统>笔记(12)——多任务入门 进度回顾 上一篇介绍了设置显示器高分辨率的方法.本篇讲一下操作系统实现多任务的方法. 什么是多任务 对程序员来说,也许这是废话,不过还是说清楚比较好. 多任务就是让电脑同时运行多个程序(如一边写代码一边听音乐一边下载电影). 电脑的CPU只有固定有限的那么一个或几个,不可能真的同时运行多个程序.所以就用近似的方式,让多个程序轮换着运行.当轮换速度够快(0.01秒),给人的感觉就是"同时"运行了. 多任务之不实用版 我们首先从

python基础教程_学习笔记12:充电时刻——模块

充电时刻--模块 python的标准安装包括一组模块,称为标准库. 模块 >>> import math >>> math.sin(0) 0.0 模块是程序 任何python程序都可以作为模块导入. $ cat hello.py #!/usr/bin/python print "Hello,signjing!" $ ./hello.py Hello,signjing! 假设将python程序保存在/home/ggz2/magiccube/mysh/p

python 学习笔记 12 -- 写一个脚本获取城市天气信息

最近在玩树莓派,前面写过一篇在树莓派上使用1602液晶显示屏,那么能够显示后最重要的就是显示什么的问题了.最容易想到的就是显示时间啊,CPU利用率啊,IP地址之类的.那么我觉得呢,如果能够显示当前时间.温度也是甚好的,作为一个桌面小时钟还是很精致的. 1. 目前有哪些工具 目前比较好用的应该是 weather-util, 之前我获取天气信息一般都是通过它. 使用起来也很简单: (1) Debian/Ubuntu 用户使用 sudo apt-get install weather-util 安装

Swift学习笔记(12)--数组和字典的复制

Swift中,数组Array和字典Dictionary是用结构来实现的,但是数组与字典和其它结构在进行赋值或者作为参数传递给函数的时候有一些不同. 并且数组和字典的这些操作,又与Foundation中的NSArray和NSDictionary不同,它们是用类来实现的. 注意:下面的小节将会介绍数组,字典,字符串等的复制操作.这些复制操作看起来都已经发生,但是Swift只会在确实需要复制的时候才会完整复制,从而达到最优的性能. 字典的赋值和复制操作 每次将一个字典Dictionary类型赋值给一个

操作系统概念学习笔记 12 进程同步(二)管程

操作系统概念学习笔记 12 进程同步(二) 管程 基本的.高级的同步构造,即管程(monitor)类型. 使用: 管程类型提供了一组由程序员定义的.在管程内互斥的操作.管程类型的表示包括一组变量的声明(这些变量的值定义了一个类型实例的状态)和对这些变量操作的子程序和函数的实现.管程的类型表示不能直接为各个进程所使用.因此,在管程内定义的子程序只能访问位于管程内那些局部声明的变量和形式参数.类似的,管程的局部变量能被局部子程序访问. 管程结构确保一次只有一个进程能在管程内活动.不需要显示的编写同步

OpenGL笔记15 顶点数据

这次讲的所有内容都装在一个立方体中,呵呵.呵呵,绘制一个立方体,简单呀,我们学了第一课第二课,早就会了.先别着急,立方体是很简单,但是这里只是拿立方体做一个例子,来说明OpenGL在绘制方法上的改进.从原始一点的办法开始一个立方体有六个面,每个面是一个正方形,好,绘制六个正方形就可以了. glBegin(GL_QUADS);     glVertex3f(...);     glVertex3f(...);     glVertex3f(...);     glVertex3f(...); //

OpenGL笔记6

今天要讲的是动画制作——可能是各位都很喜欢的.除了讲授知识外,我们还会让昨天那个“太阳.地球和月亮”天体图画动起来.缓和一下枯燥的气氛.本次课程,我们将进入激动人心的计算机动画世界. 想必大家都知道电影和动画的工作原理吧?是的,快速的把看似连续的画面一幅幅的呈现在人们面前.一旦每秒钟呈现的画面超过24幅,人们就会错以为它是连续的. 我们通常观看的电视,每秒播放25或30幅画面.但对于计算机来说,它可以播放更多的画面,以达到更平滑的效果.如果速度过慢,画面不够平滑.如果速度过快,则人眼未必就能反应

OpenGL笔记15

这次讲的所有内容都装在一个立方体中,呵呵.呵呵,绘制一个立方体,简单呀,我们学了第一课第二课,早就会了.先别着急,立方体是很简单,但是这里只是拿立方体做一个例子,来说明OpenGL在绘制方法上的改进.从原始一点的办法开始一个立方体有六个面,每个面是一个正方形,好,绘制六个正方形就可以了. glBegin(GL_QUADS);     glVertex3f(...);     glVertex3f(...);     glVertex3f(...);     glVertex3f(...); //