OpenGL 2.0 之 裁剪与测试

剪裁测试

基本原理:用于渲染时限制绘制区域,通过此技术可以再屏幕(帧缓冲)指定一个矩形区域。启用剪裁测试之后,不在此矩形区域内的片元被丢弃,只有在此矩形区域内的片元才有可能进入帧缓冲。因此实际达到的效果就是在屏幕上开辟了一个小窗口,可以再其中进行指定内容的绘制。

核心代码如下:

GLES20.glEnable(GLES20.GL_SCISSOR_TEST);//启用剪裁测试
GLES20.glScissor(0,0,100,200);//设置区域(左下角坐标(0,0),宽度100,高度200)
GLES20.glDisable(GLES20.GL_SCISSOR_TEST);//禁用剪裁测试
Alpha测试

剪裁测试的区域只能是矩形,Alpha测试可以实现任意形状绘制区域。
基本原理:当绘制一个片元时,首先检测其Alpha值,若Alpha值满足要求,则通过测试,绘制此片元,否则丢弃其片元。

核心代码如下:

precision mediump float;//给出默认的浮点精度
varing vec2 vTextureCoord; //从顶点着色器传递过来的纹理坐标
uniform sampler2D sTexture;//纹理内容数据
void main{
    vec4 bcolor = texture2D(sTexture,vTextureCoord);//根据纹理坐标采样出颜色值
    if(bcolor.a < 0.6){discard;}//若Alpha值小于0.6,将片元丢弃
    else{gl_FragColor = bcolor;}//否则将此颜色作为片元的颜色
}
模板测试

基本原理:可以将绘制限定在一个矩形的区域,模板测试也称蒙版测试。

核心代码如下:

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中第一个参数为比较模式,第二个参数为参考值,第三个参数为掩码。
never:从不通过模板测试
always:总是通过模板测试
less:小于
equal:等于
greater:大于
notequal:不等于
方法glStencilOp中第一个参数表示模板测试不通过片元的模板值该如何变化,第二个参数表示深度测试不通过片元的模板值该如何变化,第三个参数表示模板测试和深度测试均未通过片元的模板值该如何变化
keep:不改变
zero:归零
replace:使用测试条件的设定值代替当前模板值
incr:+1,如果是最大值,保持不变
incr_wrap:+1,如果是最大值,充零开始
decr:-1,如果已经为零,则保持不变
invert:按位取反

任意剪裁平面
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值