mac下搭建OpenGL ——XCode
转自:搭建Mac OpenGL开发环境 - 简书 https://www.jianshu.com/p/891d630e30af
(涉及到GLTools请参考:https://www.jianshu.com/p/00642d9e83c5)
这是OpenGL基础说明,我将每天学习的内容,遇到的问题分享给大家,如果想要看文档请看这里 :https://learnopengl-cn.github.io
下边就开始搭建环境。
1.安装brew
在终端输入:(我是之前安装过brew 这里只是大概的说明安装流程,没有安过的可以百度一下很多的)
$ gcc --versionruby -e"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"$ brew doctor$brew update
2、安装GLEW和GLFW库
$ brew install glew
$ brew install glfw3
3.下载GLAD库
① 打开GLAD的在线服务:http://glad.dav1d.de如图设置 OpenGL使用的是3.3 版本 至于为什么使用3.3 请看https://learnopengl-cn.github.io这里。
5.png
点击生成并下载 glad.zip 并解压
包含两个头文件目录,和一个glad.c文件。将两个头文件目录(glad和KHR)复制到Include文件夹中(路径"/usr/local/include")(可以使用cmd + shift + g )。
4、新建一个工程
输入Product Name,Organization Identifier也必须输入(所填内容为本人百度)
删除相关文件如图所示
image.png
5、设置
build setting 找到 header search paths(直接在搜索框中搜索Header Search Paths即可,然后双击后面空白处添加)
->添加“/usr/local/include”路径到Header Search Paths
->添加“$(inherited)”
“/usr/local/Cellar/glfw/3.2.1/lib”
“/usr/local/Cellar/glew/2.2.0/lib”路径到Header Search Paths
Build Phases 找到 Link Binary With Libraries 增加如下内容(最好还要加一下GLUT.framework)
将我们下载的glad.zip 解压的glad.c 文件拖进项目(后续选项默认即可)
新建一个c++ main.cpp 程序 如图(跳出的选项默认即可):
#include<stdio.h>
//glad 一定要在 glfw 上边
#include
#include
intmain(){
return0;
}
cmd +B 编译一下success 表示环境搭建完成。
测试一下: 注意全copy!
#include<stdio.h>
#include
#include
#include
intmain(intargc,char**argv){
usingstd::cout; usingstd::endl;
glfwInit();
// 主版本
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR,3);
// 次版本
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR,3);
// 告诉glfw 我们使用的是core_profile 核心模块
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
// 向前兼容
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
// 创建一个GLFW 窗口 宽 高 窗口名字 后边两个暂时不用管
GLFWwindow* window = glfwCreateWindow(800,600,"LearnOpenGL",NULL,NULL);
if(window ==NULL)
{
std::cout <<"Failed to create GLFW window"<< std::endl;
glfwTerminate();
return-1;
}
// 通知GLFW将我们窗口的上下文设置为当前线程的主上下文了
glfwMakeContextCurrent(window);
// GLAD 是用来管理openGL 的函数指针的。所以在调用任何openGL函数之前我们都需要初始化GLAD。
// 我们给GLAD传入了用来加载系统相关的OpenGL函数指针地址的函数。GLFW给我们的是glfwGetProcAddress,它根据我们编译的系统定义了正确的函数。
if(!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
{
std::cout <<"Failed to initialize GLAD"<< std::endl;
return-1;
}
// 创建渲染的视口: 我们必须要告诉OpenGl 需要渲染的尺寸大小,即为视口 viewport(),这样openGL 才能知道根据窗口大小显示数据和坐标。
// glViewport 前两个参数控制视口左下角位置,后两个参数控制视口的宽和高
// openGL 幕后使用的是glViewport 定义的 位置和宽高进行2D转换
glViewport(0,0,800,600);
// 窗口调整的时候 视口应该也被调整 对窗口注册一个回调函数每次窗口大小被调整的时候会被调用
voidframebuffer_size_callback(GLFWwindow *window,intwidth,intheight);
// 通过 glfwSetFramebufferSizeCallback glfw 函数 当窗口frame 变化时会调用。
// 对于视网膜屏 Retain 屏 宽度和高度明显比原输入值更高一点。
glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
voidprocessInput(GLFWwindow *window);
// 为了防止 渲染的图像一出现就退出 我们使用while 循环 。我们可以称之为Render Loop
// glfwWindowShouldClose 每次循环开始前检查一次GLFW 是否被要求退出 是true 的话渲染便结束了。
while(!glfwWindowShouldClose(window))
{
//输出控制
processInput(window);
// glfwSwapBuffers 会交换颜色缓冲(他是存储着GLFW 窗口每一个像素色值的大缓冲),将会作为输出显示在屏幕上
// 当程序退出的时候 使用一个自定义的颜色清空屏幕 在每个新的渲染迭代可是的时候我们总希望清屏否则总是看到上次渲染的结果。
// 我们可以使用glClear GL_COLOR_BUFFER_BIT,GL_DEPTH_BUFFER_BIT和GL_STENCIL_BUFFER_BIT。 我们清空颜色 。
glClearColor(0.5f,0.1f,0.0f,1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glfwSwapBuffers(window);
// glfwPollEvents 检查函数有没有触发什么事件 键盘输入 鼠标移动 并调用对应函数
glfwPollEvents();
}
glfwTerminate();
return0;
}
voidframebuffer_size_callback(GLFWwindow* window,intwidth,intheight)
{
glViewport(0,0, width, height);
}
voidprocessInput(GLFWwindow *window)
{
//
if(glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
glfwSetWindowShouldClose(window,true);
}
出现下边界面就表示我们的环境搭建完成
PS:
在学习《OpenGL超级宝典》时, 其中的例子用到了GLTools库,需要自行安装。MAC下GLTools的安装方法如下:
1. git clone https://github.com/HazimGazov/GLTools
2. cd GLTools/build
3. cmake ..
4. make
5. sudo make install