您的位置:首页 > 运维架构

OpenGL入门(二):绘制一个点

2016-06-24 11:34 453 查看
GLuint vbo;//存储顶点缓冲区句柄

static void renderSenceCB(){
glClear(GL_COLOR_BUFFER_BIT);//使用设置的清除缓存帧颜色清除帧
glEnableVertexAttribArray(0);//启用每个顶点属性的索引(这一节中我们还没使用任何 Shader,但是我们加载到缓冲器的顶点位置属性在固定函数管线(在没有绑定着色器的时候就自动启用固定管线)中被看做顶点属性索引为0。你必须启用所有的顶点属性,否则管线将接收不到数据)
glBindBuffer(GL_ARRAY_BUFFER, vbo);//绑定缓冲区
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);//管线如何在缓冲区内部解释数据,第一个参数指定索引,第二个参数构成属性的分量个数(X,Y,Z共3个)第三个参数指定每个分量的数据类型 第四个指定在管线使用前是否与要规范化 第五个参数表示两个相同属性的间隔(步长) 第六个参数缓存区中存储数据的偏移值
glDrawArrays(GL_POINTS, 0, 1);//绘制 第一个参数:绘制类型为gl_points 画点,第二个参数 第一个顶点的索引值 第三个参数 画点个数,
glDisableVertexAttribArray(0);//当不需要使用顶点时 禁用顶点
glutSwapBuffers();
}

static void initializeGlutCallback(){
glutDisplayFunc(renderSenceCB);

}

static void createVertexBuffer(){
Vector3f vector3f[1] ={Vector3f(0.0f,0.0f,0.0f)};
glGenBuffers(1, &vbo);//创建buffer 1:表示数量 &vbo
glBindBuffer(GL_ARRAY_BUFFER, vbo);//绑定buffer到指定目标 指定vbox存储内容
glBufferData(GL_ARRAY_BUFFER, sizeof(vector3f), vector3f, GL_STATIC_DRAW);//填充buffer数据 gl_static_draw/gl_dynamic_draw 指定画的方式
}

int main(int argc,char *argv[]){

glutInit(&argc, argv);//初始化glut
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA);//显示模式:双缓存 rgba模式
glutInitWindowSize(640, 480);//窗口大小
glutInitWindowPosition((GLUT_SCREEN_WIDTH-GLUT_WINDOW_WIDTH)/2,(GLUT_SCREEN_HEIGHT-GLUT_WINDOW_WIDTH)/2);//窗口位置

glutCreateWindow("Draw a Point");//窗口名称
initializeGlutCallback();//窗体回调
GLenum res = glewInit();//初始化glew
if(res!=GLEW_OK){
cerr<<"init glew error, error:"<<glewGetErrorString(res)<<endl;//打印glew 初始化错误
return 1;
}

glClearColor(0.0f, 0.0f, 0.0f, 0.0f);//设置清除缓存帧颜色
////////////////////

createVertexBuffer();//创建顶点buffer

////////////////////

glutMainLoop();//开启glut内部循环

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  opengl