[OpenGL]从零开始写一个Android平台下的全景视频播放器——1.3 用OpenGL ES 2.0显示一张图片(上)

Github项目地址,欢迎star~!

为了方便没有准备好梯子的同学,我把项目在CSDN上打包下载,不过更新会慢一些

回到目录

本节示例代码下载地址

解决变形问题

要解决变形,我们需要引入Projection Matrix(投影矩阵)的概念,在OpenGL中,投影矩阵用来改变场景在屏幕上的显示方式(近大远小,平行投影等等)。
因为我们绘制的是二维平面,所以问题还是比较好解决的,假如我们的屏幕是16:9的(横屏情况),那么只要让OpenGL的绘制范围也是16:9的就好了,如下图所示:
这里写图片描述
可以看到,我们把OpenGL的绘制区域横向拉长了,拉长的比例就是(16/9 约1.777)

更多关于透视和投影变换可以参考这篇博文

那么代码要如何实现呢?答案是矩阵(线性代数没上90的哭晕在厕所。。),需要进行的操作是正交投影,好在我们并不需要去推导正交矩阵如何求出来(其实这个算简单的,有兴趣的可以自己查找相关资料),Android 提供的Matrix类中包含这个方法。

我们先声明一个长度16的float数组,这是Matrix的标准尺寸

private final float[] projectionMatrix=new float[16];

注意,在OpenGL中,数组是row-major的,如下所示:

/**
 * Matrix math utilities. These methods operate on OpenGL ES format
 * matrices and vectors stored in float arrays.
 * <p>
 * Matrices are 4 x 4 column-vector matrices stored in column-major
 * order:
 * <pre>
 *  m[offset +  0] m[offset +  4] m[offset +  8] m[offset + 12]
 *  m[offset +  1] m[offset +  5] m[offset +  9] m[offset + 13]
 *  m[of
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值