macOS下搭建OpenGL环境

我的环境是macOS Mojave 10.14.4,Xcode 11.3


1 download something

1.1 安装homebrew,安装cmake

1.2 下载安装glew

1
brew install glew

被安装在/usr/local/Cellar/glew路径下,打开finder然后shift+command+g就可以进去,下面两个路径之后会用到的

头文件目录:/usr/local/Cellar/glew/2.1.0_1/include

静态库文件:/usr/local/Cellar/glew/2.1.0_1/lib/libGLEW.a

1.3 下载安装GLTools

下载GLTools:https://github.com/HazimGazov/GLTools

新建位于这个文件夹的终端,然后按照github上的说明编译:

1
2
3
4
5
cd build
cmake ..
make
sudo make install
sudo ldconfig(macOS不是这句,见下文)

如果没报错啥的话,那么就快乐的装完了OpenGL需要的扩展库

这里需要额外说明的是,github上给出的这五句是针对linux的,所以最后一句在macOS下就会报command not found

首先ldconfig这句的作用是:“为了让动态链接库为系统所共享,还需运行动态链接库的管理命令ldconfig”

在stack overflow上有人提问macOS上是否有类似ldconfig这样的指令,有的说没有但是仍然可以通过dyld配置,还有一个回答说有,也就是下面这句:

1
sudo update_dyld_shared_cache

我试了一下这句(反正最后可以跑起来,所以应该是没什么问题的),关于这个问题的更多讨论可以去看这个 -> stackoverflow : ldconfig equivalent in Mac OS X?

1.4 下载安装GLFW

从官网下载source package然后命令行cmake再install一下

1
2
3
4
5
mkdir build
cd build
cmake ..
make
sudo make install

2 创建工程

不太会用xcode,乱填了,language和storyboard没啥问题应该就行

3 添加依赖库

建好项目之后,从上面的菜单进入「Build Phases」,其中第三行「Link Binary Libraries」,添加五个依赖库:「OpenGL.framework」/「GLUT.framework」/「IOKit.framework」/「Cocoa.framework」/「CoreVideo.framework」

4 配置路径

4.1 Frameworks

GLTools-master/build/libgltools.a/usr/local/Cellar/glew/2.1.0_1/lib/libGLEW.a拖到项目目录最下面的「Frameworks」里面

4.2 Header Search Paths

在「Build Settings」里搜索「search paths」,上面的小标签选「All」和「Levels」,把gltools和glew和glfw的include库目录路径都直接拖到到「Header Search Paths」里面

比如我的三个加完是这样的:

1
2
3
"$(SRCROOT)/../../Downloads/GLTools-master/include"
/usr/local/Cellar/glew/2.1.0_1/include
"$(SRCROOT)/../../Downloads/glfw-3.3/include"

4.3 Library Search Paths

然后「Library Search Paths」是放lib目录的,放上GLTools的build目录,因为.a静态库文件在这个里面

5 main.cpp

新建一个main.cpp文件,菜单栏「file」-「new file」-「file」-「c++ file」(不需要头文件)

然后把这五个删了:main.m/ViewController.m/Viewcontroller.h/AppDelegate.m/AppDelegate.h

下面的代码是抄的别人教程里的,随便改了点小东西,来测测是不是能跑了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#include <stdio.h>
#include "GLShaderManager.h"
#include "GLTools.h"
#include <glut/glut.h>

GLBatch triangleBatch;

GLShaderManager shaderManager;

//窗口大小改变时接受新的宽度和高度,其中0,0代表窗口中视口的左下角坐标,w,h代表像素
void ChangeSize(int w,int h) {

glViewport(0,0, w, h);
}

//为程序作一次性的设置
void SetupRC() {
//设置背影颜色
glClearColor(1.0f,0.6f,1.0f,0.0f);

//初始化着色管理器
shaderManager.InitializeStockShaders();

//设置三角形,其中数组vVert包含所有3个顶点的x,y,笛卡尔坐标对。
GLfloat vVerts[] = {
-0.5f,0.0f,0.5f,

0.5f,0.0f,0.0f,

0.0f,0.7f,0.0f,
};
//批次处理
triangleBatch.Begin(GL_TRIANGLES,3);

triangleBatch.CopyVertexData3f(vVerts);

triangleBatch.End();
}

//开始渲染
void RenderScene(void) {
//清除一个或一组特定的缓冲区
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT);

//设置一组浮点数来表示紫色
GLfloat vRed[] = {0.8f,0.2f,1.0f,1.0f};

//传递到存储着色器,即GLT_SHADER_IDENTITY着色器,这个着色器只是使用指定颜色以默认笛卡尔坐标第在屏幕上渲染几何图形
shaderManager.UseStockShader(GLT_SHADER_IDENTITY,vRed);

//提交着色器
triangleBatch.Draw();

//将在后台缓冲区进行渲染,然后在结束时交换到前台
glutSwapBuffers();
}

int main(int argc,char* argv[]) {
//设置当前工作目录,针对MAC OS X
gltSetWorkingDirectory(argv[0]);

//初始化GLUT库
glutInit(&argc, argv);

/*初始化双缓冲窗口,其中标志GLUT_DOUBLE、GLUT_RGBA、GLUT_DEPTH、GLUT_STENCIL分别指
双缓冲窗口、RGBA颜色模式、深度测试、模板缓冲区*/
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA|GLUT_DEPTH|GLUT_STENCIL);

//GLUT窗口大小,标题窗口
glutInitWindowSize(800,600);

glutCreateWindow("Triangle");

//注册回调函数
glutReshapeFunc(ChangeSize);

glutDisplayFunc(RenderScene);

//驱动程序的初始化中没有出现任何问题。
GLenum err = glewInit();

if(GLEW_OK != err) {
fprintf(stderr,"glew error:%s\n",glewGetErrorString(err));
return 1;
}

//调用SetupRC
SetupRC();
glutMainLoop();
return 0;
}

6 运行

第一次run的时候出问题了QWQ

报错library not found for -lgltools,看了一些关于library-not-found相关的问题:stackoverflow : xcode library not found ,应该是gltool的时候有什么库没有链接好之类的

然后我就去把之前的GLTools的库重新编译了一遍然后做了4.3节的内容(之前没有做)

然后就succeeded啦(≧▽≦),效果是这样哒


ADD:GLM库

因为后来还用到了GLM库,所以最后再顺便补上一点GLM库的配置,其实和上面那些glew啥的差不多

首先去github下载GLM库:https://github.com/g-truc/glm

然后把下好的直接拖到「Header Search Paths」里面就可以了

然后就可以导入开始用啦~

一开始都是照着别的教程做的,其实理解了熟练了之后就不用这样了,为了便于管理这些到时候把需要的库文件都放在一个include文件夹下,然后一次导入就好了


最后再放上一个很棒的OpenGL教程,感谢原作者和译者 -> https://learnopengl-cn.github.io/#

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2018-2020 LeFlacon

奶茶一杯 快乐起飞

支付宝
微信