因为做毕设的原因,最近一段时间都在写一个全局光照的shader。期间用了不少开源库,把自己用了以后的经验大致罗列如下。
图像载入
图像载入的库非常多,而且很多都已经很成熟了。选择很多,基本上是萝卜青菜各有所爱,用什么都没关系
DevIL
网上不少shader的示例程序都用了这个DevIL库来读取图像。这个库的程序接口和OpenGL风格类似,调用起来很方便,支持的格式也非常多,只是可以保存的图片格式稍微少一些。不过平常自己的程序也需要保存图片为奇奇怪怪的格式。
http://openil.sourceforge.net/
Simple OpenGL Image Library
这个简称soil的图像库使用起来非常简单,只需要一个函数就可以把图像读取到OpenGL中去。我的Shader Demo用的就是这个库,目前还没有发现什么问题。
http://www.lonesock.net/soil.html
模型载入
网上的模型格式可谓各式各样,每个游戏基本上都会有一个自己专用的模型格式。个人感觉有一个能够读取各种格式模型的库还是挺有必要的。
gl3ds
这个项目是glee的一部分。从名字就可以看得出来,这是专门用来读取3ds文件格式的轻量级库。不过它也仅仅能用来读取3ds模型。
http://sourceforge.net/projects/glee/
Open Asset Import Library
如果手头模型格式五花八门,那么可以用这个大家伙来解决你的问题。它能导入十几种模型格式,同时提供C/C++接口。缺点是对于一个简单的Demo程序而言可能有点过于巨大–我的程序在链接了它的静态库以后体积达到了6M…
另外一点就是,这个库独立于OpenGL/DirectX,并不提供针对OpenGL的接口。也就是说你还是得自己写一个循环来绘制模型,不过好在这并不麻烦。
http://assimp.sourceforge.net/
基础框架
大多数人都是比较懒的,懒人都是不会为了一个demo而去从win32 api开始写代码的。
GLUT
没什么可说的,读过红宝书的人肯定对于这个库都非常熟悉。优点是简单,缺点是不方便于面对对象编程,库也非常老了。
http://www.opengl.org/resources/libraries/glut/
FreeGLUT
GLUT的开源实现版本。如果你对于没有glut的源代码而耿耿于怀的话可以用它。不过也不要抱太大希望,这个库和glut几乎一模一样,同时有glut的优点和缺点
http://freeglut.sourceforge.net/
Humus’s Framework
Humus的个人网站上有一卡车一卡车的Shader Demo程序,而他的程序都是用自己的Framework 3写的。这个库很强大的样子,跨平台支持Windows, Linux, 能够用于OpenGL和DirectX,可谓大小通吃。不过缺点是虽然你能下载到它的所有源代码,但是却完全没有文档,连注释都没有。作者最近正在写支持OpenGL 3.0的Framework 4,让咱们祈祷他能写点注释生成个Doxygen文档吧…
http://www.humus.name/
Ogre
这算是这几个里面最重量级的框架了吧。完整的渲染引擎,可以用同样的代码调用DirectX和OpenGL渲染。Ogre的脚本系统很是强大,只需要用脚本就可以搞定Shader渲染中的大部分工作–包括创建Render Target, 载入纹理,实现各个Pass间的交接等等。但是最大的问题是,学习和使用Ogre本身就是一个很大的工作量。如果你已经有使用Ogre的经验的话不妨考虑一下。
http://www.ogre3d.org/
数学库
如果你用了很多第三方库的话,数学库可能会编程很麻烦的一个东西。你会发现你的摄像机、GLSL抽象类、模型载入库分别用了一套不同的库(这正是我现在正在郁闷的一个问题)。没办法,既然不想自己写所有的代码那就只能忍忍了。
GLM
GLM也就是GL Mathematics的缩写。这个库提供的类接口和GLSL中内置的数学接口非常相似,但是缺少一些常用的函数,不是特别方便
http://glm.sourceforge.net/
近期评论