Visual Studio 2015 build OpenGl

Visual Studio 2015 build OpenGl

各种库Gl库简介

​ opengl相关API有核心库(gl),实用库(glu),辅助库(aux)、实用工具库(glut),窗口库(glx、agl、wgl)和扩展函数库等。gl是核心,glu是对gl的部分封装。glx、agl、wgl 是针对不同窗口系统的函数。glut是为跨平台的OpenGL程序的工具包,比aux功能强大(aux很大程度上已经被glut库取代)。扩展函数库是硬件厂商为实现硬件更新利用OpenGL的扩展机制开发的函数。 老的opengl开发方式一般就使用的是gl,glu,以及glut这几个库(前几版的红宝书都是基于这种开发模式),然后再有的就是加入了freeglut以及gltools。

  • glut:OpenGL工具库 OpenGL Utility Toolkit
    这部分函数以glut开头,主要包括窗口操作函数,窗口初始化、窗口大小、窗口位置等函数;回调函数:响应刷新消息、键盘消息、鼠标消息、定时器函数等;创建复杂的三维物体;菜单函数;程序运行函数。freeglut则是对glut的开源实现。

  • freeglut
    freeglut是GLUT [注1]的一个完全开源替代库,GLUT最初是《OpenGL红皮书(第二版)》[注2]中的示例程序。自那以后,GLUT简单、跨平台的特点,使其在各种实际应用中广泛应用。 GLUT(以及freeglut)允许用户在众多的平台的创建和管理窗口中OpenGL容器,以及相关的鼠标、键盘和游戏杆功能 。freeglut 由X-联盟许可下发布的。

  • gltools
    《Open个GL超级宝典》里有好多函数是大师为了开发需求自己编写的。gltools.h就是将gl.h、glu.h以及大师们自己写的函数包装起来的。

新的开发模式

OpenGL是一个跨语言和跨平台的图形编程接口,这个API用来与GPU交互,实现基于硬件加速的图形渲染。OpenGL实际上是一个抽象的图形绘制规范,尽管可以由软件来完全实现,但它被设计为大部分或者全部由硬件来实现。OpenGL是一个绘图规范,不同的显卡厂商负责具体实现,因此实现的具体程序也不尽相同。OpenGL是跨平台的,支持PC端,嵌入式设备,手机设备的渲染;同时也是跨语言的,它底层使用C语言实现,支持java语言、Python、javaScript绑定。 OpenGL包括旧的版本和现代版本 旧版本的绘图功能大多数在GPU内完成,某些功能无法实现,现代版本使用着色器程序提供了更大的灵活性。旧式版本是指1.x和2.x版本,现代版本是指3.x以上版本。两者函数的一个区别如下:

  • 旧版本函数:glBegin, glVertex3f, glLightfv, glPushMatrix
  • 新版本函数:glDrawArrays, glVertexAttribPointer, glUniform, glCreateShader
新开发模式使用的库:glew,glfw
  • glew 上面已经提到OpenGL的具体实现由显卡驱动厂商负责,那么不同的厂商实现的库可能有所不同,有的函数可能没有实现,有的包含拓展的实现,而且厂商的实现一般通过动态链接库来提供。一般地使用一个函数前来查询函数是否实现了,而且要关心版本问题,这些细节比较繁琐,可以交给第三方库GLEW来实现,且GLEW还是你绘图函数的获取库。
  • glfw 另外一个值得注意的问题是,为了保持跨平台,OpenGL规范中并未涉及到OpenGL context(opengl环境)的创建和管理部分,这部分的实现依赖于不同系统的窗口管理系统。因此在编写OpenGL程序时需要借助第三方库完成与窗口系统的交互,来创建绘制上下文对象(render context)。而这些与操作系统的窗口系统交互,创建绘制上下文对象,也是与具体操作系统相关的操作,可以交给第三方库GLFW来实现(当然还有其他选择,包括 freeglut,SDL,GLFW目前是比较推荐的)。也就是说GLFW负责创建绘图上下文和窗口系统管理。

不得不说,上面这些介绍还是太简短了,更详细的opengl库的背景可以参考网上的优秀blog,如OpenGL2.0及以上版本中gl,glut,glew,glfw,mesa等部件的关系

Gl库的配置

opengl相关开发辅助库众多,上文提到的只是比较常见常用的一些库,想要获取更多信息或是源码信息,比较好的方式就是去opengl官网看一下(需要翻墙),了解一下它的工具有哪些,然后比较好的下载资料,源码的网站就是github
OpenGL是描述基于光栅化渲染系统行为的规范的名称,它是一种协议,因此要想方便的使用它,就应该是选择几项上面提及的开发工具,然后根据对应的api编写自己的opengl程序。

老版本Gl环境
  1. freeglut:上文提及,freeglut是glut的完全开源替代库,可选择一个或都选择使用。既然是开源,就自然有源码,首先到sourceforge上下载freeglut源码(需要翻墙),不翻墙的话就在gihub上搜索freeglut便可找到源码,github源码,源码下载后,就可以开始使用cmake编译了,具体cmake使用方法参考cmake的使用,得到对应的lib,bin文件,然后开始配置,网上各种教程讲到的配置方式众多,但由于受到了opencv开发,及配置方式的影响,觉得opencv配置模式比较有条理(这里opencv配置模式指的是网上大部分cv开发者blog的opencv配置教程所特有的库的配置方式),因此推荐这种配置方式。即,gl库(包括.h,.lib,.dll文件)单独寻找一个路径存放,然后在vs里边配置属性(索引头文件,库文件路径),写好附加依赖项,最后再把.dll文件的路径放入系统环境变量,这样就完成了vs里边一个库的基本搭建过程(还有其它方式,不过这是比较推荐的方式)。
  2. gltools:同样到github上找到gltools源码,然后用cmake编译,最后配置,同上述方式一样。
    最后应注意附加依赖项的写入
现代Gl环境搭建
  1. glew:glew库的功能在上面以提及,使用它,一不用关心版本问题,二它还是最新最流行的opengl开发库,因此它与glfw库的结合是特别经典的现代gl开发模式。首先是它的源码下载这里提供的是github地址(官网地址在这,考虑到翻墙问题)。然后配置问题,配置方式和上面提到的方式相同,同样还是得注意附加依赖项问题,最后我会贴张图,显示一下我搭建好glew和glfw后的附加依赖项的图。
  2. glfw:GLFW无愧于其号称的lightweight的OpenGL框架,的确是除了跨平台必要做的事情都没有做,所以一个头文件,很少量的API,就完成了任务。GLFW的开发目的是用于替代glut的,从代码和功能上来看,我想它已经完全的完成了任务(借鉴别人的话)。这是它的github下载地址,然后这是它官网下载地址。源码编译配置方式同上。
    下面贴上配置好这俩库后的附加依赖项的填写截图
    这里写图片描述
    • 第一项为opengl32.lib(虽然不在自己编译出的库中),但却是必须的,原因可参考下这篇博客glew glfw opengl 之间的关系
    • 第二项为glfw.lib,属于正常操作,我编译后,只有.lib文件,没有产生.dll文件的(没有的话.dll文件的话,就不需要去管它)
    • 第三项为libglew32d.lib,我用vs编译我下载好的glew版本后,lib里边便有俩个glew库,这里写图片描述
      至于为什么用这个,而不用glew32d.lib的解释我还没查到,现在暂时还没时间去尝试与验证,以后找到解释了再来补上。
  3. 最后就是我搭建过程中参考的一些比较有用的blog:
学习参考资料

自己最开始开发用的便是旧版本的gl开发库,学的很一般,而且比较烦的便是他的窗口管理系统,成型框架限制的比较死(基于glutMainLoop();的循环),因为我开发是想把opengl嵌入到opencv里边去的,所以框架问题很是头疼,多线程也不是很好处理它,所以一直在寻求解决办法,也是由于技术太差,gl底层一点的东西我知之甚少,所以没能解决掉。

后来偶然接触到了glew与glfw,这才知道还有现代版的gl开发方式,而且glfw的窗口管理做的特别好,很方便使用并嵌入其它项目中。极力推荐一位大佬的opengl学习blog:王定桥的专栏(OpenGL学习脚步),他的这一系列blog写的都特别好,而且源码,素材全发布到了自己的github上,特别适合我们学习,和开拓眼界。它blog里边涉及其它库的使用,有assimp,soil,这些库的具体配置我后续会补上。

最后贴上自己通过对他blog的学习,写的一点程序的效果图。
这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值