zoukankan      html  css  js  c++  java
  • Mac使用Clion配置OpenGL

    Mac使用Clion配置OpenGL

    之前博主是用Xcode配置的openGL,但后来因为要与非Mac队友合作,于是大家决定统一使用Clion,博主于是再次配置开发环境,这里记录一下

    预先准备

    Mac系统自带了OpenGL和GLUT,但博主想使用较为新的GLEW和GLFW。

    安装homebrew

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

    安装GLEW和GLFW

    brew install glew
    brew install glfw
    

    brew安装的目录在/usr/local/Cellar下,后面会使用到路径。

    用Clion创建工程

    Clion工程管理是通过CMake的,第三方库可以通过修改CMakeLists.txt完成

    以下是博主参考了资料后配置成功的文件

    cmake_minimum_required(VERSION 3.9)
    project(helloworld)
    
    set(CMAKE_CXX_STANDARD 11)
    
    # 添加头文件
    set(GLEW_H /usr/local/Cellar/glew/2.1.0/include/GL)
    set(GLFW_H /usr/local/Cellar/glfw/3.2.1/include/GLFW)
    include_directories(${GLEW_H} ${GLFW_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})
    
    # 执行编译命令
    set(SOURCE_FILES main.cpp)
    add_executable(helloworld ${SOURCE_FILES})
    

    可以看到,在External Libraries中出现GL和GLFW

    测试

    main.cpp还是使用之前的的代码测试

    #include <GLEW/glew.h>
    #include <GLFW/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;
    }
    

    运行结果

    再次成功!可以愉快地和队友写大程了~

  • 相关阅读:
    该伙伴事务管理器已经禁止了它对远程/网络事务的支持
    HDU 4883 TIANKENG’s restaurant (贪心)
    Android:创建可穿戴应用
    debian支持ll命令
    mongodb进阶一之高级查询
    Hadoop之——又一次格式化hdfs系统的方法
    J2EE的13个规范之(二) JDBC 及其使用
    2015欧冠决赛--脑力劳动结硕果
    运行计划之误区,为什么COST非常小,SQL却跑得非常慢?
    QVariant与自定义数据类型转换的方法
  • 原文地址:https://www.cnblogs.com/fanghao/p/8027627.html
Copyright © 2011-2022 走看看