游戏程序设计Ogre+cegui 071.docx
《游戏程序设计Ogre+cegui 071.docx》由会员分享,可在线阅读,更多相关《游戏程序设计Ogre+cegui 071.docx(16页珍藏版)》请在冰豆网上搜索。
游戏程序设计Ogre+cegui071
游戏开发软件安装及问题解决
Ogre+cegui0.7.1+NXOGRE+FMOD
一、安装仪器
硬件:
计算机
软件:
MicrosoftVisualStudio2008,ogre-v1-7-0.zip,
OgreDependencies_MSVC_20100106.zip,
DirectX,cmake-2.8.1-win32-x86.exe,CEGUI-DEPS-0.7.x-r1-vc9.zip,
CEGUI-0.7.1.zip,NXOGRE,FMOD等等。
二、ogre安装过程
1.登陆http:
//www.ogre3d.org/download/source下载Ogre和Ogre的依赖库OgreDependencies。
2.在安装Ogre之前,首先需要安装DirectX和MS2008。
3.编译Ogre,我们直接对源码进行编译。
解压缩OgreDependencies_MSVC_20100106.zip和ogre-v1-7-0.zip,将ogre-v1-7-0.zip解压缩之后存放到F:
\orgeInstall路径下,并将Dependencies整个目录copy到ogre主目录里。
4.打开vs2008,设置工作环境。
在主菜单中选择[工具]-[选项...],打开"选项"面板,在左边目录选择[项目]-[VC++目录]。
在右栏设置“包含文件”“库文件”目录。
“包含文件”增加
F:
\orgeInstall\ogre-v1-7-0\ogre\Dependencies\include
F:
\orgeInstall\ogre-v1-7-0\ogre\OgreMain\include
D:
\softwareInstall\MicrosoftDirectXSDK(June2010)\Include
“库文件”增加
F:
\orgeInstall\ogre-v1-7-0\ogre\Dependencies\lib\Release
F:
\orgeInstall\ogre-v1-7-0\ogre\Dependencies\lib\Debug
D:
\softwareInstall\MicrosoftDirectXSDK(August2009)\Lib\x86如图:
5.打开F:
\orgeInstall\ogre-v1-7-0\ogre\Dependencies\src目录下的
OgreDependencies.VS2008.sln。
分别在debug和Release版本进行编译,这里编译是生成解决方案。
在编译OgreDependencies.VS2008.sln会报错。
errorPRJ0003:
生成cmd.exe时出错。
原因是VS2008的环境变量设置有问题。
改正如下:
工具—选项—项目和解决方案—VC++目录,可执行文件中,
把$(PATH)删掉;增加
$(SystemRoot)“System32
$(SystemRoot)
$(SystemRoot)“System32“wbem即可。
6.安装cmake-2.8.1-win32-x86.exe,保持默认路径C:
\ProgramFiles\CMake2.8.
运行C:
\ProgramFiles\CMake2.8\bin\cmake-gui.exe,在"Whereisthesourcecode"和"Wheretobuildthebinaries"中设置ogre的解压路径,点击configure,选择VS92008。
然后点击Generate,在ogre目录下生成OGRE.sln。
如图:
7.打开生成的OGRE.sln,分别在Debug和Release下编译,编译成功后,可运行Samples。
编译好的程序例子位于…ogre\bin\debug下。
右击SampleBrowser,调试新实例。
选择一个Sample,如图
三.cegui0.7.1安装
1.CEGUI-DEPS-0.7.x-r1-vc9.zip和CEGUI-0.7.1.zip下载
2.将CEGUI-0.7.1.zip和CEGUI-DEPS-0.7.x-r1-vc9.zip解压,并把依赖库放到cegui的目录下。
3.进入目录…CEGUI-0.7.1\projects\premake,用记事本打开目录下的config.lua,
找到两个变量:
OGRE_PATHS和OIS_PATHS,将其修改成对应的ogre和ois的路径,例如:
OGRE_PATHS={"F:
\orgeInstall\ogre-v1-7-0\ogre","OgreMain/include","lib"}
OIS_PATHS={"F:
\orgeInstall\ogre-v1-7-0\ogre/Dependencies/include/OIS/","","lib"}
找到CEGUI_OLD_OIS_API变量,设置为false
找到OGRE_RENDERER变量,设置为true
找到SAMPLES_OGRE变量,设置为true
4.进入目录…CEGUI-0.7.1\projects\premake,运行build_vs2008.bat(对应VS2008),当前目录下生产CEGUI.sln。
5.运行build_samples_vs2008.bat(对应VS2008),当前目录下生产CEGUISamples.sln。
6.分别编译CEGUI.sln和CEGUISamples.sln(同样要在debug和release下编译)
可能产生的错误及解决方法:
(1)编译CEGUI.sln,缺少OgreBuildSettings.h,需要添加包含文件。
工具—选项—项目和解决方案—VC++目录,包含文件中,添加
F:
\orgeInstall\ogre-v1-7-0\ogre\include即可。
(2)编译CEGUI.sln时,出现LINK:
fatalerrorLNK1104:
无法打开文件“OgreMain_d.lib,需要相应的添加库文件。
工具—选项—项目和解决方案—VC++目录,库文件中,添加
F:
\orgeInstall\ogre-v1-7-0\ogre\lib\Release和F:
\orgeInstall\ogre-v1-7-0\ogre\lib\Debug即可。
(3)编译CEGUISamples.sln时,会出现缺少库文件的情况,需将…ogre\Dependencies\include\OIS中的库文件复制到…CEGUI-0.7.1\dependencies\include即可。
7.在运行sample前,先复制…CEGUI-0.7.1\dependencies\bin下的所有dll到…CEGUI-0.7.1\bin下面,这样就不会报错提示缺少dll了.
8.运行结果
四、NXOGRE安装
首先必须安装PhysXSystemSoftware和PhysXSDK
Vs2008下添加相应文件
头文件:
…\NVIDIAPhysXSDK\v2.8.1\SDKs\Physics\include
…NVIDIAPhysXSDK\v2.8.1\SDKs\Foundation\include
…\NVIDIAPhysXSDK\v2.8.1\SDKs\PhysXLoader\include
…\NVIDIAPhysXSDK\v2.8.1\SDKs\Cooking\include
库文件:
…\NVIDIAPhysXSDK\v2.8.1\SDKs\lib\Win32
下载BloodyMess(来源于http:
//www.ogre3d.org/tikiwiki/Nxogre)
编译Build/msvc目录的NxOgre和OgreRenderSystem工程,会在sdk目录下生成相关文件。
VS下添加相应文件
头文件:
…NxOgre\sdk
库文件:
…NxOgre\sdk
就可以使用NxOGRE了,当然运行程序我们还要添加必要的dll文件,release版本下大概就这两个,NxOgre.dll和NxOgre.dll.intermediate.manifest,如果不够可以再加。
五、FMOD安装
教程http:
//www.ogre3d.org/tikiwiki/FMOD+SoundManager&structure=Cookbook
可以安装一下fmodapi43206win32-installer
(1).exe,里面有很多有用的文件,包括头文件,库文件,dll文件。
头文件fmod_errors.h,fmod.h,fmod.hpp,库文件fmodexp_vc.lib加入到工程中即可。
Release版本用到的dll文件大概有fmodex.dll和fmodexL.dll,不够再加。
问题集锦:
1.无法找到头文件
文件路径没有找到,解决方法:
项目属性—配置属性—c/c++—常规—附加包含目录,添加include,就可以找到Game.h
2.程序编译成功,无法运行
缺少链接库,创建lib文件夹,添加需要的lib文件
3.加入FmodWiki中的封装类SoundManager.h和SoundManager.cpp出现错误
通过网上查找资料,是ogre版本问题
将getWorldOrientation改为getOrientation,getWorldPosition改为getPosition
OK了。
4.编译过程中发现:
Vehicle.obj:
errorLNK2001:
无法解析的外部符号"public:
classOgre:
:
SceneNode*__thiscallOGRE3DPointRenderable:
:
getNode(void)"(?
getNode@OGRE3DPointRenderable@@QAEPAVSceneNode@Ogre@@XZ)
通过查找资料,发现是nxogre问题
在…NxOgre\rendersystems\ogre\OGRE3DPointRenderable.cpp
添加此函数
Ogre:
:
SceneNode* OGRE3DPointRenderable:
:
getNode()
{
return mNode;
}
重新编译nxogre(具体参考nxogre安装过程)即可。
5.添加声音时,出现下面错误
定义soundManager对象为静态变量即可。
6.编译时产生很多警告,如下图:
经查找,在项目属性中,c/c++的命令行中添加/wd4819/wd4390即可。
7.errorC2664:
“MessageBoxW”:
不能将参数2从“constchar*”转换为“LPCWSTR”
解决办法:
在项目属性的常规中将字符集改为使用多字节字符集即可。
8.赛车制作过程中,为了增加赛车的真实感,将赛车各个部件分开制作,之前没有考虑到,因此走了很多冤枉路。
9.
添加音乐之后产生了无法解析的外部命令,因为是在链接方面,所以跟FMOD的lib有关。
查看项目属性,在附加依赖项添加FMOD的链接文件fmodex_vc.lib即可。
10.赛车建模和贴图时所遇到的问题:
(1).所建模型和游戏要求不符合
游戏本款游戏为3D游戏,所以对游戏中赛车的要求也比较高,游戏要求在游戏过程中,随着赛车转弯等动作的产生,赛车的车轮也能够改变方向。
由于一开始的建模过程中没有考虑到这一点,所以使得建的赛车模型不能满足游戏的要求。
解决方案:
重新建模,增加模型的复杂度,使重建模型符合游戏要求。
(2).贴图的材质问题
在贴图的过程中,开始时使用3DMax自带的一些色彩来进行贴图,再利用光照的效果,这样做虽然提高了效率,节省了大量的贴图时间,但为后来的导入OGRE工作带来了不变,原因是OGRE不能识别3DMax自带的色彩信息。
解决方案:
1).使用各种材质来进行贴图,而不单单是简单的色彩;
如下图所示为游戏工程初期简单的色彩贴图:
如下图所示为使用改进后的贴图模型:
2).使用另一种建模软件:
GoogleSketchUp7
,在SketchUp里用简单的色彩进行贴图,然后再将文件放入到3DMax中,转化为MESH格式的文件,为导入OGRE做准备。
11.导入OGRE时遇到的问题:
(1).在将模型导入OGRE后,模型变成全白色,只能分辨出汽车的轮廓。
解决方案:
在探索过程中,发现产生上述情况的原因有三种。
1)贴图时完全采用程序提供的色彩来进行贴图,由于OGRE不能识别3DMax自带的色彩信息,所以色彩信息就全部丢失,使得模型全部变成白色。
所以我重新用一些简单的图片来进行贴图,解决了问题;
2).在导入OGRE时,只导入了MESH格式,但是贴图的材质的信息是保存在material中的,由于没有将.material导入OGRE,使得材质信息丢失,所以使得模型变成了全白;
(2).导入OGRE的模型没有任何问题,但是还是无法导出。
仔细研究代码、查阅网上资料后发现,.material的文件名是不能有中文字符出现的,否则OGRE是无法辨认的,由于我一开始.material的文件名为“yangjun做的模型.material”,所以使得导入失败。
解决方案:
由于.material文件的文件名和.material文件内的文件内容是相关联的,所以单单改变.material的文件名是不能解决问题的,所以我不得不重新建模和贴图。
12.音效制作时的问题:
(1).游戏音效的基调把握不好。
由于本款游戏讲述的是两个小孩的赛车征途,但同时又是一款刺激的赛车游戏,所以在制作赛车游戏音效时,不能确定是要惊险刺激的效果还是略带童真的效果。
解决方案:
经小组成员的讨论决定,要一种带有时尚感的刺激的效果。
13.策划时问题:
(1).没有考虑实际情况,策划了过于复杂的游戏内容。
游戏策划前期是预期完成一款结合RPG和赛车的游戏,游戏中玩家可以选择自己所扮演的角色(Mickey或者是Jenny),然后根据所扮演的角色来进行比赛。
但到在游戏开发过程发现,实验角色扮演是有一定难度的,所以小组决定认真完成赛车游戏部分,而RPG的部分可以在以后的学习过程中加入进去。
(2).没有很好的细致地列出每周所需完成的任务,只是给出了一个大概内容,在后期总结了这一不足后认真布置每一周的作业,使得进度有很大的提升。
14.之前对这些制作都没有接触过,所以感觉学起来有点困难。
当中遇到了很多的问题,有的根据查阅资料或者网上的视频等资料解决了,但有的还是没有很好的解决。
刚开始是通过视频来熟悉软件。
最先做的是山坡加道路。
山体没有这样的模型,也没有相似的可以借鉴的网上相关内容,对于整个物体的实际尺寸也没有统一形成。
不知道该从何处入手做。
根据图书馆的相关书籍,里面介绍了简单山体的基本内容。
它是根据等高线来制作的。
用曲线画出大小不同的内外嵌套的闭合曲线来作为等高线,利用修改器中的松弛、网格平滑等效果对等高线做修饰,最后做成大致的山体模型。
而山脉中的道路,是仿室内设计的制作门的方法套过来的。
室内的门是利用二维几何体的绘制再转成三维物体。
先画一条简单的几何线,加上轮廓得到封闭的双线。
再根据地形的起伏变化将道路在山脉的布局慢慢调整,细节的地方可以在线上加点,一点一点细化,再利用挤出命令得到一条根据山脉地形起伏变化的道路。
如果是单一的简单的均匀材质,直接把材质贴上去就可以,它的真实度就挺好。
但是山体和道路要有真实感,贴图是需要复合的。
后来制作的一个山坡,它的贴图是用两种复合的材质。
调整两者的比例可以控制山体表面的真实效果。
每一种材质所贴的位置不同、所贴的数量不同都会影响到最后的效果。
这里山脉所贴的位置是漫反射颜色、高光颜色、高光级别以及凹凸处对其进行贴图,两种材质的贴图位置是相同的。
同时还需要一张黑白图片,后来发现另一种制作山脉的方法。
如果我们所制作的山脉的起伏是根据我们自己画等高线的方法(就是前面所提的方法),就不必在遮罩处贴上这张图片。
另外的制作山脉的方法就是利用这张黑白图片。
黑白图片会决定山脉的起伏,利用修改器中的一些列命令来制作山脉。
如果用的黑白图片做山体,就需要在遮罩处同时贴上这张图片。
再调整混合曲线,通过材质球来观察效果,从而得到我们所想要的那种贴图效果。
这样通过混合得到的贴图后的效果还行。
在山脉上可以看见土的那种效果,土与绿色植物相结合。
在山脉上加上树的效果。
沿山体的起伏分布树。
软件本身带了树的制作模型,但是它本身的模型比较粗糙,叶子都很简单,直接是长方形的叶子,如果不是要求精细的场景,这样的树也是可以直接使用的。
我们也可以根据自己的需要对其进行简单的修改。
比如,树叶的数量,枝干的多少等。
它也有好几类树木模型,针松、柳树以及一般的树。
制作树木也有好几类方法。
一种是可以根据立方体模型拼凑出树木,各种大大小小不同的立方体,等树木整体的基本造型完成后,再对其进行细化,立方体本身是棱角分明的,可以通过网格平滑等命令,使得其形象进一步接近树木。
再贴图来完成整棵树的制作。
还有一种方法,它也不是一种真正的三维制作方法,而是二维的,用于不是那么精细的场景制作中的。
它要准备两张树木的黑白图片,两张刚好相反的黑白区域,一张是树白,一张是树黑。
先在视图中建立一个弧形的线条得到弧形类似于墙面的单层体,将其中一张图片重复贴到弧形上,再将另一张树的贴图贴上,它的数目与前面图片的数目是相同的。
这样就可以得到简易的行道树,由近及远还可以根据自身需要对其进行设置得到更具真实感的图片。
当然,这类制作方法只能用于简单的场景制作。
对于要求较高的场景制作,是远远不能达到的。
贴图里面还有一个就是环境贴图。
只要在“渲染”—“环境”中将图片贴上,再拉进材质编辑器的材质球中即可。
但是环境贴图要跟我们所制作的场景相融合,就需要不断的调整,找到一个合适的角度才行。
极简单的草地可以直接对表面进行贴图。
也可以用二维转三维的方法。
利用修改器中的毛发功能来制作草地,草地的地表就比较重要,要形成草地的错落有致。
在制作草地的过程当中很关键的一步是对颜色的把握。
梢、根部分是用贴图,还有变异颜色和卷发参数等的设置来控制草的形状。
感觉赛道的制作挺困难的。
没有可以直接借鉴和参考的资料。
刚开始,是简单的用挤出等命令来做。
但是赛道是弯弯曲曲的,赛道旁边的景物也就要随着弯曲程度的不同而变化。
所以后来赛道的制作,参考了很多网上的资料。
14在利用3dsmax制作过程中遇到的问题:
1、不知道怎么样才能在造型上贴好材质,才能使效果图看起来不失真,有真实感。
不应该用100%的材质贴图,应该多用色彩调和,图片也要,现在的硬盘大,多装图片没关系。
还有必须要弄清楚贴图坐标的用法!
2、在PHOTOSHOP中处理的图像贴到3D中如何可做出立体效果?
将图应用到到置换贴图上,在贴图面版里有个displacement,选择bitmap,后,找些黑白的花纹贴上,然后赋给物体,然后在物体上加上一个displace,或者直接把黑白图贴到maps的bump里面,再赋给物体就可以得到简单的起伏变化了.
3、在渲染了后,已经增加了节点,但还是出现了大量的锯齿。
在渲染菜单底下选择SMOOTH项目。
。
。
。
。
。
。
1、蒙皮失效
在首次制作过程中出现了蒙皮失效的情况,之后经过仔细查找,发现由于体型模式按钮没有使用导致的。
以此认识到认真是必须的。
2、多动作的制作
经过细致的摸索,找到了多动作制作与分开导出的方法。
在OGREMAX中要对选中的动作模型,设置各个动作的起始,最终时间,这样就能在导出的mesh模型中调用各种动作。
3、动作质心问题
动作质心的移动和位置问题,一直都很严重。
但是始终未找到有效的解决办法。
目前的解决方式是手动修改质心的位置和移动距离。
4、场景导出贴图等问题
由于建模标准没有统一,各种命名问题等都会引起场景导出出错。
在以后的工作中,特别是多人合作的情况,必须要统一标准,统一命名。
5、不知道原由的破面,多加点少了点
为寻找出现这些问题的原因花费了不少时间,有时不得不因为找不到或者已经完全破坏无法修改时重新建一个,这时过程文件的保存就非常重要了。
就如在制作体育馆的模型时,我在制作过程中就边减少面,做到中间时发现了一个破面,找了很久都无法找到原因。
后来终于找到原因发现是因为在删面时多删掉了一个固定位置的点,导致附近的面无法形成。
6、3dmax中药高清楚视图的关系,把左视图和又视图弄反了会完全建错模型
7、建模的时候节约用面了,多边形,样条线要减少段数,这样会使渲染的速度加倍
8、为了能更方便精确的做出模型可以在视图中添加视口背景,匹配位图,这样移动模型的时候背景图就不会移动了,一般设置前视图和左视图,在透视图中对比来做
9、可以在材质编辑器中选择在视口中显示标准贴图,这样能更直观的观察贴图是否合适,如果要两面显示的话可以选择明暗器中的双面,双面在透视图中观察不到的,在渲染后可以观察出来
10、在可编辑多边形中可以选择点的环形或者循环,从而选中相关的点,这样比较方便不用一个一个点选中
11、3dmax中有可编辑多边形和可编辑网格,可编辑网格比较稳定,可编辑多边形本质上还是mesh但是修改的功能比可编辑网格要多很多。
12、做地图时遇到的问题主要是怎么做,不知道如何下手,后来在同学的帮助下,从网上下了几个别人做的场景模型,然后参照他们的做法,在一个平面上放东西,一层一层的叠上去。
做骨骼动画时,由于是看视频教程,讲的也比较仔细,没遇到什么大问题,就是做出来的动作不像,然后仔细观察了下走路或者跑步时的动作,做出来稍微能看了一下。
导到ogre里面后动作又不行了,感觉模型就是飘着走的或跑的。
还有就是关键帧之间会自动平滑,每一帧都有动作,因此有时候改关键帧时,动作之间会不平滑,不自然,尽量先想好在哪个地方需要关键帧,每一个关键帧大致是怎样的,尽量一次ok,同一个动作的第一帧跟最后一帧的动作需要一样。
模型不能太精细也不能太粗糙,太精细的话面太多会卡,但是太粗糙的话,蒙皮的时候不太好蒙,面少每个点的权值比较难衡量,很容易穿破面。
将动作导成mesh的时候老是出错,不是导出来没东西就是有中文名。
13、建模初期不知道如何添加人物参考图。
建立一个平面,赋予贴图,选择显示材质即可,但有的贴图在编辑界面会变得很不清晰。
14、从一个BOX开始加线,很慢很复杂。
使用涡轮平滑修改器,但是注意使用此修改器会大大增加模型的面数,不可多用,塌陷之后有时还需要删线。
15、浏览视窗时,模型会忽然缩得过小,然后就找不到模型了。
找到模型之后调出移动控制柄,依据它找到并放大模型(或直接在透视窗口右上点选房子图标即可)
16、贴图初期不会展UV,用UVW贴图修改器,选择圆柱模型后添加UVW展开,贴图展开分界线非常不平整
对于不该存在的边界,选中以后右键,点击选定缝合,这样就可以将绿色的边界转化为内在的线,离得较远表示同一根线的UV会自动移动过来。
17、不能将人物的头、身、手等部分UV放在同一张UVW贴图中导出
先用面级别模式,选中需要展成一张UV的面,点击分离,将它们分别分离,在面级别设置ID,然后分别展开。
18、建筑UV展分和人物区别较大,