LearnOpenGL学习笔记(一):在Xcode下搭建GLEW、GLFW及GLAD环境

7 篇文章 0 订阅

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)按钮来生成库文件。

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

1.3 配置工程

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

/usr/local/include
$(inherited)
/usr/local/Cellar/glfw/3.2.1/lib
/usr/local/Cellar/gl2w/2.1.0/lib

这里面版本号要根据你安装的版本做相应的修改,如下图所示:
在这里插入图片描述

然后在工程的 General – Linked Frameworks and Libraries添加如下两个包:
在这里插入图片描述

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

2.测试程序

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

//注意要在包含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键可退出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值