Skip to content
  • 首页
  • 留言
  • 关于

Share the joys of programming and technology

OpenGL开发环境搭建-GLFW与GLAD配置 超详细

OpenGL开发环境搭建-GLFW与GLAD配置 超详细

2021年1月8日 liyanliang Comments 0 Comment
阅读次数: 503

Contents

  • 1 一、构建GLFW
      • 1.0.1 (1)下载GLFW资源包
      • 1.0.2 (2)下载安装CMake
      • 1.0.3 (3) 编译
  • 2 二、获取GLAD
      • 2.0.1 (1)打开 GLAD 的在线服务
  • 3 三、配置解决方案
      • 3.0.1 (1)在该项目的文件夹下新建两个文件夹,一个include,一个libs.
      • 3.0.2 (2)配置属性
  • 4 四、测试:创建一个OpenGL窗口
    • 4.1 相关文章

一、构建GLFW

首先需要获取glfw3.lib文件,获取glfw3.lib文件有两种方法:

第一种方法:直接在官网下载

建议下载32位的。这个是Release版本,所以只能在Release下使用

第二种方法:使用CMake编译获取(建议使用此方法)

(1)下载GLFW资源包

(2)下载安装CMake

为什么要用CMake? 从源代码编译库可以保证生成的库是兼容你的操作系统和 CPU 的,而预编译的二进制文件可能会出现兼容问题(甚至有时候没提供支持你系统的文件)。提供源代码所产生的一个问题在于不是每个人都用相同的 IDE 开发程序,因而提供的工程/解决方案文件可能和一些人的 IDE 不兼容。所以人们只能从.c/.cpp和.h/.hpp 文件来自己建立工程/解决方案,这是一项枯燥的工作。但因此也诞生了一个叫做 CMake 的工具。 1、官网下载:https://cmake.org/download/

2、启动 CMake 在CMake安装目录的bin文件夹下双击cmake-gui.exe启动CMake:

源代码目录我们选择 GLFW 的源代码的根目录,然后我们在根目录下新建一个 build 文件夹,选中作为目标目录。

其他都不动,点Configure(设置)

然后会让我们选择工程的生成器,我用的vs2012,所以是选2012,其余默认 之后等待设置完成后:再次点击Configure(设置)

完成后再点Generate即可.

(3) 编译

在刚才在glfw新建的build 文件夹里可以找到 GLFW.sln 文件,用 Visual Studio 2010 打开。因为 CMake 已经配置好了项目,所以我们直接点击 Build Solution(生成解决方案)

此时会有一些编译产生的error,可以不用管,产生error的原因是Test项目中的一些实例造成了,此时glfw3.lib已经生成完成。

分别编译Debug和Release版本:

二、获取GLAD

到这里还没有结束,我们仍然还有一件事要做。因为 OpenGL 只是一个标准/规范,具体的实现是由驱动开发商针对特定显卡实现的。由于 OpenGL 驱动版本众多,它大多数函数的位置都无法在编译时确定下来,需要在运行时查询。所以任务就落在了开发者身上,开发者需要在运行时获取函数地址并将其保存在一个函数指针中供以后使用。取得地址的方法因平台而异,代码非常复杂,而且很繁琐,我们还需要对每个可能使用的函数都要重复这个过程。幸运的是,有些库能简化此过程,其中 GLAD 是目前最新,也是最流行的库。

(1)打开 GLAD 的在线服务

官网:https://glad.dav1d.de/

三、配置解决方案

使用VS新建一个win32的控制台项目ConsoleOpenGL.

(1)在该项目的文件夹下新建两个文件夹,一个include,一个libs.

把GLFW和GLAD的include下的文件夹复制到我们新建的include

把我们刚才的生成的glfw3.lib搬到libs文件夹。

把GLAD的include/src下的*.c文件复制到工程文件夹,添加到工程里。

(2)配置属性

为了使我们的程序使用 GLFW,我们需要把 GLFW 库链接(Link)进工程。这可以通过在链接器的设置里指定我们要使用 glfw3.lib 来完成,但是由于我们将第三方库放在另外的目录中,我们的工程还不知道在哪寻找这个文件。于是我们首先需要将我们放第三方库的目录添加进设置。要添加这些目录(需要 VS 搜索库和 include 文件的地方),我们首先进入Project Properties(工程属性,在解决方案窗口里右键项目):

然后选择 VC++ Directories(VC++ 目录)选项卡(如下图)。在下面的两栏(Include Directories 包含目录和 Library Directories 库目录)添加目录:把自己的目录(也就是include、和lib两个都加)加进去,让工程知道到哪去搜索。你需要手动把目录加在后面。

包含文件夹:include

包含文件夹:lib

Debug下:

Release下:

四、测试:创建一个OpenGL窗口

//下面两个头文件必须在include的各自的文件夹(glad和GLFW)下才行!!!
#include <glad/glad.h>
#include <GLFW/glfw3.h>
#include <iostream>
#include "glad.c"
void framebuffer_size_callback(GLFWwindow* window, int width, int height);
void processInput(GLFWwindow *window);
​
// settings
const unsigned int SCR_WIDTH = 800;
const unsigned int SCR_HEIGHT = 600;
​
int main()
{
// glfw: initialize and configure
// ------------------------------
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
​
#ifdef __APPLE__
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); // uncomment this statement to fix compilation on OS X
#endif
​
// glfw window creation
// --------------------
GLFWwindow* window = glfwCreateWindow(SCR_WIDTH, SCR_HEIGHT, "LearnOpenGL", NULL, NULL);
if (window == NULL)
{
std::cout << "Failed to create GLFW window" << std::endl;
glfwTerminate();
return -1;
}
glfwMakeContextCurrent(window);
glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
​
// glad: load all OpenGL function pointers
// ---------------------------------------
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
{
std::cout << "Failed to initialize GLAD" << std::endl;
return -1;
}    
​
// render loop
// -----------
while (!glfwWindowShouldClose(window))
{
// input
// -----
processInput(window);
​
// render
// ------
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
​
// glfw: swap buffers and poll IO events (keys pressed/released, mouse moved etc.)
// -------------------------------------------------------------------------------
glfwSwapBuffers(window);
glfwPollEvents();
}
​
// glfw: terminate, clearing all previously allocated GLFW resources.
// ------------------------------------------------------------------
glfwTerminate();
return 0;
}
​
// process all input: query GLFW whether relevant keys are pressed/released this frame and react accordingly
// ---------------------------------------------------------------------------------------------------------
void processInput(GLFWwindow *window)
{
if(glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
glfwSetWindowShouldClose(window, true);
}
​
// glfw: whenever the window size changed (by OS or user resize) this callback function executes
// ---------------------------------------------------------------------------------------------
void framebuffer_size_callback(GLFWwindow* window, int width, int height)
{
// make sure the viewport matches the new window dimensions; note that width and
// height will be significantly larger than specified on retina displays.
glViewport(0, 0, width, height);
}
​

效果:

相关文章

  • LearnOpenGL脑图汇总LearnOpenGL脑图汇总
  • OpenGL 几何着色器的应用OpenGL 几何着色器的应用
  • OpenGL绘制桥梁模型OpenGL绘制桥梁模型
  • Modern OpenGL绘制圆柱体Modern OpenGL绘制圆柱体
  • OpenGL绘制旋转立方体OpenGL绘制旋转立方体
  • OpenGL模型加载-附源码OpenGL模型加载-附源码

OpenGL
OpenGL

Post navigation

PREVIOUS
#pragma message 编译时提示信息
NEXT
OpenGL实现多光源-附项目源码

发表回复 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注

近期文章

  • Games101和Games202脑图汇总
  • LearnOpenGL脑图汇总
  • IBL计算总结
  • C++实现一个简单的语言解释器
  • OpenGL-法线贴图(Normal Mapping)
  • OpenGL-卡通着色(Cartoon)
  • OpenGL几何着色器实现贝塞尔曲线
  • WinDbg检查内存泄漏
  • OpenGL雾化效果实现-每像素雾化
  • OpenGL实现billboard效果(CPU)
  • 算法:寻找异常数字
  • OpenGL 几何着色器的应用
  • Midas XD-构件详图开发
  • Midas XD-选筋助手开发
  • Civil Designer开发-检测规范自动生成控制截面
  • Civil Designer开发-公路桥梁承载能力检算评定
  • Midas W-满堂支架快速建模助手开发
  • OpenGL绘制桥梁模型
  • Modern OpenGL绘制圆柱体
  • WordPress分页插件 – WP-PageNavi的使用(替换现有脚本)

全站热点

  • C++编写的情人节小程序 (1,540)
  • Modern OpenGL绘制圆柱体 (759)
  • 提取最小封闭区域 (714)
  • 截面特性计算程序-附源码 (569)
  • 判断一个点是否在闭合区域内 (565)
  • OpenGL开发环境搭建-GLFW与GLAD配置 超详细 (503)
  • OpenGL绘制旋转立方体 (462)
  • Midas XD [错误] 右侧挡土墙的最下端深度必须小于地基的最下端深度 (438)
  • WordPress分页插件 – WP-PageNavi的使用(替换现有脚本) (395)
  • 使用ODA数据库出现 “ODA_ASSUME”: 找不到标识符的错误 (364)
  • 土木想往土木软件开发方向发展,应该如何准备 (361)
  • #pragma message 编译时提示信息 (336)
  • 从DLL中动态加载一个函数:LoadLibrary和GetProcAddress的使用 (331)
  • Midas W-满堂支架快速建模助手开发 (326)
  • midas XD2020的开发 (324)
  • 两跨连续梁影响线绘制-附源码 (320)
  • 算法:寻找异常数字 (260)
  • OpenGL几何着色器实现贝塞尔曲线 (200)
  • OpenGL实现billboard效果(CPU) (196)
  • 通过Spy++抓取窗口以查询对话框id (189)

分类

  • C# (3)
  • C++ (17)
  • MFC (3)
  • ObjectARX (2)
  • OpenGL (11)
  • Revit开发 (1)
  • 学习笔记 (2)
  • 岩土 (2)
  • 算法 (1)
  • 结构设计 (7)
  • 职场生涯 (1)
  • 计算几何 (3)

归档

  • 2023年3月 (2)
  • 2022年10月 (1)
  • 2022年3月 (1)
  • 2022年2月 (1)
  • 2022年1月 (5)
  • 2021年11月 (7)
  • 2021年6月 (3)
  • 2021年5月 (2)
  • 2021年3月 (2)
  • 2021年2月 (8)
  • 2021年1月 (18)

标签

Bezier Curves BillBoard C++ CDN CivilDesigner DLL EasyX fog MFC Midas W Midas XD NormalMapping ObjectARX ODA OpenGL OpenXML Open XML PBR revit WinDbg 基坑设计 影响线 截面特性 桥梁 桥梁检测 桥梁设计 算法 计算几何 设计模式

书签

  • 李燕良的CSDN
  • 崔济东的博客
  • C++爱好者博客
  • 陈学伟的博客
  • 贾苏的博客
  • 陈睦锋的博客
  • 孙勇的博客

统计

  • 0
  • 23
  • 10
  • 73
  • 29
  • 77,669
  • 24,003

实时访问地域

© 2023   liyanliang.net Copyright. All Rights Reserved.