1.题外话
之前一直想了解OpenGL的相关内容,结果都是看一点扔一点,到现在也就知道OpenGL管线有个啥东西,这次也是下定决心要给它学会!!(要不然就吃土了)
再就是好久也没写博客了,开这篇博客一个是为了自己巩固,另一个是跟大家交流交流,记录一下学习过程吧。
整个进度也是跟着《OpenGL超级宝典(第7版)》来的,整个系列会很长,不定时更新吧(尽量一天一更,要不然我怕又扔了),废话不多说了,整起!
2.环境搭建
开始学习之前,肯定得需要有openGL相关的库,而且是以C++程序进行的示例,所以后续的代码都是C++的(我C++几乎忘完了,再捡起来!)
- 书本上第一个程序并没有说环境搭建,而在第一章还是之前,有提到关于书上示例的源码下载
- 首先我们去github上把代码弄下来,源码仓库,下载之后,进行解压缩,这里说明一下,因为我是使用的windows,会以windows环境来说。
- 我们还需要下载一个CMake,下载地址,下载后进行安装
- 进入到代码源目录,打开HOWTOBUILD.txt,里面详细的说明了环境的搭建,跟着说明文档,一步步的操作
- 进入到目录sb7code-master\extern\glfw-3.0.4,然后打开CMake,如下图,按照图示顺序依次点击
- 这里要说明一下,点击Configure的时候,会弹出如下面板,因为我用的是vs 2017,默认就是win32的,如果是高于这个版本,默认是64位的,所以这里一定要选择win32的,不然后续会有不知名的问题。第一行就选你对应的vs版本
- 打开\glfw-3.0.4\build\GLFW.sln,debug和release都生成一边
- 然后把\glfw-3.0.4\build\src\Debug和Release中的glfw3.lib拷贝到根目录下的lib文件夹中,Debug中的glfw3.lib需要改名为glfw3_d.lib,Release中的不需要
- 然后回到根目录,再次打开CMake,将目录换到根目录下,再重复5、6的操作
- 打开VS新建一个工程,这里选空项目,然后我们进入到工程目录下创建两个文件夹include和lib
-
将源码目录下的lib文件夹中的文件复制到创建的lib文件夹中去
-
将源码目录下的include文件夹中的文件和\extern\glfw-3.0.4\include中的文件都复制到include下面,如下图
-
然后我们在vs中,右键解决方案,选择属性
-
进入到属性面板,选择C/C++一栏,将“附加包含目录”添加上include的路径,可以写绝对路径或者相对路径,如果没有这一页签,需要先新建一个cpp文件
-
接着在预处理器中,预处理定义加上WIN32;_WINDOWS
-
然后选择链接器,附加库目录添加lib的路径
-
链接器->输入->附加依赖项,将几个lib文件添加进去
sb7_d.lib;glfw3_d.lib;opengl32.lib;glu32.lib;%(AdditionalDependencies)
-
最后也是最重要的一点,选择系统,将子系统改为窗口,否则在调用DECLARE_MAIN的时候会报错
错误 LNK2019 :无法解析的外部符号 _main,函数 “int __cdecl invoke_main(void)” (?invoke_main@@YAHXZ) 中引用了该符号 错误 LNK1120 :1 个无法解析的外部命令
-
至此环境就撘完了,我们尝试一下书上第一个例子
3.第一个OpenGL程序
直接上代码了
#include "sb7.h"; //引入库文件
#include <cmath>;
class my_application : public sb7::application
{
public:
//渲染的方法
void render(double currentTime) {
//初始化了一个颜色数组
//currentTime是应用开始运行以来经过的秒数
//这里跟随时间动态改变颜色及透明度
const GLfloat red[] = { (float)sin(currentTime) * 0.5f + 0.3f, (float)cos(currentTime) * 0.5f + 0.5f, 0.0f, (float)cos(currentTime) * 0.5f + 0.5f };
//告诉OpenGL清除第一个参数的缓存,而使用第三个参数的值,也就是把原来的颜色改成我们设置的颜色
glClearBufferfv(GL_COLOR, 0, red);
}
};
DECLARE_MAIN(my_application);
4.运行结果
5.总结
这个环境搭建挺折腾人的,我弄了两三次才搞定,文档上说明的还是不全,所以我也把过程记录了下来,关于vs的部分,我也没什么经验,也是在网上找的解决方案,这里给下参考
参考博客:OpenGL超级宝典(第7版)环境配置和相关问题_ht巷子的博客-CSDN博客_opengl超级宝典第七版