1. 配置glew和glfw
終端下運行下面兩句,安裝完后在/usr/local/Cellar/下可以找到對應的目錄。
brew install glew
brew install glfw3
效果如下所示:

2. 配置glad
glad是為了簡化開發而設計的,不是必須的,是一個function loader,在glad文件生成網站配置好,如下所示:

在右下角點擊generate生成恰當的glad壓縮文件,解壓縮后將頭文件放到/usr/local/include目錄下(glad和KHR文件夾),將源文件拷貝到工程目錄下,如下兩圖所示:


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>
,具體步驟:
- 在CLion中打開
glad.c
文件,command+點按#include <glad.h>
會跳到glad.h
- 然后在
glad.h
中command+f找到#include <KHR/khrplatform.h>
,將它改為#include <khrplatform.h>
如下所示:


4. 運行測試代碼
在main.cpp拷貝下面代碼,如果能出現圖示結果即為成功。

#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;
}