声明:本人小白,以下教程皆由网上搜集整理而成,不承担任何结果。
若有任何不完善,请及时comment,我会进行update。

1. 环境

Mac Catalina,Clion 2020.2.4

2. 安装

2.1 Homebrew(https://brew.sh/

image.png
(注:homebrew安装可能需要搭梯子,国内有镜像版本,可以自行搜索)

2.2 安装GLEW GLFW

安装完成后,打开terminal,输入:
brew install glew
brew install glfw
(注:
a. homebrew的安装路径一般是在/usr/local/Cellar/…,可以打开Finder-Location-Macintosh HD后, cmd+shift+ . 显示隐藏文件夹找出对应路径
b. 如果是需要使用到GLUT的话, Mac中似乎自带了这个库,在头文件中声明 #include , 应该就可以在本地进行编译了)

3. 配置Clion

打开Clion,在自己的Project中的CMakelists.txt中更改为:
( 注:这里的Project为Test_openGL,可以自己命名)

  1. cmake_minimum_required(VERSION 3.16)
  2. project(Test_openGL)////Project Name
  3. set(CMAKE_CXX_STANDARD 14)
  4. # 添加头文件
  5. set(GLEW_H /usr/local/Cellar/glew/2.2.0/include/GL)注意版本:homebrew会安装最新版本,此处版本为2.2.0
  6. set(GLFW_H /usr/local/Cellar/glfw/3.3.2/include/GLFW)////注意版本:homebrew会安装最新版本,此处版本为3.3.2
  7. include_directories(${GLEW_H} ${GLFW_H})
  8. # 添加目标链接
  9. set(GLEW_LINK /usr/local/Cellar/glew/2.2.0/lib/libGLEW.2.2.0.dylib)////注意版本:homebrew会安装最新版本
  10. set(GLFW_LINK /usr/local/Cellar/glfw/3.3.2/lib/libglfw.3.3.dylib) ////注意版本:homebrew会安装最新版本
  11. link_libraries(${OPENGL} ${GLEW_LINK} ${GLFW_LINK})
  12. # 执行编译命令
  13. set(SOURCE_FILES main.cpp)
  14. add_executable(Test_openGL ${SOURCE_FILES})////Project Name
  15. if (APPLE)
  16. target_link_libraries(Test_openGL "-framework OpenGL")////Project Name
  17. target_link_libraries(Test_openGL "-framework GLUT")////Project Name
  18. endif()

重新加载CMakelists后,在左边的External Libraries会出现:GL library root 和 GLFW library root:
image.png
对与GLUT来说 在External Lib/Header Search Paths/Frameworks library root下就可以找到:
image.png

4. 测试

4.1 测试代码

  1. #include <iostream>
  2. #include <glew.h>
  3. #include <glfw3.h>
  4. #inclufe <GLUT/glut.h>
  5. using namespace std;
  6. void key_callback(GLFWwindow* window, int key, int scancode, int action, int mode)
  7. {
  8. //如果按下ESC,把windowShouldClose设置为True,外面的循环会关闭应用
  9. if(key==GLFW_KEY_ESCAPE && action == GLFW_PRESS)
  10. glfwSetWindowShouldClose(window, GL_TRUE);
  11. std::cout<<"ESC"<<mode;
  12. }
  13. int main()
  14. {
  15. if(!glfwInit())
  16. return -1;
  17. //创建窗口以及上下文
  18. GLFWwindow* window = glfwCreateWindow(640, 480, "hello world", NULL, NULL);
  19. if(!window)
  20. {
  21. //创建失败会返回NULL
  22. glfwTerminate();
  23. }
  24. glfwMakeContextCurrent(window);
  25. glfwSetKeyCallback(window, key_callback); //注册回调函数
  26. while(!glfwWindowShouldClose(window))
  27. {
  28. glfwPollEvents();
  29. glClearColor(0.2, 0.3, 0.3, 1);
  30. glClear(GL_COLOR_BUFFER_BIT);
  31. glBegin(GL_TRIANGLES);
  32. glColor3f(1, 0, 0); //Red
  33. glVertex3f(0, 1, 1);
  34. glColor3f(0, 1, 0); //Green
  35. glVertex3f(-1, -1, 0);
  36. glColor3f(0, 0, 1); //Blue
  37. glVertex3f(1, -1, 0);
  38. //结束一个画图步骤
  39. glEnd();
  40. glBegin(GL_POLYGON);
  41. //再画个梯形,需要注意笔顺
  42. glColor3f(0.5, 0.5, 0.5); //Grey
  43. glVertex2d(0.5, 0.5);
  44. glVertex2d(1, 1);
  45. glVertex2d(1, 0);
  46. glVertex2d(0.5, 0);
  47. glEnd();
  48. /******交换缓冲区,更新window上的内容******/
  49. glfwSwapBuffers(window);
  50. }
  51. glfwTerminate();
  52. return 0;
  53. }

4.2 测试结果

出现下面图形,就成功配置了。
image.png
Credit:
以上内容基于一本侯鱼丸还是粗面进行了补充与完善,如果有帮助,点赞鼓励。
谢谢🙏