OpenGL程序的基本结构

每个OpenGL的程序的程序架构基本相同,具有相同的设计流程

下面简单介绍OpenGL的程序流程:

1、使用OpenGL之前先进行部分设置(此步需要注意,根据调用的OpenGL第三方库不同,程序初始化有一定差异),主要第三方库有Glfw Glew Glut,但是主要的初始化设置包括:库初始化设置、窗口大小设置、OpenGL环境设置

eg:

glutInit(&argc,argv);
glutInitDisplayMode(GLUT_RGBA);
glutInitWindowSize(512,512);
glutInitContextVersion(4,3);
2、初始化顶点数组对象

主要使用 glGenVertexArrays() glBinVertexArrays()
注意:在程序中产生定点数据时须经过此过程,如果直接读取文件中的数据,则跳过。

3、分配顶点缓存对象


GLuint vertexbuffer;
glGenBuffers(1, &vertexbuffer);
glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);


4、将顶点数据载入对象

glBufferData(GL_ARRAY_BUFFER, indexed_vertices.size() * sizeof(glm::vec3), &indexed_vertices[0], GL_STATIC_DRAW);

注:将顶点数据从对象传输到缓存对象中

5、初始化顶点与片元着色器

// Create and compile our GLSL program from the shaders
GLuint programID = LoadShaders( "StandardShading.vertexshader", "StandardShading.fragmentshader" );

此处需要指定两个着色器:顶点着色器(.vertexshader  .fragmentshader),使用LoadShader()来加载着色器。


6、使用OpenGL进行渲染

首先,清除帧缓存数据,glClear();

然后,进行绘制

最后,glFush()强制所有进行中的OpenGL命令立即完成并传输到OpenGL服务端处理

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// 1rst attribute buffer : vertices
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
glVertexAttribPointer(
			vertexPosition_modelspaceID,  // The attribute we want to configure
			3,                            // size
			GL_FLOAT,                     // type
			GL_FALSE,                     // normalized?
			0,                            // stride
			(void*)0                      // array buffer offset
		);

7、最后删除缓存区

// Cleanup VBO and shader
glDeleteBuffers(1, &vertexbuffer);
glDeleteProgram(programID);

至此,OpenGL一个程序基本完成

你可能感兴趣的:(OpenGL)