Mac CLion下OpenGL環境配置

1. 配置glew和glfw

終端下運行下面兩句,安裝完後在/usr/local/Cellar/下可以找到對應的目錄。

brew install glew
brew install glfw3

效果如下所示:
Mac Clion下OpenGL環境配置-截圖1

2. 配置glad

glad是爲了簡化開發而設計的,不是必須的,是一個function loader,在glad文件生成網站配置好,如下所示:
Mac Clion下OpenGL環境配置-截圖2

在右下角點擊generate生成恰當的glad壓縮文件,解壓縮後將頭文件放到/usr/local/include目錄下(glad和KHR文件夾),將源文件拷貝到工程目錄下,如下兩圖所示:
Mac Clion下OpenGL環境配置-截圖3Mac Clion下OpenGL環境配置-截圖4

3. 配置CMakeLists文件

下面是CMakeLists的詳細配置:

cmake_minimum_required(VERSION 3.12)
project(OpenGL)

set(CMAKE_CXX_STANDARD 14)

set(GLEW_H /usr/local/Cellar/glew/2.1.0/include/GL)
set(GLFW_H /usr/local/Cellar/glfw/3.2.1/include/GLFW)
set(GLAD_H /usr/local/include/glad)
set(KH_H /usr/local/include/KHR)
include_directories(${GLEW_H} ${GLFW_H} ${GLAD_H} ${KH_H})

# 添加目標鏈接
set(GLEW_LINK /usr/local/Cellar/glew/2.1.0/lib/libGLEW.2.1.dylib)
set(GLFW_LINK /usr/local/Cellar/glfw/3.2.1/lib/libglfw.3.dylib)
link_libraries(${OPENGL} ${GLEW_LINK} ${GLFW_LINK})

# 執行編譯命令
# 這個glad.c在第2步中說過要拉到項目中,注意路徑
set(SOURCE_FILES "src/glad.c" "main.cpp")
add_executable(OpenGL ${SOURCE_FILES})

# mac下這步很重要
if (APPLE)
    target_link_libraries(OpenGL "-framework OpenGL")
    target_link_libraries(OpenGL "-framework GLUT")
endif()

注意這樣配置之後需要更改/usr/local/include/glad文件夾下的glad.h中的#include <KHR/khrplatform.h>更改爲#include <khrplatform.h>,具體步驟:

  1. 在CLion中打開glad.c文件,command+點按#include <glad.h>會跳到glad.h
  2. 然後在glad.h中command+f找到#include <KHR/khrplatform.h>,將它改爲#include <khrplatform.h>

如下所示:
Mac Clion下OpenGL環境配置-截圖5Mac Clion下OpenGL環境配置-截圖5

4. 運行測試代碼

在main.cpp拷貝下面代碼,如果能出現圖示結果即爲成功。
Mac Clion下OpenGL環境配置-截圖6

#include <glew.h>
#include <glfw3.h>
#include <iostream>
using namespace std;

void key_callback(GLFWwindow* window, int key, int scancode, int action, int mode)
{
    //如果按下ESC,把windowShouldClose設置爲True,外面的循環會關閉應用
    if(key==GLFW_KEY_ESCAPE && action == GLFW_PRESS)
        glfwSetWindowShouldClose(window, GL_TRUE);
    std::cout<<"ESC"<<mode;
}

int main(void)
{
    //初始化GLFW庫
    if(!glfwInit())
        return -1;
    //創建窗口以及上下文
    GLFWwindow* window = glfwCreateWindow(640, 480, "hello world", NULL, NULL);
    if(!window)
    {
        //創建失敗會返回NULL
        glfwTerminate();
    }
    //建立當前窗口的上下文
    glfwMakeContextCurrent(window);

    glfwSetKeyCallback(window, key_callback); //註冊回調函數
    //循環,直到用戶關閉窗口
    while(!glfwWindowShouldClose(window))
    {
        /*******輪詢事件*******/
        glfwPollEvents();

        /*******渲染*******/
        //選擇清空的顏色RGBA
        glClearColor(0.2, 0.3, 0.3, 1);
        glClear(GL_COLOR_BUFFER_BIT);

        //開始畫一個三角形
        glBegin(GL_TRIANGLES);
        glColor3f(1, 0, 0); //Red
        glVertex3f(0, 1, 1);

        glColor3f(0, 1, 0); //Green
        glVertex3f(-1, -1, 0);

        glColor3f(0, 0, 1); //Blue
        glVertex3f(1, -1, 0);
        //結束一個畫圖步驟
        glEnd();

        glBegin(GL_POLYGON);
        //再畫個梯形,需要注意筆順
        glColor3f(0.5, 0.5, 0.5); //Grey
        glVertex2d(0.5, 0.5);
        glVertex2d(1, 1);
        glVertex2d(1, 0);
        glVertex2d(0.5, 0);
        glEnd();


        /******交換緩衝區,更新window上的內容******/
        glfwSwapBuffers(window);
    }
    glfwTerminate();
    return 0;
}

參考資料

http://www.stephenzhang.me/2018/02/06/MacOS%E4%B8%8BCLion%E9%85%8D%E7%BD%AEOpenGL%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83/

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