前言
此節課要配置好glad和glfw,配置過程可看OpenGL環境配置
渲染循環
在OpenGL中需要用一個while循環來模擬引擎,否則渲染效果只會出現一次變快速消失。
while(!glfwWindowShouldClose(window))
{
glfwSwapBuffers(window);
glfwPollEvents();
}
拖動調節窗口大小
與其說調節窗口,更準確應該是拉扯畫布。當改變窗口大小時,在窗口中繪製的圖形也會拉伸。
void framebuffer_size_callback(GLFWwindow* window, int width, int height)
{
glViewport(0, 0, width, height);
}
在使用這個函數時需要註冊,在渲染循環前增加一條代碼
glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
設置快捷鍵關閉窗口
這裏使用了Esc鍵作爲返回鍵,可根據需要更換其他鍵,只需要將GLFW_KEY_ESCAPE改一下即可。
void processInput(GLFWwindow* window)
{
if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)//是否按下了返回鍵
glfwSetWindowShouldClose(window, true);
}
創建窗口代碼
#include <glad/glad.h>
#include <GLFW/glfw3.h>
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專用
GLFWwindow* window = glfwCreateWindow(800, 600, "LearnOpenGL", NULL, NULL);
if (window == NULL)
{
std::cout << "Failed to create GLFW window" << std::endl;
glfwTerminate();
return -1;
}
glfwMakeContextCurrent(window);
glViewport(0, 0, 800, 600);
while(!glfwWindowShouldClose(window))
{
glfwSwapBuffers(window);//交換顏色緩衝,OpenGL使用雙緩衝技術
glfwPollEvents();//檢查是否觸發事件
}
glfwTerminate();//刪除資源
return 0;
}