顶点数组对象(VAO)顶点缓冲区对象(VBO)
转载请声明出处:http://blog.csdn.net/xiaoge132/article/details/51512296
用VAO方式来绘制一个三角形,
步骤一:
VAO,VBO对象的创建,glGenVertexArrays()是分配定点数组对象,这里说明有一个VAO对象,并且已经使用未初始化的定点数组集合的默认状态进行了数值的初始化.
glGen*类型负责分配不同类型的对象分配
glBindVertexArray()负责创建并且绑定一个定点对象.
glGenBuffers()在这里负责分配1个对象带数组gVBO里面,
glBindBuffer()函数负责在分配缓缓存的名称之后,用来绑定.在这里是将顶点数据绑定到缓存里,因此使用GL_ARRAY_BUFFER类型
glGenVertexArrays(1, &gVAO);
glBindVertexArray(gVAO);
// make and bind the VBO
glGenBuffers(1, &gVBO);
glBindBuffer(GL_ARRAY_BUFFER, gVBO);
步骤二:
三个三维点来组成一个三角形;下面来定义一个三角形:
GLfloat vertexData[] = {
// X Y Z
0.0f, 0.8f, 0.0f,
-0.8f,-0.8f, 0.0f,
0.8f,-0.8f, 0.0f,
};
步骤三:
给VBO分配数据,用于存储数据或者索引.
glBufferData(GL_ARRAY_BUFFER, sizeof(vertexData), vertexData, GL_STATIC_DRAW);
步骤四:
glEnableVertexAttribArray()函数是否启用索引相关的顶点数组
glVertexAttribPointer()是将要处理的所有数据输入到顶点着色器里面,在着色器里面用in变量
glEnableVertexAttribArray(gProgram->attrib("vert"));
glVertexAttribPointer(gProgram->attrib("vert"), 3, GL_FLOAT, GL_FALSE, 0, NULL);
GLSL传值
创建shader
glCreateShader();//创建shader对象
glShaderSource();//把shader源码传给对象
glCompileShader();//编译shader
使用shader
glCreateProgram(void);//创建程序容器对象
glAttachShade(GLuint program, GLuint shader);//将编译好的shader附加到程序里
glLinkProgram(GLuint program); //连接程序
glUseProgram(GLuint prog); //使用程序
shader的数据类型
同时再说下shader的数据类型,GLSL里面有attribute,uniform,varying数据类型
uniform是指程序里面传过来的,即不能对每个顶点设置该变量.
attribute是随不同顶点变化的全局变量,只能在定点着色里面使用.
varying是指vertex shader里面传给pixel shader里面使用的,必须同时在vertex shader,pixel shader里面声明.