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

来源:互联网 发布:日本人物动态软件 编辑:程序博客网 时间:2024/05/01 04:26
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内部循环   }
0 0
原创粉丝点击