[Android] OpenGL ES 图像纹理的裁剪

关于顶点坐标与纹理坐标

上篇文章提到过,图像的绘制就不过是在矩形中颜色以纹理的形式表示,那么就是说矩形的顶点坐标(世界坐标)就已经说明了纹理需要绘制在什么地方,可以说作是图片的“容器”吧。然后我们要知道哪部分需要展示在界面上,那么就有纹理坐标的概念了。纹理坐标以纹理左下角为坐标原点,向右为x正轴方向,向上为y轴正轴方向。他的总长度是1,我们可以通过一些计算对纹理进行裁剪。

粗略画了个图,这表示了顶点坐标与纹理坐标的关系,又由纹理坐标与 Android 的屏幕坐标可见,纹理坐标与 Android 的屏幕坐标是完全相反的,这点需要注意。纹理的原点位于纹理图像的左下角。

 

裁剪

说完纹理坐标,那么要裁剪图像就很简单了。我们仅需要修改纹理坐标即可达成裁剪的目的,我们把上一篇文章的纹理坐标改为如下:

    private static final float[] sCoord = {
            0.0f, 0.0f,
            0.0f, 1.0f,
            0.5f, 0.0f,
            0.5f, 1.0f,
    };

此时原图与其的对比即为原来图片的左边一半了。当然有个小坑,就是裁剪上下的时候其传入的顶点是相反的,在网上资料中我得到一张图:

 

从这张图中我了解了,即使纹理坐标是向上为正的,但计算机中都是向下为正,所以实际上依然是原点在左上角,x轴向右,y轴向下。

那么就是要取下半部分的话纹理坐标为:

    private static final float[] sCoord = {
            0.0f, 0.5f,
            0.0f, 1.0f,
            1.0f, 0.5f,
            1.0f, 1.0f,
    };

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值