前言
openGL的名字如雷贯耳,不管是游戏开发程序员还是普通的应用开发工程师,都知道它的应用非常广泛。但学习openGL是一项比较有难度的事情,主要是门槛比较高,涉及到一些数学知识(特别是线性代数的矩阵)、图形学的知识、一大堆专业术语、API的使用。
因此,要想真正入门openGL和OpenGL ES,找到好的学习资料以及学习路线图,是非常有必要的。本文针对Android开发人员,提出一条较平缓的学习路径。
学习路径
- 首先,先对openGL有一个整体的认识,比如先大致看下其官网的介绍,以及维基百科的介绍。
- 通读一遍learnopengl的前两章节:
Introduction
和Getting started
。 - (optional)如果觉得阅读步骤2中的英文资料吃力,可以阅读其中文翻译版的
简介
和入门
两章。 - 步骤2和3对应的源码仓库为https://github.com/JoeyDeVries/LearnOpenGL。
- 阅读Android官方网站关于Android平台openGL的指南及其demo(java层demo,基于 Android framework API。Android平台支持两种方式的openGL编程–Android supports OpenGL both through its framework API and the Native Development Kit (NDK)),并熟悉和练习google官方的openGL ndk demo代码。
- Android平台openGL入门blog、书籍和demo。其中demo分为java版本和ndk版本。
- openGL核心概念的专业性分析文章。
- (optional)WebGL对比阅读,(
Note:WebGL 1.0基于OpenGL ES 2.0,WebGL 2.0基于OpenGL ES 3.0
)。比较好的WebGL教程及其Github仓库,这系列课程从新的角度来讲解WebGL,非常不错的资料,可以作为对照参考。 - 学习完1-8,再回过头来,回到openGL的官网。正所谓由简入繁,化繁为简。最终回到最本质最权威的起点,那就是读openGL的官方规范,选择你当前学习的版本,比如
glspec33.core.pdf
进行深入研究和学习。当然这个阶段再辅以业内较经典的openGL专著一起学习更佳,可在京东或当当网上面搜寻。 - 实际动手编写demo甚至中小型游戏(当然,这个在前面学习的步骤也必不可少,实际动手比理论更重要,边学习变实践是最佳的学习途径),掌握OpenGL在各平台下编写游戏的环境搭建、工具使用等配套知识和技能。更重要的是从实际工程的视角来运用OpenGL,这个阶段可以也可以对照当前市面上主流的游戏引擎(其图形引擎的底层基本上都使用OpenGL来实现),了解将OpenGL抽象到更高层次,从而进一步提升游戏开发效率,也使得普通开发人员不需要深入学习和了解OpenGL即可进行游戏开发。
- 参照开源的游戏引擎,自己动手,基于OpenGL开发游戏引擎的图形引擎模块(甚至整套引擎,包括物理系统、音频等其他引擎子模块)。
参考资料
- https://webglfundamentals.org/
- https://www.opengl.org/
- https://github.com/greggman/webgl-fundamentals
- https://github.com/greggman/webgl2-fundamentals
- http://webgl2fundamentals.org/
- http://www.songho.ca/opengl/index.html
- https://learnopengl-cn.github.io/
- http://learnopengl.com
- http://www.learnopengles.com/android-lesson-one-getting-started/
- https://github.com/learnopengles/Learn-OpenGLES-Tutorials
- https://github.com/JoeyDeVries/LearnOpenGL
- https://open.gl/introduction
- https://www.khronos.org/
- https://www.khronos.org/registry/
- https://www.khronos.org/registry/OpenGL/
- https://www.khronos.org/registry/OpenGL/index_es.php
- https://www.khronos.org/registry/OpenGL/index_gl.php
- https://developer.android.com/guide/topics/graphics/opengl
- https://github.com/googlesamples/android-ndk/tree/master/hello-gl2