没事干总要学点东西,这个系列的文章既是我的笔记,又是一篇教程(给我自己的教程),主干内容参考一篇国外教程,教程很粗略,但是代码不错,所以我借着它的脉络,补充网上的资料来扩充内容,每一句话都要理解是什么意思,还有实现的原理。不定期更新,国外教程网址在文末,有兴趣的同学可以去看看。
一、OpenGL简介
OpenGL是一套开放图形库API(的标准),因此可以跨平台,主要应用领域有医疗、工程、AR、电子游戏等领域,主要竞争对手是DirectX。
二、OpenGL环境配置
For Linux
由于种种原因,国内访问不了官网的网址,因此采用开源软件库Mesa,它的API与OpenGL兼容,只需要确保安装了下列库和软件:
cmake make g++ libx11-dev libxi-dev libgl1-mesa-dev libglu1-mesa-dev libxrandr-dev libxext-dev libxcursor-dev libxinerama-dev libxi-dev
(使用aptitude将会更智能的替你解决依赖关系)
For Windows
有glut软件包下一个即可
另外,无论是哪个平台,CMake都是绝佳的构建项目的工具,Qt Creator有内置的CMake支持!
三、OpenGL的渲染流程
1.VAO(Vertex Array Object顶点数组对象)和VBO(Vertex Buffer Object顶点缓冲区对象)
很久以前,OpenGL是只有VBO的......(才怪,OpenGL3.0就引入VAO了!)
简单的来说,VAO“高于”VBO,是VBO和OpenGL之间的一个抽象层,其中保存了顶点的颜色,深度,位置......属性,可以更便捷的操纵VBO而不用进行繁琐的重复操作。
2.Shader(着色器)
分为顶点着色器(Vertex Shader)和片元着色器(Fragment Shader)
顶点着色器处理VBO(和VAO)提供的顶点信息,每一个VBO(VAO)都会执行一次顶点着色器。
然后,OpenGL会将这些数据组装成图元(prmitive),把他们变成真正可用的数据。
接下来OpenGL会对图元进行光栅化,把他们从图元变成一个个片元,接着片元着色器将会发生作用,对每一个片元进行处理,把没有颜色的片元变成五颜六色的像素。
3.交给GPU和CPU
学习笔记更新到#6+GLSL笔记
教程:http://www.opengl-tutorial.org/beginners-tutorials/