OpenGL 裁剪测试及注意点

栏目: 编程工具 · 发布时间: 5年前

内容简介:在 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 方法里面开启裁剪测试,然后绘制,然后关闭裁剪就行了,具体效果如下:

OpenGL 裁剪测试及注意点

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

注意点

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 相关技术~~

OpenGL 裁剪测试及注意点

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

github.com/glumes/Andr…

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

OpenGL 裁剪测试及注意点

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

《Hello Ruby:儿童编程大冒险》(平装)

《Hello Ruby:儿童编程大冒险》(平装)

(芬兰)琳达·刘卡斯 / 窝牛妈 / 浙江人民美术出版社 / 2018

快来认识Ruby——一个想象力丰富,喜欢解决难题的女生。Ruby认识了一群新朋友:聪明的雪豹、友好的狐狸、忙碌的机器人等等。这本书以讲故事的方式向孩子们介绍了基础的计算思维,比如拆分问题,制定分步计划,寻找规律,打破思维定势等等;之后,通过一系列鼓励探索和创造的练习和活动,孩子们对这些关乎编程核心问题的基本概念有了进一步的理解。一起来看看 《《Hello Ruby:儿童编程大冒险》(平装)》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具