zoukankan      html  css  js  c++  java
  • LearnOpenGL学习笔记(一):在Xcode下搭建GLEW、GLFW及GLAD环境

    LearnOpenGL学习笔记(一)
    1.环境配置
    系统是macOS,在Xcode下搭建GLEW、GLFW及GLAD的环境。

    1.1 安装GLEW与GLFW
    在终端中通过brew安装GLEW与GLFW:

    brew install glew
    brew install glfw3


    1.2 下载GRAD
    打开GLAD的在线服务,将语言(Language)设置为C/C++,在API选项中,选择3.3以上的OpenGL(gl)版本。之后将模式(Profile)设置为Core,并且保证生成加载器(Generate a loader)的选项是选中的。都选择完之后,点击生成(Generate)按钮来生成库文件。

    1.3 创建工程

    新建Command Line Tool项目,语言选择C++



    上一步GLAD现在应该提供给你了一个glad.zip压缩文件,包含两个头文件目录,和一个glad.c文件。
    将两个头文件目录(glad和KHR,注意是两个文件夹不是.h文件)复制到/usr/local/include文件夹中
    并添加glad.c文件到工程中
    如下图所示:

    1.4 配置工程
    在工程的Building Settings – Search Paths – Header Search Paths
    添加下面四个路径到Header Search Paths

    /usr/local/include
    $(inherited)
    /usr/local/Cellar/glfw/3.3.0/lib
    /usr/local/Cellar/gl2w/2.3.0/lib

    这里面版本号要根据你安装的版本做相应的修改
    查看路径:/usr/local/Cellar/glfw/ 和 /usr/local/Cellar/glew/


    然后在工程的 General – Linked Frameworks and Libraries添加如下两个包:


    注意在它提供给你的目录里是找不到的。要到“Add other…”里按shift+command+G 快捷键进到/usr/local/Cellar/glfw/3.3.0/lib 以及 /usr/local/Cellar/glew/2.2.0/lib 目录选中这两个包

      

    2.测试程序
    大功告成,可以根据教程写一个程序进行测试,代码如下:
    main.cpp

    //注意要在包含GLFW的头文件之前包含了GLAD的头文件!
    #include <glad/glad.h>
    #include <GLFW/glfw3.h>
    #include <iostream>
    using namespace std;
    
    //当用户改变窗口的大小的时候,视口也应该被调整,需要一个回调函数
    void framebuffer_size_callback(GLFWwindow * window,int width,int height);
    //声明一个函数用来检测特定的键是否被按下
    void processInput(GLFWwindow * window);
    
    int main(){
        
        //初始化GLFW
        glfwInit();
        
        //将OpenGL主版本号(Major)和次版本号(Minor)都设为3
        glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
        glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
        
        //使用的是核心模式(Core-profile)
        glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
        
        //如果是macOS系统,则需要下面这行代码才能让配置起作用
        glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
        
        //创建一个窗口对象
        GLFWwindow * window = glfwCreateWindow(800, 600, "LearnOpenGL", NULL, NULL);
        if (window == NULL){
            cout << "Failed to create GLFW window" << endl;
            glfwTerminate();
            return -1;
        }
        //通知GLFW将我们窗口的上下文设置为当前线程的主上下文
        glfwMakeContextCurrent(window);
        
        //GLAD是用来管理OpenGL的函数指针的,在调用任何OpenGL的函数之前我们需要初始化GLAD
        if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)){
            cout << "Failed to initialize GLAD" << endl;
            return -1;
        }
        
        //注册定义好的回调函数,告诉GLFW每当窗口调整大小的时候调用这个函数
        glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
        
        //渲染循环(Render Loop)
        while (!glfwWindowShouldClose(window)) {
            
            //检测特定的键是否被按下,并在每一帧做出处理
            processInput(window);
            
            //glClearColor函数是一个状态设置函数,用来设置清空屏幕所用的颜色
            glClearColor(0.2f,0.3f,0.3f,1.0f);
            //glClear函数是一个状态使用函数,它使用当前的状态来用指定颜色清空屏幕
            glClear(GL_COLOR_BUFFER_BIT);
            
            //glfwSwapBuffers函数会交换颜色缓冲
            glfwSwapBuffers(window);
            //glfwPollEvents函数检查有没有触发什么事件
            glfwPollEvents();
        }
        
        //释放之前分配的所有资源
        glfwTerminate();
        
        return 0;
    }
    
    void framebuffer_size_callback(GLFWwindow * window,int width,int height){
        //glViewport函数前两个参数控制窗口左下角的位置,第三个和第四个参数控制渲染窗口的宽度和高度
        glViewport(0,0,width,height);
    }
    
    void processInput(GLFWwindow * window){
        //检查用户是否按下了返回键(Esc)(如果没有按下,glfwGetKey将会返回GLFW_RELEASE,按下则为GLFW_PRESS)
        if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS) {
            glfwSetWindowShouldClose(window, true);
        }
    }


    输出如下:

    键盘输入esc键可退出


    2.1 如果遇到如下错误:

     解决方案:

  • 相关阅读:
    (转)JQuery中$.ajax()方法参数详解
    __dopostback的用法 . 编辑
    (转)__dopostback的用法 .
    (转)如何区分一个程序员是“老手“还是“新手“?
    jQuery验证框架 .
    location.href的用法
    为用户设置密码
    设置环境变量
    用 xampp 在ubuntu 下配置php 运行环境 lampp
    安装与配置JDK
  • 原文地址:https://www.cnblogs.com/lyonwu/p/14829694.html
Copyright © 2011-2022 走看看