您好,欢迎来到汇智旅游网。
搜索
您的当前位置:首页OpenGL ES裁剪与测试

OpenGL ES裁剪与测试

来源:汇智旅游网

1、裁剪测试

GLES20.glEnable(GL10.GL_SCISSOR_TEST);//启用裁剪测试

GLES20.glScissor(0, 0, 100, 200);//设置区域,0,0表示裁剪区域左下角的x、y坐标,后两个参数为裁剪区域的宽度和高度

GLES20.glDisable(GL10.GL_SCISSOR_TEST);//禁用裁剪测试

2、Alpha测试

当绘制一个片元时,首先检测其Alpha值,若Alpha值符合要求,则通过测试,否则丢弃此片元,补进行绘制

glsl代码

vec4 bcolor = texture2D(sTexture, vTextureCoord);//给此片元从纹理中采样出颜色值

if(bcolor.a < 0.6) {

        discard;

} else {

        gl_FragColor = bcolor;

}

3、模板测试

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_KEEP);//设置模板测试后的操作

texRect.drawSelf(textureFloor);//绘制反射面地板

GLES20.glStencilFunc(GLES20.GL_EQUAL, 1, 1);//设置模板测试参数

GLES20.glStencilOp(GLES20.GL_KEEP, GLES20.GL_KEEP, GLES20.GL_KEEP);//设置模板测试后的操作

bfd.drawSelfMirror(textureBallId);//绘制镜像

GLES20.glDisable(GLES20.GL_STRNCIL_TEST);//禁用模板测试

4、任意平面裁剪

1)给出用于定义裁剪平面的4个参数A、B、C、D,这四个参数分别是平面解析(Ax+By+Cz+D)中的4个系数

float e[] = {1, countE - 1, -countE+1, 0};定义裁剪平面

2)将裁剪平面的4个参数传入渲染管线,以备着色器使用

//获取程序中剪裁平面引用
    muClipHandle=GLES20.glGetUniformLocation(mProgram, "u_clipPlane"); 
    //将剪裁平面传入shader程序   
    GLES20.glUniform4fv(muClipHandle, 1, fromArrayToBuff(clipPane));
    
    public FloatBuffer fromArrayToBuff(float[] a)
    {
        ByteBuffer llbb = ByteBuffer.allocateDirect(a.length*4);
        llbb.order(ByteOrder.nativeOrder());//设置字节顺序
        FloatBuffer result=llbb.asFloatBuffer();
        result.put(a);
        result.position(0);  
        return result;
    }

3)在定点着色器中判断定点是否在平面的某一侧,具体方法为:将顶点位置(x0, y0, z0)带入平面方程式Ax + By + Cz + D = 0,完成计算后将得到的值传入片元着色器

//将顶点位置(x0,y0,z0)代入平面方程Ax+By+Cz+D=0,
   //若Ax0+By0+Cz0+D>0,则顶点在平面的上侧,反之在平面的下侧
   u_clipDist = dot(aPosition.xyz, u_clipPlane.xyz) +u_clipPlane.w;

4)片元着色器中根据接收到的Ax + By + Cz + D表达式的值与0之间的关系就可以得出定点裁剪平面之间的位置关系,以决定是否丢弃片元

if(u_clipDist < 0.0) discard;

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- hzar.cn 版权所有 赣ICP备2024042791号-5

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务