OpenGL新建窗口
1 安装依赖包
1 | sudo apt install libgl1-mesa-dev |
2 Hello Window
2.1 初始化glfw
1 | glfwInit(); |
- 调用glfwInit函数初始化glfw
- glfwWindowHint函数有两个参数,前一个参数指代某个glfw设置项,后一个参数是一个整型值
- GLFW_CONTEXT_VERSION_MAJOR和GLFW_CONTEXT_VERSION_MINOR分别是指定的OpenGL版本号,例如这里是3.3版本
- GLFW_OPENGL_PROFILE配置为GLFW_OPENGL_CORE_PROFILE,表明使用OpenGL核心模式
- GLFW_OPENGL_FORWARD_COMPAT设置为GL_TRUE,保证程序的前向兼容性
2.2 创建窗口
1 | // 创建一个窗口 |
- glfwCreateWindow函数创建一个窗口,参数分别是,
参数 | 作用 |
---|---|
width | 窗口宽度 |
height | 窗口高度 |
title | 窗口标题 |
monitor | 监视器(全屏模式下需指定) |
share | 共享上下文的另一个窗口(没有就不需要给定,传递NULL即可) |
- glfwMakeContextCurrent函数将当前OpenGL上下文和窗口绑定
2.3 初始化glew
1 | if (glewInit() != GLEW_OK) { |
- 调用glewInit函数初始化glew,如果失败,就调用glfwTerminate函数退出整个程序
- GLEW 是OpenGL扩展库,使用它可以很方便的调用OpenGL较新的特性。GLEW能自动识别你的平台所支持的全部OpenGL高级扩展涵数,也就是说,只要包含一个glew.h头文件,你就能使用gl, glu, glext, wgl, glx的全部函数
2.4 视口
- 视口(View Port)是窗口内的一块可绘制区域,可以调用glViewport函数为某个窗口指定视口,
1 | void framebuffer_size_callback(GLFWwindow *window, int width, int height) { |
- glfwSetFramebufferSizeCallback设置窗口大小改变时的回调函数,在这里,重置视口的左下角坐标和宽度、高度
2.5 渲染循环
1 | while(!glfwWindowShouldClose(window)) { |
- glfwWindowShouldClose函数判断给定的窗口是否应该被关闭,通常是用户鼠标点击窗口右上方的叉时
- glfwSwapBuffers函数将前缓冲(front buffer)和后缓冲(back buffer)的内容交换,因为渲染应用了双缓冲技术,前缓冲的内容直接被展现在显示器上,而所有的的渲染指令都会在后缓冲上绘制
- glfwPollEvents函数检查有没有触发什么事件(比如键盘输入、鼠标移动等)、更新窗口状态,并调用对应的回调函数(可以通过回调方法手动设置)
2.6 处理输入
1 | void processInput(GLFWwindow *window) { |
- 调用glfwGetKey函数可以得到一个按键当前的状态,GLFW_PRESS代表按下,GLFW_RELEASE
代表松开
- glfwSetWindowShouldClose函数设置窗口是否应该被关闭
2.7 清空窗口
1 | // redering |
- glClearColor函数设置清空窗口的底色,而glCear执行实际的清空操作,这里参数传递GL_COLOR_BUFFER_BIT表明此举是为了将窗口颜色清空