OpenGL筆記(2)窗口

前言

此節課要配置好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;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章