用QtCreator开发OpenGL游戏
自从接触了Linux之后,我就一直想开发跨Windows和Linux的游戏程序。不过以前介绍游戏开发的书籍多是在Windows下开发的,在Linux下开发又困难重重。直到一天,Qt进入我的视线。
关注Qt已经两年了,现在还非常遗憾没有早点学习Qt。Qt这个项目给我们带来的不仅仅是一个跨平台的解决方案,还给我们带来了跨平台的开发环境——QtCreator。
我非常喜欢QtCreator。它比我熟悉的另一款IDE——CodeBlocks要好。为什么呢?因为QtCreator界面很简约,对于我们这些苛刻的程序员来说,它是非常友好的。此外QtCreator一直在发展,虽然人们看到除了开发Qt应用程序以外,似乎只能跑跑控制台程序,但是聪明的开发者怎么会局限于这些呢?比如说我,就拿QtCreator去做了其它事。
这里有两个我用QtCreator环境开发的基于OpenGL的小程序(免费下载):
好了,介绍一下如何在Linux下用QtCreator开发OpenGL程序。首先OpenGL的开发环境是必须安装的。这里假设你已经有了gl头文件和库(事实上一个不含gl头文件和库的Linux发行版是非常罕见的),我们需要安装的是glut开发库。开发glut需要依次在终端上输入以下命令:
sudoapt-get install mesa-common-dev
sudoapt-get install freeglut3
sudoapt-get install freeglut3-dev
等待网络上下载相关的头文件和库就好了。随后到Qt项目的官网去下载Qt库和QtCreator。嗯,以前(诺基亚时代)的Qt开发包和IDE是打包在一起的,不知道在Digia掌管下怎么会分开下载呢……先安装Qt库吧,然后安装QtCreator(这里为什么要安装Qt库的原因是Qt库提供了一系列工具链,比如说很方便的qmake,而QtCreator几乎是要依靠qmake来运转的)。下载完安装后基本上就可以使用它来开发基于OpenGL+glut的游戏了。下面是我开发的截图(Ubuntu下):
如果是非debian系列的Linux发行版可以到mesa的官网去下载适合你的rpm包或tar.gz包。
下面介绍一下如何在Windows下开发OpenGL程序。同样地,需要下载编译器,要知道Windows是不给你自带编译器的,需要minGW编译器或者VS2008/VS2010编译器。这里我选择了minGW编译器,因为它就是GNU在Windows下的实现嘛。你看,编译器跨平台、IDE跨平台,我们的代码怎么不能跨平台呢(编代码的时候有些情况还是要注意平台相关)!随后同样地下载Qt库和QtCreator,进行安装。安装完毕后简单地配置一下Qt工具链和Qt版本,配置好了之后就可以使用了。
慢着,还没有安装glut呢。glut在windows下的开发包一大堆,随便去哪个地方下载吧。下载完后将glut.h放在MinGW/include/GL里面,glut.lib、glut32.lib放在MinGW/lib里面,glut.dll和glut32.dll可以放在Windows/system32里面,也可以随着程序一起发布。
下面是我开发的截图(Windows8下):
好了,现在开始编写OpenGL程序了。嗯,首先是编码,编码要注意一点,就是在windows下所有cpp文件都要包含windows.h头文件(这是Windows+minGW+OpenGL编程的硬性规定),否则编译虽然没有错误,可是链接却通不过,我就为此垂头丧气了好几回呢。然后呢,编代码部分我就不多说了,大家看看什么书都会的。
说到链接,这里可有学问了。在gcc/minGW下链接程序,不仅链接的库名和路径要正确,而且还要注意链接库的先后顺序。否则怎么样也链接通不过(minGW下尤其如此)!这里我说一下,按照glut、glu、opengl的链接顺序链接是正确的,否则我不敢保证其正确性。另外,如果你有一个静态链接库用到了OpenGL,那么你的静态链接库一定要写到上述库的前面。下面是我的一个.pro文件的内容,注意蓝色底纹的部分。
# Made By Jiangcaiyang HEADERS += \ Maze.h \ Math3D.h \ Logo.h \ KeyEvent.h \ GLWidget.h \ MazeStep.h \ LuaInclude.h SOURCES += \ Maze.cpp \ Math3D.cpp \ main.cpp \ KeyEvent.cpp \ GLWidget.cpp \ MazeStep.cpp # 生成程序的名字 TARGET = Maze2D unix {# 适用于Unix/Linux的 LIBS += $${_PRO_FILE_PWD_}/libLogo_X11.a \ $${_PRO_FILE_PWD_}/libLua_X11.a \ -lglut -lGLU } win32 {# 适用于Windows的 DEFINES += _WIN32 LIBS += $${_PRO_FILE_PWD_}/libLogo_win32.a \ $${_PRO_FILE_PWD_}/libLua_win32.a \ -lglut32 -lglu32 -lopengl32 }
此外,qmake的其它指令还是值得我们学习的,大家可以参考Qt文档或者相关的资料。
程序编完了,就等发布OpenGL程序了。这里我们仍然分Linux和Windows两种情况讨论。在Linux下发布程序需要准备glut.so.3库和你的程序。最好写一个shell脚本,将LD_LIBRARY_PATH加上当前目录。下面是一个示例的shell文件。
#!/bin/sh
if[ -n "." ] ; then
if[ "${LD_LIBRARY_PATH+set}" = "set" ] ; then
exportLD_LIBRARY_PATH="${LD_LIBRARY_PATH}:."
else
exportLD_LIBRARY_PATH="."
fi
fi
chmod+x MyApp
exec./MyApp
三者俱全,即可发布!
在Windows下发布程序比在Linux下还要简单,将glut.dll/glut32.dll和应用程序放在同一个目录下就好了。
下面是我写的两个项目的源代码,如果你有足够分数且想尝试一下的话,嗯,下载吧!