创建缓冲流程:
1.申请缓冲id glgenBuffers
2.将数据写入buffer glbufferdata
2.申请vertexArrayid glgenVertexArrays
3.设置顶点位置绘制起点 glvertexattributepointer glenablevertexattribarray(0)
4 设置顶点颜色绘制起点 glvertexattribtepointer glenablevertexattribarray(1)
5.设置文理坐标起点
6.绘制的时候,在display方法中调用drawArray函数
void testBuffer() {
GLfloat vertPos[] = {
-0.5,0,0,
0.5,0,0,
0,0.5,0
};
GLfloat vertColor[] = {
1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, // 颜色
};
GLfloat vertices[] = {
-0.5f, 0.0f, 0.0f, 0.5f, 0.0f, 0.0f, 0.0f, 0.5f, 0.0f, // 顶点位置
1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, // 颜色
0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f // 纹理坐标
};
// 创建缓存对象
GLuint VOId;
// Step1: 创建并绑定VAO对象
glGenVertexArrays(1, &VOId);
glBindVertexArray(VOId);
GLuint VBOId;
glGenBuffers(1, &VBOId);
glBindBuffer(GL_ARRAY_BUFFER, VBOId);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
// 顶点位置属性
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, (GLvoid*)0); // 紧密排列 stride也可以设置为 3 * sizeof(GL_FLOAT)
glEnableVertexAttribArray(0);
// 顶点颜色属性
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, (GLvoid*)(9 * sizeof(GLfloat)));
//glEnableVertexAttribArray(1);
// 顶点纹理坐标
glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 0, (GLvoid*)(18 * sizeof(GLfloat)));
//glEnableVertexAttribArray(2);
//glBindBuffer(GL_ARRAY_BUFFER, 0);
//glBindVertexArray(0);
glBindBuffer(GL_ARRAY_BUFFER, VBOId);
glBindVertexArray(VOId);
}
每一个文理只能在一个文理单元中设置
gluniform1i(location , v0)
该方法中,location为文理贴图在shader中的名字
vo为文理单元的编号,而不是文理贴图的id
参考网址 https://blog.csdn.net/linuxheik/article/details/78906568