OpenGL 系列学习之一

一直计划先出一套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  

在现代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:
 
  
#version 110
void main() {
     gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
}
shader在程序中需要:加载、编译、链接等步骤。详见shader.h  & shader.cpp


(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


你可能感兴趣的:(OpenGL,ES)