OpenGL 裁剪测试及注意点

在 OpenGL 中启用裁剪测试可以在屏幕或者帧缓冲上指定一个矩形区域,然后在该矩形区域内绘制,只有在该区域内的片元才有机会最终进入帧缓冲,不在该区域内的将会被丢弃,

裁剪测试的效果就相当于在屏幕上开辟一个矩形区域,在该区域内再单独绘制内容。

它的主要代码如下:

		// 开启裁剪测试
        GLES20.glEnable(GLES20.GL_SCISSOR_TEST)
        // 指定开辟的矩形区域
        GLES20.glScissor(x,y,width,height)
        // 清除该区域内的颜色
        GLES20.glClearColor(1f, 0f, 0f, 1f)
        GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT or GLES20.GL_DEPTH_BUFFER_BIT)
        // 在矩形局域内绘制内容
        mCube.onDrawFrame(gl)
        // 关闭裁剪测试
        GLES20.glDisable(GLES20.GL_SCISSOR_TEST)
复制代码

它的使用并不难,只要在 onDrawFrame 方法里面开启裁剪测试,然后绘制,然后关闭裁剪就行了,具体效果如下:

在原来的图像上裁剪了一小块矩形,然后绘制了一个旋转的形状。

注意点

glScissor 方法可以指定裁剪的矩形区域,它的方法原型如下:

    public static native void glScissor( int x, int y, int width, int height );
复制代码

其中,x 和 y 指矩形区域的左下角坐标,width 和 height 指矩形区域的宽和高。

x 和 y 坐标所在的坐标系是以视口矩形区域的左下角为原点的,x 轴向右,y 轴向上的坐标系,对应到屏幕的坐标,就是以屏幕的左下角为原点,这和 Android 中以左上角为原点不同。

另外,在绘制时我们把视口设置为屏幕的宽和高,那么在启用裁剪测试后,想让绘制的内容正好显示在指定的矩形区域内,就必须保证即便没有启用裁剪测试,内容也是绘制在指定的区域内,否则裁剪区域内将不会显示绘制内容。

也就是说,裁剪测试只是在原来的视口标准的绘制区域内开辟一块矩形区域来显示,而不是把内容放到裁剪的区域内来显示。

最后创建了一个微信群,欢迎加群交流讨论 OpenGL ES 相关技术~~

具体代码详情,可以参考我的 Github 项目,求一波 star~~

github.com/glumes/Andr…

欢迎关注微信公众号:【纸上浅谈】,获得最新文章推送~~

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-02 15:39
希望奇迹发生的布莱克...:真的是 现在卷实习就是没苦硬吃
点赞 评论 收藏
分享
能干的三文鱼刷了10...:公司可能有弄嵌入式需要会画pcb的需求,而且pcb能快速直观看出一个人某方面的实力。看看是否有面试资格。问你问题也能ai出来,pcb这东西能作假概率不高
点赞 评论 收藏
分享
07-07 10:44
青岛工学院 Java
机械打工仔:对方没做错任何事,你自己在这自找没趣呢,就算他工资不高,人家定多少薪资是人家的事,况且人家写了1~3年清清楚楚
点赞 评论 收藏
分享
看到这个内容真是闹麻了。。。。。。现在有了AI以后很多人面试都会作弊吗? 那对老老实实面试的人岂不是不公平....
程序员牛肉:公平那是对小孩子讲的童话故事,成年人的世界只有能不能接受失败的后果。 你要是能接受面试作弊被发现之后多家公司联合永久拉黑的后果,你就搞。
你找工作的时候用AI吗?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务