闲话
今天是2016年的最后一天,阳光明媚,大家都放假我们却在为人类的明天而奋斗(加班),哈。以前接触一个新知识总想写下来,但刚开始学的时候感觉理解不深,不好下手也担心写错误人子弟,后来学会后就发现已然没有了写下来的冲动了。最近项目上接触到摄像头图像处理部分,由于android的限制,如不修改系统层,摄像头图像渲染是需要在界面上显示然后才能获取资源,而我们的项目是在后台录制,这显然出现冲突了,当然每个人都有自己的实现方式,我机缘巧合的看到了OpenGL,开始并不了解,经过一段时间摸索略有理解,所以开了这个文集记录,希望能把他走完。
如果你是来学技术的,那请跳过这一篇,因为这一篇不会有任何干货。
什么是OpenGL ES
如果想看一大堆的名词介绍请出门左转,OpenGL ES(OpenGL for Embedded Systems)实际上就是OpenGL(Open Graphics Library)在移动端的阉割版。那么OpenGL又是什么?他是跨编程语言、跨平台的编程接口或者叫图形库。
EGL又是什么
EGL实际上是OpenGL和设备(又或者叫操作系统)间的中间件,因为OpenGL是标准的,但设备是千奇百怪的,要对接就需要一个中间件做协调。也就是说一个设备要支持OpenGL,那么它需要开发一套相对应的EGL来对接。EGL主要负责初始化OpenGL的运行环境和设备间的交互,简单的说就是OpenGL负责绘图EGL负责和设备交互。
还需要知道什么
-
坐标系
作为一个程序猿你应该能理解,程序的世界就是对关心的事务各种抽象和量化,不关心的事务通通排除在外(所以不要试图和程序猿谈感情,如果他不能量化这感情有多少,那么他就会认为这个是一个BUG,哈哈)。那么在这里的世界就是一个坐标系,一个只有X、Y和Z三个纬度的世界,其它的东西都需要你自己来建设,你能用到的原材料就只有点、线和面(三角形),当然万能的主还是会施舍点阳光(光照)和颜色(材质)给你的。
-
线性代数
上学的时候我一直在想,线性代数干啥用?一个矩阵乘一个矩阵得到一个新的矩阵意义在哪里?单元矩阵、转置、投影、拉普拉斯变换、高斯变换等等,这些名词是否曾经在你脑海里一笑而过,然而你并不知道它们有什么卵用。实际上这都是根据世界上的事务和行为做抽象的依据,当然你不懂这些数学模型并不影响你在这个世界大展身手,但你要是懂的话,你在做一件事的时候你可能会有一种恍然大悟的愉悦。 -
“相机”
这里的“相机”和现实世界中的相机不是一个东西,但概念的相同的,都是捕获世界的景像呈现到二维平面上。这里的“相机”就是捕获这个三维世界的图像呈现到设备(屏幕)上的。
如下图:我们的世界中有一只茶壶,我们如何呈现?我们在世界中架设一个“相机”如左图,通过相机捕获到右图的图像,这样我们就能将这个世界展现到设备上了。同时我们可以调整“相机”的位置角度远近来观察这个世界。
结束语
作为一个教程或者解说型文章,我觉得图是相当重要的,但作图是相当麻烦的,后续得闲再写的时候尽量多的插图。
本人菜鸟如有错误你特么来打我啊,哈!
在2016年的最后一天祝愿大家在新的一年里代码永无BUG。