Mac平台安装glfw和glew配置xcode

By AverageJoeWang
 标签:

最近有一门高级计算机三维建模课程需要用到OpenGL这个图形框架,OpenGL框架本身实现了很多图形算法,但是没有提供一个图形显示窗口,本来mac平台是提供了GLUT框架的,但是由于这个已经停止更新好几年了很老了,所以本篇笔记主要记录自己在mac平台安装glwf的过程。

step1.首先安装homebrew

$ ruby --version
ruby 2.0.0p648 (2015-12-16 revision 53162) [universal.x86_64-darwin16]

$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

step2.安装glfw3

在zho那果断输入

brew install glfw3

安装位置在/usr/local/Cellar/glfw/3.2.1/

step3.安装glew

brew install glew

安装位置在/usr/local/Cellar/glew/2.1.0

step4.配置xcode

在Xcode中找到Peference菜单项,然后在里面找到Locations项,再点击Custom Paths,添加四项

配置依次为:

  • 具体位置如图所示

在这里需要修改的只有一项,就是要根据你自己安装的glew的版本和glfw3的版本修改2.1.0和3.2.1这两个版本号,其他的都是一样的。

  • 然后创建一个新的Xcode项目(command line tool),语言选择C++。接着,在项目的Bulid Settings里面找到Header Search Paths和Library Search Paths两项,在Header Search Paths中加入
$(glew_header) 
$(glfw_header)

  • 同理也在Library Search Paths中加入
$(glew_lib) 
$(glfw_lib)

  • 完成了上述过程之后,还有最后一步,就是导入framework。在项目的General中找到Linked Frameworks and Libraries,点击‘+’号,添加如下三个文件
OpenGL.framework    
libGLEW.2.1.0.dylib    
libglfw3.2.dylib

添加两个dylib文件的方法是,在你没有在framework中搜索到这两个文件时,点击add other,然后点击shift+command+G进入/usr/local文件夹,然后根据我们之前说的安装glew和glfw3的路径找到这两个文件夹,在这两个文件夹中找到这两个文件,当然这两个文件可能和我图中给出的文件名不同还是因为安装的版本号不同,这个需要注意一下。

step5.测试

#include <iostream>
#include <GL/glew.h>
#include <GLFW/glfw3.h>

void Render(void)
{
    glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT);
    glBegin(GL_TRIANGLES);
    {
        glColor3f(1.0,0.0,0.0);
        glVertex2f(0, .5);
        glColor3f(0.0,1.0,0.0);
        glVertex2f(-.5,-.5);
        glColor3f(0.0, 0.0, 1.0);
        glVertex2f(.5, -.5);
    }
    glEnd();
}

int main(int argc, const char * argv[]) {
    GLFWwindow* win;
    if(!glfwInit()){
        return -1;
    }
    win = glfwCreateWindow(640, 480, "OpenGL Base Project", NULL, NULL);
    if(!win)
    {
        glfwTerminate();
        exit(EXIT_FAILURE);
    }
    if(!glewInit())
    {
        return -1;
    }
    glfwMakeContextCurrent(win);
    while(!glfwWindowShouldClose(win)){
        Render();
        glfwSwapBuffers(win);
        glfwPollEvents();
    }
    glfwTerminate();
    exit(EXIT_SUCCESS);
    return 0;
}
  • 结果

参考与感谢