没有合适的资源?快使用搜索试试~ 我知道了~
如何基于OpenGL实现视频处理
5星 · 超过95%的资源 需积分: 50 177 下载量 118 浏览量
2015-07-03
21:23:25
上传
评论 14
收藏 944KB DOC 举报
温馨提示
试读
29页
刚才上次了一份OpenGL源代码,实现了3D建模和视频播放功能。 看到很快就有人下载,很高兴能够为大家做些什么。 这个文档总结了使用OpenGL实现视频播放和视频压缩功能,还可以实现视频增加水印。图片转换视频等功能。 是一个总结性的文档。 有兴趣了解的可以看下我的博客(刚发布到微博,还处于审核中),如果希望下载。也可以下载此文档。
资源推荐
资源详情
资源评论
第 1 章 OpenGL ES
3D 图形编程首先 OpenGL。OpenGL 的英文全称是 OpenGL Graphics
Library,中午名称是开发式图形库。OpenGL 为程序开发人员定义了一个跨
平台的图形硬件编程接口,可用于三维图像(二维亦可),功能非常强大,适
用于从普通 PC 到大型图型工作站等计算机。它采用 LGPL 或者 GPL 许可证。
在行业领域中被广泛接纳,自其诞生之日起已经催生了许多优秀的应用程序。
OpenGL 独立于操作系统,广泛应用在 CAD、能源、娱乐、游戏开发、制造业、
制药业、虚拟现实等行业。OpenGL 定义的软件接口与硬件无关,具有很好的
移植性,应用非常广泛。
OpenGL ES 是 OpenGL 的子集,针对手机、PAD、游戏机等嵌入式系统
设计。OpenGL ES 是 OpenGL 的裁剪版,去除了四边形、多边形等复杂图元,
这些图元不是绝对必要的特性。既然决定使用 OpenGL ES,就需要决定使用
的 OpenGL ES 版本,目前主要存在的 OpenGL ES 有 OpenGL ES
1.0/1.1、OpenGL ES 2.0,这两个版本的差异非常大。其中对重要的是
OpenGL ES 2.0 使用了可编程管线技术,允许开发者通过编程的方式控制顶
点着色器和片元着色器,实现比 OpenGL ES 1.x 更酷的界面效果。
1.1 3D 图形学理论基础
现在,我们队 OpenGL 有个初步的认识了。作为图形开发人员需要了解一
些 3D 图形学的理论,虽然这不是 OpenGL 初学者的必需条件。正如你知道的
OpenGL 已经替我们完成了几乎所有的图形处理和计算,不过,了解 3D 图形
学相关的知识对我们理解和使用 OpenGL 进行开发将会大有帮助。
基于 OpenGL 的 Android
系统视频转换
功能实现
1.1.1 点、线段、距离
图形学中点是最基本的几何对象。为了便于描述,会把点放到坐标系中进
行描述,一般利用直角坐标系来确定点的位置。例如,原点的坐标为(0,0),位
于两个坐标轴相交的地方。通常,我们确定 x 轴为水平方向,并且 x 轴的正方
向向右,y 轴为水平方向,并且 y 轴的正方向向上。
直角坐标系
只是用 X/Y 轴表示的为 2D 空间,两个点 P1 和 P2 确定一条线段。假设 P1
和 P2 的坐标分别为( 和 )和( 和 ),那么它们之间的距离为:
如果在 2D 坐标系的基础上增加一个 Z 轴,即可建立 3D 空间。3D 空间中
的点需要使用三个坐标表示,根据 Z 轴方向,可以分为左手系和右手系。如上
图所示坐标系,通过沿 X 轴正方向到 Y 轴正方向握拳,大拇指所致的方向即为
Z 轴方向,Z 轴朝向屏幕外面,这就是右手坐标系,同理,我们可以使用左手
确定 Z 轴的方向朝向屏幕里边。
3D 空间中的距离计算公式为:
通常情况下,大多数程序开发人员都是用右手坐标系,而且 OpenGL 也采
用这种坐标系,所以后续我们使用的都是右手坐标系。
1.1.2 向量和矩阵
介绍向量之前,有必要先介绍下标量。标量表示数量的大小,仅仅是一个
数值而已。例如绳子的长度,物体的重量等。
向量表示为同时具有数值和方向的量,相当于具有方向的标量。例如,物
体运动的速度,它不仅具有表示大小的数值(速率),而且还有一个方向用于
表示行进的方向。通常情况下,在 2D 空间向量具有 x、y 两个分量,在 3D 空
间中向量具有 x、y、z 三个分量。比如球体表面的法线就是向量,它不仅有大
小而且具有方向性。
很多时候,我们只关心向量的方向而不在乎他的大小,在这样的情况下,
使用单位向量变得非常方便。所谓的单位向量就是大小为 1 的向量,通常,单
位向量也称为标准化向量。一个非零向量的归一化表示如下:
其中 是向量的模(也称为大小,是向量坐标和原点的距
离)
具有相同维数的向量可以进行加减法运算。就是说,参加加、减运算的两
个向量都是 2 维、3 维或者 4 维等,具体运算规则,需要把对应的分量相加。
例如向量 和向量 相加结果为 ,
同理我们可以计算出向量 。
此外,向量还支持点乘和叉乘运算。
点乘描述了两个向量的相关性,运算结果是一个标量,表示两个向量的“相
似”程度。
如果向量 A 和 B 的长度都是 1,公式简化为:
然后通过反余弦计算,可以知道向量 A 和向量 B 之间的夹角 。
叉乘仅可应用于 3D 场景,与点乘不一样的是,向量叉乘得到的是一个向
量。向量 A 和向量 B 叉乘结果的大小为 ,方向垂直于向量 A 和向量
B,具体指向,可以使用右手定则进行判断。例如 ,在 A、B 交叉点伸出
右手,食指指向 A,弯曲其他手指直到指向 B,此时,拇指的指向就是 的
指向。向量的这一性质可以帮助我们找出平面的法向量。
矩阵是 3D 图形学的重要理论基础。在 OpenGL 3D 图形开发中,物体位
移、缩放、旋转等变换和坐标系的转换都使用矩阵表示,对于学习过线性代数
的读者肯定不会陌生,我们通过行数 列数的方式定义矩阵尺寸。对于 矩
阵 M 可以表示为:
方阵、 对角矩阵、单位矩阵是特殊的矩阵。
其中,方阵表示函数和列数相同的矩阵,如上所示矩阵 M。如果方阵的对
角线元素(方阵中行号和列好相同的元素 、 、 )外,所有非对角元素
都是 0,那么我们称之为对角矩阵。
而单位矩阵是更加特殊的方阵,它是 的矩阵,而且对角线元素都是
1,其余元素都是 0。它具有特殊的性质。
任何矩阵和一个单位矩阵相乘,结果还是原来的矩阵。
矩阵可以和标量相乘,相当于矩阵中的么个元素乘以该标量。
向量是只 有一行或者一列的矩阵,它可以和
矩阵相乘,并且存在两种组合。行向量左乘矩阵得到行向量;列向量右乘矩阵
得到列向量。其中行向量的列数和矩阵的行数相等,列向量的行数和矩阵的列
数相等。例如:
图形处理过程中,经常会遇到平移、缩放、旋转等几何变换操作,在
OpenGL 开发中都是通过矩阵变换来实现的。可以说几何变换是图形处理的核
心内容。举个简单的例子,通过如下矩阵运算可以发现结果 ,
, 。
所以,矩阵 M 代表了一个在 X 轴移动距离 a,在 Y 轴移动 b,在 Z 轴移动
c 的平移操作。
细心的读者可以能已经发现了,我们在三维坐标空间的矩阵运算使用的是
矩阵,没错。这种表示方法叫做齐次坐标表示,基本思想是在 n+1 维空间
解决 n 为空间的几何问题,它使用了 n+1 个分量表示 n 个分量的向量。一般齐
次坐标表示不具备唯一性,通常情况下,计算机图形学中会采用规范化齐次坐
标,即使用(x,y,1)的形式表示点(x,y)。
同理,我们也可以利用矩阵运算实现缩放和旋转的效果。
说明:旋转矩阵 表示了点 P 绕轴向量 旋转 度,运算比较复
杂,由于本章只是介绍 3D 图形相关的基础知识,所以就不进行验证计算了,
有兴趣的读者可以参考其他资料进一步研究学习。
剩余28页未读,继续阅读
只为个人兴趣
- 粉丝: 10
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页