{
1:顶点缓冲区 GL_ARRAY_BUFFER
2:索引缓冲区 GL_ELEMENT_ARRAY_BUFFER
3:帧缓冲区 GL_FRAMEBUFFER/GL_RENDERBUFFER
4:封装
}
{1:顶点缓冲区 GL_ARRAY_BUFFER
OpenGL-ES 中 Vertex Arrays/Buffer Objects 在这个阶段发生
struct VX{
float x, y, z;
float u,v;
float r, g, b,a;
};
float zOff=-2.1f;
VX vertexs[] ={
{ -1.0f,-1.0f, zOff, 0.0f,0.0f, 1.0f,1.0f, 1.0f,1.0f },
{ 1.0f,-1.0f, zOff, 1.0f,0.0f, 1.0f,1.0f, 1.0f,1.0f },
{ 1.0f, 1.0f, zOff, 1.0f,1.0f, 1.0f,1.0f, 1.0f,1.0f },
{ -1.0f,-1.0f, zOff, 0.0f,0.0f, 1.0f,1.0f, 1.0f,1.0f },
{ 1.0f, 1.0f, zOff, 1.0f,1.0f, 1.0f,1.0f, 1.0f,1.0f },
{ -1.0f, 1.0f, zOff, 0.0f,1.0f, 1.0f,1.0f, 1.0f,1.0f },
};
unsigned vbId; //数据id
{创建数据
glGenBuffers(1,&vbId);
glBindBuffer(GL_ARRAY_BUFFER,vbId); //绑定/取消缓冲区
glBufferData(GL_ARRAY_BUFFER,sizeof(vertexs),vertexs,GL_STATIC_DRAW);//设置缓冲区数据
glBindBuffer(GL_ARRAY_BUFFER,0);//绑定/取消缓冲区
}
{使用数据
glBindBuffer(GL_ARRAY_BUFFER,vbId);//绑定/取消缓冲区
glVertexAttribPointer(shader._position,3, GL_FLOAT, false, sizeof(VX),(void*)0);
glVertexAttribPointer(shader._tpos, 2, GL_FLOAT, false, sizeof(VX),(void*)(3*sizeof(float)));
glVertexAttribPointer(shader._color, 4, GL_FLOAT, false, sizeof(VX),(void*)(3*sizeof(float)+2*sizeof(float)));
glDrawArrays(GL_TRIANGLES,0,6);//三角形 (三个点画一个三角形)
glBindBuffer(GL_ARRAY_BUFFER,0);//绑定/取消缓冲区 注意:使用完就制空,OpenGL-ES是状态机
}
切记:缓冲数据在什么地方用在什么地方制空,不指空的话,下面的数据全是这个缓冲数据
注意:
glBufferData(,size,,) size->sizeof(vertexs)是数据大小不是偏移量大小
glVertexAttribPointer (,,,,stride,);stride->sizeof(VX)是偏移量大小不是数据大小
}
{2:索引缓冲区 GL_ELEMENT_ARRAY_BUFFER
OpenGL-ES 中 Vertex Arrays/Buffer Objects 在这个阶段发生
unsigned ibId; //数据id
{创建数据
glGenBuffers(1,&ibId);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,ibId); //绑定/取消缓冲区
glBufferData(GL_ELEMENT_ARRAY_BUFFER,sizeof(vertexs),vertexs,GL_STATIC_DRAW);//设置缓冲区数据
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0); //绑定/取消缓冲区
}
{使用数据
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,ibId);//绑定/取消缓冲区
glDrawElements(绘制模式,绘制数据大小,数据类型,);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0);//绑定/取消缓冲区 注意:使用完就制空,OpenGL-ES是状态机
}
{code
struct Vertex {
float x, y, z;
float u,v;
float r, g, b,a;
};
Vertex positionData[] = {
-1.0f, 1.0f,-1.0f, 0.0f,0.0f, 1.0f, 1.0f, 1.0f,1.0f, // 上左后
-1.0f, 1.0f, 1.0f, 0.0f,1.0f, 1.0f, 1.0f, 1.0f,1.0f, // 上左前
1.0f, 1.0f,-1.0f, 1.0f,0.0f, 1.0f, 1.0f, 1.0f,1.0f, // 上右后
1.0f, 1.0f, 1.0f, 1.0f,1.0f, 1.0f, 1.0f, 1.0f,1.0f, // 上右前
-1.0f,-1.0f,-1.0f, 0.0f,0.0f, 1.0f, 1.0f, 1.0f,1.0f, // 下左后
-1.0f,-1.0f, 1.0f, 0.0f,1.0f, 1.0f, 1.0f, 1.0f,1.0f, // 下左前
1.0f,-1.0f,-1.0f, 1.0f,0.0f, 1.0f, 1.0f, 1.0f,1.0f, // 下右后
1.0f,