凭什么, 他能在30天打通一门新的技术

495 阅读4分钟
原文链接: mp.weixin.qq.com

没有广告,只有诚意

下面是我的学习opengles的过程,经历了多次实践试错,能够快速的形成知识的学习思路,切入方向,最终达到自己掌握此门技术的目标。

1 百度概念,搜索概念

opengl es它的基础原理,理解到它使用了GPU图像处理单元,完成快速的运算,达到图像变换的过程,更好的性能。

2 演示Demo

它的基础框架,需要清晰它的本质,从最简单的demo去看,不要一上来就是一个掺杂很多知识点的项目,那样会使你迷失,抓不到本质。网上找了几份demo,阅读gpuimage的开源项目,让脑子形成一个概念。

这里具体为:

https://github.com/CainKernel/EGLNativeRender  快速打通android opengles使用环境

https://github.com/melody1237/GUPImageFilter  快速学习如何使用shader做特效

3 学习

这里就是靠着大量的时间,持续性投入,让自己熟悉环境。这里通过学习网络上的知识,搜索glsl的着色器脚本编写,这里看的是《OpenGL着色语言 中文高清版 》,一个GPU使用过程的顶点和片元着色器都在起着什么作用。如何使用离线渲染FBO,完成渲染缓存。

4 实践

网络文章,总是会是一个点的叙述,它对于一个准确问题来说,很快能够找到答案。这里看了一个整体系列的讲解,

https://blog.csdn.net/junzia

而我在学习知识时候,会在阅读中,快速形成推论,让自己一直迷惑的知识点,必须强迫自己打通。因为它阻碍了我的整体理解,让我无法形成整个处理流程。

于是,这里购买了一本书《opengl es 3.0游戏开发》上卷,让自己本来急切追寻答案的过程,降缓速度,在捧着纸质书的缓慢节奏下,慢慢理解通透。同时也看了《Opengles应用开发实践指南android版 》

5 测试验证成果

最终完成实现一个特效,保证性能OK。

中间还找到一个工具,https://github.com/andersmalm/glslp ,可以将glsl文件转成cpp文件

以上是这段时间,业余时间在投入的一件事情。经过上面的拆解,我想告知的是,你需要掌握一个方法,能够让你快速学习,切入到一个陌生的知识体系中,能够迅速响应,完成自己的诉求。而这几个步骤,便是我长期学习一直使用的模式。

6 回顾知识点

surface是一个表面,绘制是发生在这里。我们普通的view,绘制是在surface上,建立了一个canvas画布,然后使用它的方法,来完成在surface上的效果。android这里使用的是 skiacanvas。一般的surface是整个view树共用的一个表面。

而surfaceview,使用独立的surface,这时候我们也可以使用canvas作画,但实际来讲,我们希望使用opengl来通过GPU绘制,将CPU的运算,腾出来做别的事情,让GPU做图像处理相关的运算。我们怎么做的呢?

使用eglsurface将surface封装一下,此时我们便搭建了opengl环境。此时,使用gl方法,则会操作到此surface,而中间的特效处理逻辑,则会交给GPU,我们配置顶点着色器以及片元着色器即可。

这里可以推荐学习下SDL2·0项目

http://www.libsdl.org/

SDL是一个跨平台的渲染器,可以快速使用它来完成渲染开发,当然它除此之外,也没有别的功能,显得单一。同时还有个bgfx开源的渲染库

https://github.com/bkaradzic/bgfx

用的也比较广泛,我也只是提炼出来一些方法,具体流程没做深入研究。

7 付费

做自己擅长的部分,将不擅长的交给擅长的人。在学习shader期间,找了一些资源。这里感谢 何俊林 的推荐,进入一个专业的opengles学习群。在群里找了一些热心的网友,帮忙快速搭建了一些模型,同时沟通,学习,快速的整理自己的体系。当然,这一切都是有偿的,别人的时间在帮你做你的事情,付费意识必须建立起来。因为, 只有春种,才能等到秋收

8 总结

知识学习,没有捷径,但是朴素的方法论,绝对是你的一个指引。在学习期间,总是被一些概念折磨到死,脑子里一度怀疑自己能力不足,而继续坚持下去,终于看到曙光的兴奋与满足,成就感油然升起。

没压力的学习,成长缓慢。学习,还是带些功利心,目标性好一些。当你以用为目的的学习,便能展开想象,持续搜索,思考,只为完成你的目标,如此的学习,才能高效。

相信了偶然,你便错失了必然

赚钱,没有想的那么难