opengl编程从入门到精通-hello,window
生活随笔
收集整理的這篇文章主要介紹了
opengl编程从入门到精通-hello,window
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
窗口
程序中使用的glad.c和glad.h源碼:
鏈接: https://pan.baidu.com/s/1TmtM7O8J4aTnfP6elIgs7g 密碼: g5go
github源碼倉庫
opengl環境準備
opengl編程從入門到精通-hello,window
OpenGL從入門到精通–你好三角形
OpenGL從入門到精通–著色器的使用
請確認是在包含GLFW的頭文件之前包含了GLAD的頭文件。GLAD的頭文件包含了正確的OpenGL頭文件(例如GL/gl.h),所以需要在其它依賴于OpenGL的頭文件之前包含GLAD。
初始化函數glfwInit
// 對glfw進行初始化 glfwInit();window將在整個程序運行期間,用于維護窗口的上下文和狀態,其實整個glfw就是一個大的狀態機。
兩個函數的定義
// process all input: query GLFW whether relevant keys are pressed/released this frame and react accordingly // --------------------------------------------------------------------------------------------------------- void processInput(GLFWwindow *window) {// 用戶按下 esc鍵,就設置退出串口為真if(glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)glfwSetWindowShouldClose(window, true); }// glfw: whenever the window size changed (by OS or user resize) this callback function executes // --------------------------------------------------------------------------------------------- void framebuffer_size_callback(GLFWwindow* window, int width, int height) {// opengl渲染串口大小,每次調整窗口cout << "view port call back" << endl;//glViewport(0, 0, width, height); }完整代碼實現
// // Created by andrew on 2021/1/17. // #include "glad/glad.h" #include <GLFW/glfw3.h>#include <iostream>using namespace std;void framebuffer_size_callback(GLFWwindow* window, int width, int height); void processInput(GLFWwindow *window);// settings C++ style const unsigned int SCR_WIDTH = 800; const unsigned int SCR_HEIGHT = 600;int main() {// 對glfw進行初始化glfwInit();// 打印出glfw的版本信息// int* major, int* minor, int* revint major, minor, rev;glfwGetVersion(&major, &minor, &rev);cout << "major = " << major << " minor = " << minor << " rev = " << rev << endl;glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);// glfw window creation// glfw創建窗口GLFWwindow* window = glfwCreateWindow(SCR_WIDTH, SCR_HEIGHT, "LearnOpenGL", nullptr, nullptr);if (window == nullptr){std::cout << "Failed to create GLFW window" << std::endl;glfwTerminate();return -1;}// 為當前window設置上下文,每個線程只能設置一個,并且線程之間共用時,需要將當前線程設置為 non-currentglfwMakeContextCurrent(window);// 設置窗口大小的回調函數,當窗口大小改變時,會調用該函數調整串口的大小// 注冊窗口大小改變回調函數glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);// glad: load all OpenGL function pointers// glad 會加載所有openGL函數指針,在調用任何opengl函數之前需要先初始化gladif (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)){cout << "Failed to initialize GLAD" << std::endl;return -1;}// render loop// 循環繪圖,防止窗口關閉while (!glfwWindowShouldClose(window)){// input// -----processInput(window);// Render color// 設置青清空屏幕需要使用的顏色, 更準確的來說,就是一個狀態設置函數glClearColor(0.2f, 0.3f, 0.3f, 1.0f);// 清空屏幕的顏色 -- 狀態使用函數glClear(GL_COLOR_BUFFER_BIT);// glfw: swap buffers and poll IO events (keys pressed/released, mouse moved etc.)// 交換顏色緩沖區/** 雙緩沖(Double Buffer)* 應用程序使用單緩沖繪圖時可能會存在圖像閃爍的問題。* 這是因為生成的圖像不是一下子被繪制出來的,而是按照從左到右,* 由上而下逐像素地繪制而成的。最終圖像不是在瞬間顯示給用戶,* 而是通過一步一步生成的,這會導致渲染的結果很不真實。* 為了規避這些問題,我們應用雙緩沖渲染窗口應用程序。* 前緩沖保存著最終輸出的圖像,它會在屏幕上顯示;* 而所有的的渲染指令都會在后緩沖上繪制。* 當所有的渲染指令執行完畢后,我們交換(Swap)前緩沖和后緩沖,* 這樣圖像就立即呈顯出來,之前提到的不真實感就消除了。* */glfwSwapBuffers(window);// 檢查有沒有欻發手動事件,比如鍵盤輸入,鼠標移動等glfwPollEvents();}// 正確的釋放之前分配的所有資源glfwTerminate();return 0; }// process all input: query GLFW whether relevant keys are pressed/released this frame and react accordingly // --------------------------------------------------------------------------------------------------------- void processInput(GLFWwindow *window) {// 用戶按下 esc鍵,就設置退出串口為真if(glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)glfwSetWindowShouldClose(window, true); }// glfw: whenever the window size changed (by OS or user resize) this callback function executes // --------------------------------------------------------------------------------------------- void framebuffer_size_callback(GLFWwindow* window, int width, int height) {// opengl渲染串口大小,每次調整窗口cout << "view port call back" << endl;//glViewport(0, 0, width, height); }整個程序執行結果如下:
總結
以上是生活随笔為你收集整理的opengl编程从入门到精通-hello,window的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: opengl从入门到精通
- 下一篇: 《大数据》2015年第3期“研究”——社