OpenGL自制3D游戏引擎入门II
GLFW窗口
试运行GLFW,没有报错即配置正确
int main() { glfwInit(); glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);//主版本号 glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);//次版本号 glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); //glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); //MAC开发需要声明这一行 return 0; }
创建窗口对象
//Open GLFW Window GLFWwindow* window = glfwCreateWindow(800, 600, "MyWindow", NULL, NULL);//前三个参数分别为宽、高、窗口名称 if (window == NULL) { std::cout << "Open window failed" << std::endl; glfwTerminate(); return -1; } glfwMakeContextCurrent(window);
初始化GLEW
// Init GLEW glewExperimental = true; if (glewInit() != GLEW_OK) { std::cout << "Init GLEW failed" << std::endl; glfwTerminate(); return -1; }
视口
glViewport(0, 0, 800, 600); //前俩参数为锚点,后俩为渲染窗口的宽高
渲染循环
while (!glfwWindowShouldClose(window)) { glfwSwapBuffers(window); glfwPollEvents(); }
- glfwWindowShouldClose函数每次循环时检查一次GLFW是否被要求退出
- glfwPollEvents函数检查是否触发事件并调用对应的回调函数
- glfwSwapBuffers函数交换颜色缓冲
双缓冲(Double Buffer):目的是解决图像闪烁问题,前缓冲保存最终输出的图像,显示在屏幕上,后缓冲执行渲染指令,所以渲染指令执行完毕后,交换前后缓冲,图像就可以立即显示,消除闪烁问题。
输入
void processInput(GLFWwindow* window) { if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS) { glfwSetWindowShouldClose(window, true); } }
自定义一个processInput函数,放入循环中来完成输入操作,渲染循环中的操作一般分为以下三个部分
while(!glfwWindowShouldClose(window)) { // 输入 processInput(window); // 渲染指令 ... // 检查并调用事件,交换缓冲 glfwPollEvents(); glfwSwapBuffers(window); }
渲染
glClearColor(0.7f, 0, 0, 1.0f);//RGBA glClear(GL_COLOR_BUFFER_BIT);
使用一个自定义的颜色清空屏幕,我们可以通过调用glClear函数来清空屏幕的颜色缓冲,它接受一个缓冲位(Buffer Bit)来指定要清空的缓冲,可能的缓冲位有GL_COLOR_BUFFER_BIT,GL_DEPTH_BUFFER_BIT和GL_STENCIL_BUFFER_BIT。由于现在我们只关心颜色值,所以我们只清空颜色缓冲
(下接OpenGL入门III)
OpenGL自制3D游戏引擎入门II
https://baifabaiquan.cn/2021/03/04/OpenGL入门II/