OpenGL学习笔记_02

文章只作学习使用,大部分内容来自LearnOpenGL CN
创建窗口 - LearnOpenGL CN (learnopengl-cn.github.io)https://learnopengl-cn.github.io/01%20Getting%20started/02%20Creating%20a%20window/其中个人理解均为此颜色

目录

GLFW

构建GLFW

GLEW

构建GLEW


GLFW

在我们画出出色的效果之前,首先要做的就是创建一个OpenGL上下文和一个用于显示的窗口。在这里我们使用GLFW(The OpenGL Frame Windows Library)。

特定操作系统都能调出自己的窗口,但是太麻烦了,所以我们使用一个称作GLFW的类库。GLFW提供了一些渲染物体所需的最低限度的接口。它允许用户创建OpenGL上下文、定义窗口参数以及处理用户输入。在这里我们使用Microsoft Visual Studio 2019 IDE。

构建GLFW

我们可以直接下载GLFW的所有源码,自己进行编译,然后将它作为一个独立项目添加到VS中,并且将它编译成一个静态类库,链接到我们的主应用。但是因为笔者没下载CMake,所以我们直接用它的预编译好的二进制版本吧。

具体视频教程可以看Cherno在b站上的视频教程【译】TheCherno-OpenGL系列教程_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Ni4y1o7Au?p=2&spm_id_from=pageDriver

首先在这里下载windows的预编译二进制文件。

An OpenGL library | GLFWhttps://www.glfw.org/

我们在VS里新建一个空项目,之后为源文件新建一个文件夹src,在src里新建一个项Application.cpp。这个将成为我们的主文件。

 

之后我们在文件资源管理器中找到我们新建的项目,在这里新建一个文件夹Dependencies,再在Dependencies内新建文件夹GLFW。

 

接下来回到我们刚才下载的GLFW压缩包里,每个C++类库都有include和lib,所以我们要做的就是把include文件夹和对应我们版本的lib复制进我们新建的GLFW文件夹中。 

注:我们可以删除lib-vc2019文件夹中的dll文件和其对应的lib文件。

在VS中右键我们的源文件,点击属性,接下来我们要做的就是在C/C++的常规下面添加一个包含目录

当然我们也可以使用相对方案目录的相对路径(使用VS的宏)。

接下来我们同样设置我们的库目录,在链接器常规下,我们指定一个附加库目录。

 接下来就可以在这里添加我们需要链接的文件了

注:如果你是Windows平台,opengl32.lib已经包含在Microsoft SDK里了,它在Visual Studio安装的时候就默认安装了。由于这篇教程用的是VS编译器,并且是在Windows操作系统上,我们只需将opengl32.lib添加进链接器设置里就行了。

GLEW

因为OpenGL只是一个标准/规范,具体的实现是由驱动开发商针对特定显卡实现的。由于OpenGL驱动版本众多,它大多数函数的位置都无法在编译时确定下来,需要在运行时查询。所以任务就落在了开发者身上,开发者需要在运行时获取函数地址并将其保存在一个函数指针中供以后使用。取得地址的方法因平台而异,在Windows上会是类似这样:

// 定义函数原型
typedef void (*GL_GENBUFFERS) (GLsizei, GLuint*);
// 找到正确的函数并赋值给函数指针
GL_GENBUFFERS glGenBuffers  = (GL_GENBUFFERS)wglGetProcAddress("glGenBuffers");
// 现在函数可以被正常调用了
GLuint buffer;
glGenBuffers(1, &buffer);

你可以看到代码非常复杂,而且很繁琐,我们需要对每个可能使用的函数都要重复这个过程。幸运的是,有些库能简化此过程。我们在这里使用GLEW(The OpenGL Extension Wrangler Library)。

构建GLEW

我们在这里也下载预编译的二进制版本,并且把下载的文件放置在我们刚才建的Dependencies文件夹中

GLEW: The OpenGL Extension Wrangler Library (sourceforge.net)http://glew.sourceforge.net/

接下来的操作和配置GLFW基本一致。 

现在我们的环境应该已经配置完毕了,但是我们在操作的时候还是会有链接错误,这是为什么呢?如果我们打开glew.h,我们会找到这样一串代码

/*
 * GLEW_STATIC is defined for static library.
 * GLEW_BUILD  is defined for building the DLL library.
 */

#ifdef GLEW_STATIC
#  define GLEWAPI extern
#else
#  ifdef GLEW_BUILD
#    define GLEWAPI extern __declspec(dllexport)
#  else
#    define GLEWAPI extern __declspec(dllimport)
#  endif
#endif

GLEW_STATIC 是为静态库准备的,GLEW_BUILD是为动态库定义的,因为我们没有定义GLEW_STATIC并且我们也没有定义GLEW_BUILD,所以它定义了作为从dll文件导入的外部变量GLEWAPI。但是因为我们没有使用GLEW的动态库版本,所以我们出现了链接错误。所以我们只需要在C++预处理器定义GLEW_STATIC。

 这样我们对OpenGL的基本配置就已经完成了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值