vs中使用openGL


一、准備工作

創建Empty Project,為了能夠使用OpenGL的庫函數,需要把相關的庫連接到項目中:
1、首先添加庫的路徑
如上,可以把需要添加的include、lib放到一起比較方便管理
這時候,VS就能找到所有需要的文件了。
2、然后把相關庫鏈接到項目中,
 
注:GLFW是一個C寫的專門用於OpenGL開發的庫,它只提供把物體渲染到屏幕所需的必要功能。它可以給我們創建一個 OpenGL環境,定義窗口參數,以及相應用戶輸入,這些都是必要的功能。
本節使用GLFW,但是鏈接的時候除了GLFW,把OpenGL庫也添加上了,這里,OpenGL庫的添加是和 操作系統有關的。
本文使用的是windows,Microsoft SDK提供了一個opengl32.lib,是vs自帶的,所以我們這里鏈接的是opengl32.lib。
另外,對於不同版本的OpenGL,管理各個版本之間函數調用,通過GLEW這個庫實現,也需要添加這個的鏈接。

如果你使用GLEW的靜態庫,我們必須在包含GLEW之前定義一個預處理變量GLEW_STATIC。

#DEFINE GLEW_STATIC
#include <GL/glew.h>

 

至此,我們的准備工作已經完成。
 
---------------

glfw是輔助創建openGL窗口的開源庫.所以在后面配置工程的時候你會發現我們根本就不需要用到MFC窗口框架的,只需要console工程即可

glew是暴露openGL的通用API的開源庫,

glm是openGL開發中常用的數學庫,主要是一些矩陣變化. 但是該庫里面的源文件都是以.hpp這種不用編譯的后綴形式存在,所以只要include就行,在此環境配置中不用理會.

---------------

二、openGL操作過程

1、初始化、配置GLFW
2、初始化、配置GLEW
3、設置窗口維度
4、消息循環、渲染
5、釋放資源
相應例子代碼:
// GLEW
#define GLEW_STATIC
#include <GL/glew.h>

// GLFW
#include <GLFW/glfw3.h>

#include<iostream>
//Function prototypes
void key_callback(GLFWwindow* window, int key, int scancode, int action, int mode);

// Window dimensions
const GLuint WIDTH = 800, HEIGHT = 600;

// The MAIN function, from here we start the application and run the game loop
int main()
{
    std::cout << "Starting GLFW context, OpenGL 3.3" << std::endl;
    // 初始化GLFW
    glfwInit();  
    // 配置 GLFW
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
    glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);

    // 創建 GLFW 窗口
    GLFWwindow* window = glfwCreateWindow(WIDTH, HEIGHT, "LearnOpenGL", nullptr, nullptr);
    if (window == nullptr)
    {
        std::cout << "Failed to create GLFW window" << std::endl;
        glfwTerminate();
        return -1;
    }
    //通知GLFW將我們窗口的上下文設置為當前線程的主上下文
    glfwMakeContextCurrent(window);

    // 為窗口設置回調函數(事件響應)
    glfwSetKeyCallback(window, key_callback);

    // 讓GLEW在管理OpenGL的函數指針時更多地使用現代化的技術
    glewExperimental = GL_TRUE;
    // 初始化GLEW
    if (glewInit() != GLEW_OK)
    {
        std::cout << "Failed to initialize GLEW" << std::endl;
        return -1;
    }

    //設置窗口的維度,即告訴OpenGL渲染窗口的尺寸大小
    //我們實際上也可以將視口的維度設置為比GLFW的維度小,
    //這樣子之后所有的OpenGL渲染將會在一個更小的窗口中顯示,
    //這樣子的話我們也可以將一些其它元素顯示在OpenGL視口之外。
    int width, height;
    glfwGetFramebufferSize(window, &width, &height);
    glViewport(0, 0, width, height);

    // 游戲循環
    while (!glfwWindowShouldClose(window))
    {
        //檢查有沒有觸發什么事件(比如鍵盤輸入、鼠標移動等),然后調用對應的回調函數
        glfwPollEvents();

        // Render
        // Clear the colorbuffer
        glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
        glClear(GL_COLOR_BUFFER_BIT);

        // 交換顏色緩沖
        glfwSwapBuffers(window);
    }

    // 釋放/刪除之前的分配的所有資源
    glfwTerminate();
    return 0;
}

// Is called whenever a key is pressed/released via GLFW
void key_callback(GLFWwindow* window, int key, int scancode, int action, int mode)
{
    std::cout << key << std::endl;
    if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
        glfwSetWindowShouldClose(window, GL_TRUE);
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM