前言
- 记录自己在Mac上的配置的实践过程。(系统macOS Mojave 版本 10.14.6)
- OpenGL ES 或者说计算机图形学的学习,是离不开图形学基础的,而图形学经典书籍关联的都是OpenGL操作的,出于此,就需要在Mac上配置OpenGL环境。
配置流程
First
- Mac 电脑。
- 安装 Xcode (后续开发OpenGL使用)。
CMake
- 检查是否配置了 cmake ——打开终端命令行输入 cmake 后回车,如果提示 “cmake: command not found”,则进行一下步骤安装,如果已安装则跳过此小段。
- 前往 cmake 官方下载下载 CMake dmg,要下载Platform 为 Mac 的。如 图-1:
- 安装 CMake dmg。安装后,打开CMake,点击左上的工具栏 “Tool”可看到,选择“How to install for command line use”,出现如 图-2。
- 为了配置为默认路径/usr/local/bin,按照上图在命令行中输入sudo “/Applications/CMake.app/Contents/bin/cmake-gui” –install
- 等命令行 CMake 安装进度结束(可能需要等一段时间),再次在终端命令行中输入 cmake 回车后,如 图-3,则表示 cmake 配置完毕。
图-1
图-2
图-3
GLFW
- 下载官方GLFW资源。
- 如图-4,切记一定不要漏了下载第二个标红资源。否则后续会造成找不到 libglfw.3.dylib 库资源。
- 下载完图-4 中 第一个标红资源后解压,命令行cd 到解压文件夹下
- 执行 “cmake .” (不包含引号,即cmake+空格+小点)
- 执行 sudo make install
- 执行完毕后(耐心等待命令执行完成),这时头文件和库文件分别被安装到/usr/local/include和/usr/local/lib下。
- 打开Finder,快捷键 Shift + Cmd + G,输入 /usr/local/lib/,可看到相应的文件。
- 注意,Attention !此时重要的一步骤,将图-4标红第二文件资源解压后,文件夹下的 libglfw.3.dylib 库移入 上面第5部文件中,完成后如图-6。
图-4
图-5
图-6
Xcode Project Config
- 新建项目时,选择 Command Line Tool项目。(图-7)
- 选择 C 或 C++ 语言。(图-8)
- Buid Phases 下添加刚才生成的库 libglfw.3.dylib。(图-9 至 图-13)
- Buid Settings 下配置文件路径:(如图-14)
- Header Search Paths 添加 /usr/local/include
- Library Search Paths 添加 /usr/local/lib
图-7
图-8
图-9
图-10
图-11
图-12
图-13
图-14
Attention !
- 在前面 GLFW 项的第 3 步时候,如遇到提示 Could NOT find Doxygen 。
- 可以执行 brew install doxygen。(前提是安装了 brew ,这里不赘述了)。
- 上面命令执行,等待安装完成,重新执行 GLFW 的第 3 步骤。
- 如遇到 library not found for xxx
- 检查是否忘记执行 GLFW 中 的第 6 步,或者执行第 6 步时,放错了文件夹。
- 按照上面 “Xcode 工程配置” 步骤检查 3、4 步。
- 如果在下面Test 代码执行过程中遇到类似提示:“libglfw.3.dylib 不是Mac信任库”,可参照普通dmg软件安装后打不开的解决方式,去设置里面更改权限“允许从以下下位置下载的APP:”。
Test
以上步骤完成后就算完成了,接下来就可以开发了。
将以下代码 Copy 下来 粘贴在 main.c 文件里,运行一下,出现一个命令行终端 红的纯色屏幕。Congratulation !You get it !
#include <GLFW/glfw3.h>
#include <OpenGL/gl3.h>
static void error_callback(int error, const char* description)
{
fprintf(stderr, "Error: %s\n", description);
}
static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods)
{
if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
glfwSetWindowShouldClose(window, GLFW_TRUE);
}
void init()
{
//初始化操作
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
//绘制代码
glFlush();
}
int main(int argc, const char * argv[])
{
GLFWwindow* window;
if (!glfwInit())
exit(1);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 1);
window = glfwCreateWindow(640, 480, "Demo", NULL, NULL);
if (!window)
{
glfwTerminate();
exit(1);
}
glfwSetErrorCallback(error_callback);
glfwSetKeyCallback(window, key_callback);
glfwMakeContextCurrent(window);
glfwSwapInterval(1);
glClearColor(1.f, 0.f, 0.f, 1.f);
init();
while (!glfwWindowShouldClose(window))
{
display();
glfwSwapBuffers(window);
glfwPollEvents();
}
glfwDestroyWindow(window);
glfwTerminate();
exit(0);
return 0;
}
Feature
感兴趣的话可以从OpenGL 简化中文版网站开始学习联系小demo。