顶点缓冲区VBO和索引缓冲区IBO的结合使用
2017-07-06 14:12
399 查看
virtual void onInit() { //清空窗口为黑色 glClearColor(0,0,0,1); //设置视口的位置和大小--尝试改变视口的位置和大小 glViewport(0,0,(GLint)_winWidth,(GLint)_winHeight); //创建VBO-顶点缓冲区 glGenBuffers(1, &_vertexId);//若创建多个,第二个参数应该是数组 //绑定并指定buffer类型为VBO glBindBuffer(GL_ARRAY_BUFFER,_vertexId); float x = 100; float y = 100; float w = 100; float h = 100; CELL::float2 pos[] = { CELL::float2(x, y), CELL::float2(x + w, y), CELL::float2(x + w, y + h), CELL::float2(y, y + h), }; //将内存中的顶点数据传送进显存 glBufferData(GL_ARRAY_BUFFER,sizeof(pos),pos,GL_STATIC_DRAW); //切换状态 glBindBuffer(GL_ARRAY_BUFFER, 0); //创建索引缓冲区 glGenBuffers(1, &_indexId); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,_indexId); //指定顶点索引 unsigned short arIndex[] = { 0, 1, 2, 3, 0 }; //数据传递到显卡 glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(arIndex), arIndex, GL_STATIC_DRAW); //切换状态 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0); }
渲染
virtual void render()
{
//清除深度缓冲和颜色缓冲
glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
//指定视口大小
glViewport(0,0,_winWidth,_winHeight);
//创建一个投影矩阵
CELL::matrix4 screenProj = CELL::ortho<float>(0, float(_winWidth), float(_winHeight), 0, -100.0f, 100);
glBindBuffer(GL_ARRAY_BUFFER,_vertexId);
_shader.begin();//启用顶点相关属性
{
glUniformMatrix4fv(_shader._MVP,1,false,screenProj.data());
glUniform4f(_shader._color,1,0,0,1);
glVertexAttribPointer(_shader._position, 2, GL_FLOAT, false, sizeof(CELL::float2), 0);
unsigned short arIndex[] =
{
0, 1, 2, 3, 0
};
glDrawElements(GL_LINE_STRIP,5,GL_UNSIGNED_SHORT,arIndex);
}
_shader.end();//关闭顶点相关属性
glBindBuffer(GL_ARRAY_BUFFER,0);
eglSwapBuffers(_display,_surface);
}
相关文章推荐
- Opengl ES IBO(索引缓冲区) VBO(顶点缓冲区)创建一个立方体
- OpenGL ES 学习教程(五) 极速绘制,使用 VBO (顶点缓冲区对象)!
- opengles中使用vbo(顶点缓冲区)
- OpenGL ES 3.0 顶点缓冲区VBO使用
- opengles中VBO和IBO结合使用
- OpenGL系列教程之八:OpenGL顶点缓冲区对象(VBO)
- [OpenGL ES 06]使用VBO:顶点缓存
- OpenGL顶点缓冲区对象(VBO)
- 索引顶点的VBO与多重纹理下的VBO
- OpenGL VBO顶点缓冲的使用
- GLES 顶点缓冲区对象(VBO)
- [OpenGL ES 06]使用VBO:顶点缓存
- OpenGL VBO顶点缓冲的使用
- OpenGL顶点缓冲区对象(VBO)
- OpenGLShader 编程系列 - 顶点缓冲区的使用
- OpenGL--顶点数组与缓冲区中使用顶点数组
- [OpenGL ES 06]使用VBO:顶点缓存
- OpenGL VBO顶点缓冲的使用(转)
- D3D学习笔记之四---使用索引缓冲区绘制图形
- [OpenGL ES 06]使用VBO:顶点缓存