剪裁测试:可以在渲染时用来限制绘制区域,通过此技术可以在屏幕(帧缓冲)上指定一个矩形区域。

//启用剪裁测试
GLES20.glEnable(GL10.GL_SCISSOR_TEST);
//设置区域
GLES20.glScissor(0,480,230,200);
//禁用剪裁测试
GLES20.glDisable(GL10.GL_SCISSOR_TEST);

Alpha测试:当绘制一个片元时,首先检测其Alpha值,若Alpha值满足要求,则通过测试,绘制此片元,负责丢弃此片元,不进行绘制。

discard:丢弃片元

模板测试(蒙版测试):渲染管线在模板中为每个位置的片元保存了一个"模板值",当像素需要进行模板测试时,将设定的模板参考值与该片元对应位置的模板值比较,符合条件的片元通过测试,不符合条件的则被丢弃,不进行渲染。

//清除模板缓存
GLES20.glClear(GLES20.GL_STENCIL_BUFFER_BIT);
//允许模板测试
GLES20.glEnable(GLES20.GL_STENCIL_TEST);
//设置模板测试参数
GLES20.glStencilFunc(GLES20.GL_ALWAYS, 1, 1);
//设置模板测试后的操作
GLES20.glStencilOp(GLES20.GL_KEEP, GLES20.GL_KEEP, GLES20.GL_REPLACE);
//禁用模板测试
GLES20.glDisable(GLES20.GL_STENCIL_TEST);

glStencilFunc

  • 第一个参数:比较模式
  • 第二个参数:参考值
  • 第三个参数:mask
比较模式 含义
GL_NEVER 从不通过模板测试
GL_ALWAYS 总是通过模板测试
GL_LESS 只有参考值<(模板缓冲区的值&mask)时才通过
GL_LEQUAL 只有参考值<=(模板缓冲区的值&mask)时才通过
GL_EQUAL 只有参考值=(模板缓冲区的值&mask)时才通过
GL_GEQUAL 只有参考值>=(模板缓冲区的值&mask)时才通过
GL_GREATER 只有参考值>(模板缓冲区的值&mask)时才通过
GL_NOTEQUAL 只有参考值!=(模板缓冲区的值&mask)时才通过

#

glStencilOp

  • 第一个参数:表示模板测试未通过时此片元对应的模板值该如何变化。
  • 第二个参数:表示模板测试通过,但深度测试未通过时此片元对应模板值该如何变化。
  • 第三个参数:表示模板测试和深度测试均通过时,此片元对应的模板值该如何变化。

*如果没有启用深度测试,则认为深度测试总是通过的。

参数值 模板值变化情况
GL_KEEP 不改变
GL_ZERO 回零
GL_REPLACE 使用测试条件中的设定值来代替当前模板值
GL_INCR 增加1,但如果已经是最大值,则保持不变
GL_INCR_WRAP 增加1,但如果已经是最大值,则重新从零开始
GL_DECR 减少1,如如果已经是零,则保持不变
GL_DECR_WRAP 减少1,但如果已经是零,则保持不变
GL_INVERT 拉位取反

#

任意剪裁平面

  1. 给出定义剪裁平面的4个参数A、B、C、D,这4个参数分别是平面解析方程(Ax+By+Cz+D=0)中的4个系数。
  2. 将剪裁平面的4个参数传入渲染管线,以备着色器使用。
  3. 在顶点着色器中判断顶点是否在平面的一侧,具体的方法为:将顶点位置(x0,y0,z0)代入平面方程Ax+By+Cz+D=0,完成计算后将得到的值传入片元着色器。
  4. 片元着色器中根据接收到的Ax0+By0+Cz0+D表达式的值与0之间的关系就可以得出顶点与剪裁平面之间的位置关系,以决定是否丢弃片元。

若Ax0+By0+Cz0+D>0,则顶点在平面的一侧,反之在平面的另一侧。

最新文章

  1. delphi 导出xml文件
  2. 第二章 jQuery数组和字符串
  3. 《BI那点儿事》SSRS图表和仪表——雷达图分析三国超一流谋士、统帅数据(图文并茂)
  4. linux之各个文件夹作用
  5. mysql 启动 pid报错解决方法
  6. 一种少见的跨目录写webshell方法
  7. css3开门
  8. *.bz2和*.gz分别是什么压缩格式
  9. DF学Mysql(三)——Mysql数据类型
  10. 使用idea创建maven的web项目
  11. Struts2从版本2.2.1升级至2.3.15.1出现的问题
  12. Microsoft SQL Server 2012 数据库安装图解教程
  13. BZOJ 1031 字符加密
  14. IDEA 运行 控制台显示一堆乱码,一些问号
  15. SVG六基本元素
  16. Charlse 使用小记
  17. springboot整合mybatis使用阿里(阿里连接池)和xml方式
  18. 异步请求取得json数据
  19. 二叉树分派硬币 Distribute Coins in Binary Tree
  20. php编程疑难解决-1

热门文章

  1. java部分基础总结
  2. uva 352 - The Seasonal War
  3. linux清理僵尸进程
  4. EasyUI datagrid简单运用
  5. JavaWeb学习笔记--4.EL表达式
  6. 关于javascript 回调函数
  7. dataList中实现用复选框一次删除多行问题
  8. bzoj1676[Usaco2005 Feb]Feed Accounting 饲料计算
  9. Display number of replies in disscussion board
  10. 页面onclick()中传值问题