OpenGL-ES 学习流程
论入门学习,DirectX比OpenGL友善得多,版本简单明了,装好SDK开VisualStudio就可以跑,文档案例齐全,省心省事。OpenGL有多麻烦?网上一搜,被告知需要glew;想在不同系统下快速搭建开发环境?再去找找glfw。搜个教程,又要求glut。开始写代码了,OpenGL里面没有内置数学库,再来个glm吧。另外也没有输入、资源加载的支持。虽然自己可以多写点代码当学习,这种分散精力的事还是非常难受的。
说正事,学OpenGL到底指学什么? 【0.如何搭建OpenGL开发环境?如何运行一个最简单的OpenGL程序?】 如果是ES版本,就是EGL的使用了。永远的第一步。没啥技术含量,但是环境搭建总能卡你好一阵子。 【1. OpenGL将一个3D物体绘制到2D屏幕上,中间到底经历了哪些操作流程? 】 大部分计算机某项技术的教程,开头都会开一章写"Hello World"的例子,快速展示技术的整体面貌,不深究技术细节。OpenGL的流程就是那张图形管线表了(书第一章,图1-1),如果迷失在OpenGL的细节里,不妨经常回来看看图,好明白自己卡在哪了。不要期望第一遍就把书看懂,第二遍第三遍跑不了的。
PS. 一般面试都会问渲染流程。 【2.对于一个3D物体,OpenGL是怎么组织其数据的?】 这部分是涉及内容最广的一块。从这里开始,大量概念扑面而来,基本上都会搁浅一阵,代码反复写上好几遍才能吸收,比如:
一个3D物体,在数学空间里,我们是使用顶点(Vertex)和顶点之间的关系来描述的。点连成线,线构成面,面构成网格(Mesh),网格就是3D的。 因为顶点这个概念,有了顶点属性、顶点数组; 为了优化顶点绘制,又有了缓冲区对象(VBO/VAO)。 三个顶点可以构成一个面,面上可以有纹理(Texture),然后又要去理解各个纹理设置参数。 概念很清晰,算不上难,但各种新知识一下子撞过来,很容易懵逼。除了多写几遍代码,无捷径可走。Debug也繁琐,因为显存中的数据没法直观查看,有时候顶点数据提交错误,无法迅速定位源头,只能逐行输出排错,分析代码还是需要细心的。 【3. 数据结构确定了,那OpenGL是怎么去操作他们的?】 固定渲染管线已经入土了,现在是Vertex/Fragment Shader的舞台,所以,来写GLSL吧! Shader这个东西,Debug略麻烦。不过有个网站推荐:www.shadertoy.com,直接在这里写可以不用管C++代码的处理,是不错的GLSL的练习场地,写得郁闷了还可以看看大牛的作品刺激下动力。 【4. 3D的场景怎么转化成2D图片,裁剪和剔除是怎么回事?】 这个就需要数学功底去理解了。 基本都是矩阵计算的内容,所以看OpenGL前要先把线性代数学好···· 【5. 进阶巩固。 】 一个是帧缓冲区(FBO)的内容,后续延伸到Shadow Mapping的实现方法··· 另一个是Shader的比较复杂实现,包括光照、粒子系统等等。这部分的例子理解需要图形学基础。OpenGL在这里就是真正当工具使用了 -- 说到底,OpenGL本身就是个工具,学OpenGL的目的就是实现这里的各种效果。 仔细审视下OpenGL里面的难点,除了数学知识,就是涉及概念多,API量大的问题,所以爬上这个学习陡坡的方法只有一个: 写代码 写代码 写代码