之前一直想了解OpenGL的相关内容,结果都是看一点扔一点,到现在也就知道OpenGL管线有个啥东西,这次也是下定决心要给它学会!!(要不然就吃土了)
再就是好久也没写博客了,开这篇博客一个是为了自己巩固,另一个是跟大家交流交流,记录一下学习过程吧。
整个进度也是跟着《OpenGL超级宝典(第7版)》来的,整个系列会很长,不定时更新吧(尽量一天一更,要不然我怕又扔了),废话不多说了,整起!
开始学习之前,肯定得需要有openGL相关的库,而且是以C++程序进行的示例,所以后续的代码都是C++的(我C++几乎忘完了,再捡起来!)
将源码目录下的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 个无法解析的外部命令
至此环境就撘完了,我们尝试一下书上第一个例子
直接上代码了
- #include "sb7.h"; //引入库文件
- #include
; -
- 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);
这个环境搭建挺折腾人的,我弄了两三次才搞定,文档上说明的还是不全,所以我也把过程记录了下来,关于vs的部分,我也没什么经验,也是在网上找的解决方案,这里给下参考
参考博客:OpenGL超级宝典(第7版)环境配置和相关问题_ht巷子的博客-CSDN博客_opengl超级宝典第七版