1 int width, height; 2 glfwGetFramebufferSize(window, &width, &height); 3 const float ratio = width / (float) height; 4 5 glViewport(0, 0, width, height); 6 glClear(GL_COLOR_BUFFER_BIT); 7 8 mat4x4 m, p, mvp; 9 mat4x4_identity(m); 10 mat4x4_rotate_Z(m, m, (float) glfwGetTime()); 11 mat4x4_ortho(p, -ratio, ratio, -1.f, 1.f, 1.f, -1.f); 12 mat4x4_mul(mvp, p, m); 13 14 glUseProgram(program); 15 glUniformMatrix4fv(mvp_location, 1, GL_FALSE, (const GLfloat*) &mvp); 16 glBindVertexArray(vertex_array); 17 glDrawArrays(GL_TRIANGLES, 0, 3); 18 19 glfwSwapBuffers(window); 20 glfwPollEvents();
glViewport: 设置gl视窗大小, 0,0在应用程序窗口左下角。 我个人理解就是设置GL画板的位置以及大小。
glClear(GL_COLOR_BUFFER_BIT); 清除颜色,结果就是全屏黑
mat4x4 m, p, mvp;创建了三个矩阵4*4
mat4x4_identity(m); 初始化m, 行等于列都是1,其余都是0
mat4x4_rotate_Z(m, m, (float) glfwGetTime());//glfwGetTime为帧时间t,m进行选择绕z轴选择t角度,得到一个新的m内容
mat4x4_ortho(p, -ratio, ratio, -1.f, 1.f, 1.f, -1.f);// 初始化p, 正交模式
mat4x4_mul(mvp, p, m); mvp = m * p; 这里其实是在进行适配,对原始矩阵m做一个x轴的缩放
glUseProgram(program); // 告诉GL使用自定义画图程序program
glUniformMatrix4fv(mvp_location, 1, GL_FALSE, (const GLfloat*) &mvp); // 设置全局变量。 全局变量是一个矩阵类型
glBindVertexArray(vertex_array);// 给应用程序设置顶点数据
glDrawArrays(GL_TRIANGLES, 0, 3);// 画个三角形,0,3 表示使用vertex_array[0], vertex_array[1], vertex_array[2]三个顶点数据
glfwSwapBuffers(window); 缓存区数据成像