OpenGL落脚CLion

本篇文章将阐述在Mac os Monterey(12.2.1)CLion(2021.3.3)上配置OpenGL的整体过程。虽然网上已有相关的文章,但有很多操作存在问题,可能是Mac系统变迁的原因,故作此文。

原参考文章:Mac Clion OpenGL开发环境配置


  1. 打开 terminal,用homebrew(默认已有)安装依赖项

    brew install glew
    brew install glfw3

    可以通过下述命令来查看上述两个依赖项的安装位置

    brew list glew
    brew list glfw
  2. 配置Glad,通道在此

    ③将glad.zip进行解压后里面就是上图中的include和src,将include/glad文件夹下的glad.h中的#include <KHR/khrplatform.h>更改为#include <khrplatform.h>

    ④将include里面的两个文件夹glad与KHR拖入 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include(这与参考文章里的地址不同,那篇文章中的文件夹是真的没找到在哪),而src文件夹则直接拖入CLion中的项目文件夹(这个项目配置与普通C++项目配置相同)

  3. 接下来配置CLion项目文件中的CMakeLists.txt文件

    cmake_minimum_required(VERSION 3.21)
    project(OpenGLab)
    
    set(CMAKE_CXX_STANDARD 23)
    
    ###############上面部分不用改,按自己原来的即可###############
    #设置一些OpenGL头文件所在目录的宏
    set(GLEW_H /opt/homebrew/Cellar/glew/2.2.0_1/include/GL)
    set(GLFW_H /opt/homebrew/Cellar/glfw/3.3.6/include/GLFW)
    #设置OpenGL库所在位置,并链接
    set(GLEW_LINK /opt/homebrew/Cellar/glew/2.2.0_1/lib/libGLEW.2.2.0.dylib)
    set(GLFW_LINK /opt/homebrew/Cellar/glfw/3.3.6/lib/libglfw.3.3.dylib)
    link_libraries(${OPENGL} ${GLEW_LINK} ${GLFW_LINK})
    #########################################################
    
    set(GLAD_H /usr/local/include/)
    set(GLAD_H /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/glad)
    set(KH_H /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/KHR)
    #包含上述头文件所在目录
    include_directories(${GLEW_H} ${GLFW_H} ${GLAD_H} ${KH_H})
    
    #设置要编译的c/cpp文件到可执行文件中,该exe包含两个文件glad.c,main.cpp,生成OpenGLab
    set(SOURCE_FILES "src/glad.c" "main.cpp")
    add_executable(OpenGLab ${SOURCE_FILES})
    
    # mac下这步很重要
    if (APPLE)
        target_link_libraries(OpenGLab "-framework OpenGL")
        target_link_libraries(OpenGLab "-framework GLUT")
    endif()

    ⚠️将代码中我的项目名称OpenGLab换成你自己的项目名,另外#之间代码中的路径可能需要修改,请参考第一步中brew list的结果(主要是版本号可能不同的问题,我这里glew2.2.0_1glfw3.3.6)

  4. 测试代码——from 参考文章

    #include <glew.h>
    #include <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();
    
            /******交换缓冲区,更新window上的内容******/
            glfwSwapBuffers(window);
        }
        glfwTerminate();
        return 0;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值