OpenGL ES 2.0 剪裁测试

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

//启用剪裁测试
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,则顶点在平面的一侧,反之在平面的另一侧。

 

转载于:https://www.cnblogs.com/msnow/p/5257895.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值