一直计划先出一套OpenGL学习教程,可是一直时间比较紧张,需要做的事情太多,一直拖延了,
希望每天挤出一点时间记录点东西。
先主要包括如下内容吧:
(1)开发环境搭建
(2)Shader使用
(3)纹理
(4)光照(Ambient、 Specula、r Attenuation、Gamma、环境光、Spot光、点光、多光源)
(5)动画
(7)摄像机、输入
(8)FBO
(9)FOG
(10)Terrain-lod
(11)Sky
(12)拾取
(13)水纹
(14)阴影
(15)光线跟踪
(16)Bloom
(17)粒子
(18)SSAO
(19)BillBord
(20)边缘检测
最终会将代码都提交到GitHub ,也使用Cmacke跨平台编译,不过目前只针对Windows平台进行调试。
本系列主要基于以下实现,
(1)Visual 2013
(2)GLEW、GLFW and GLM 、FreeImage 介绍: http://blog.csdn.net/jaccen2012/article/details/50067237
其中GLEW是opengl扩展库,获得opengl不再是#include <GL/gl.h>
在现代OpenGL中,API由运行时决定而不再是编译时期,GLEW处理运行时加载的Opengl api
GLFW :可以由此创建window、接受鼠标键盘事件
GLM:是一个数学库,与GLSL中函数接口非常类似
FreeImage:主要是用于加载图像纹理。
(3)shaders 由于opengl2.0开始都不再使用固定管线,而是可编程管线。所以demo中也会使用大量shaders。其中:顶点shader后缀为vsh,Fragment shader后缀为fsh
其中shader介绍详见:http://blog.csdn.net/jaccen2012/article/details/48175443
例如:
Vertex shader:
#version 110 -------GLSL version 1.1 attribute vec3 vert; void main() { gl_Position = vec4(vert, 1); }
Fragment Shader:
shader在程序中需要:加载、编译、链接等步骤。详见shader.h & shader.cpp#version 110 void main() { gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0); }
(5)VBO 跟VAO
shader运行在GPU上,而其他c++代码是运行在CPU的,这时你就需要一种方式将数据从CPU发送到GPU,。我们可以先你简单数据为例,比如一个三角形(当然在项目中很多是个模型,这就需要利用3dmax或者maya制作出模型,还有相关的颜色、纹理坐标以及还有其他信息。然后通过程序解析导入顶点数据,数据量都比较大,一般几百上千,甚至上万顶点)
这就需要Vertex buffer Objects(VBO)和Vertex Array Objects(VAOS)。VBO跟VAO就是用来将数据从C++程序发送到shaders来渲染;
所有这些顶点数据必须在渲染之前通过VBO送到显卡,当需要渲染的时候,可以通过开启VAO来描述如何从vbo中拿数据到shader变量中,
VBO详细见:http://blog.csdn.net/jaccen2012/article/details/30120195
简而言之:VBO就是video memory buffer, 仅仅是一堆任何你需要的二进制数据
VAO:是VBOs跟shader 变量的链接器,描述了在VBO中存在的数据类型,以及数据需要发送到哪个shader变量中。
(6)Code
github