OGRE 3D程序设计(1)

读到这本书的这个章节的时候,相信你已经很好的了解了Ogre 3D的设计理念,以及其中各部分协同工作的方式。现在已经可以开始用Ogre API真正的写一个应用程序了。这个章节给你提供一个简单的开端,实现了一个Ogre API的外壳,这些内容也是任何Ogre应用程序所需要的基础。
    Ogre最有名的“卖点”之一,就是它所拥有的良好的适应性以及弹性。你可以根据自己希望控制的程度,选择对Ogre不同的控制强度。Ogre能很好的满足你所有不同的需要,是用Ogre就如同你有拥有了一台可以轻易切换手动档和自动档的豪华跑车一样。
    在这一章节中,我们会把所有Ogre的使用方法告诉你,从“自动档”一直到“手动档”。 不过在书中我只会把关键的代码段列出来。如果你需要这些代码的完整版本,可以到这本书的网站去 下载,那些 下载代码都是可以直接编译运行的。
    Ogre初始化:自动档
    使用Ogre的程序所需要作的第一件事情就是实例化一个Root对象。如果没有这个对象,你就无法调用(除了日志管理以外)的任何一个功能。Root类的构造函数接受一些符串对象的参数,这些字符代表着不同作用的文件名称。
    Root * root = new Root();
    Root * root = new Root(“plugins.cfg”);
    Root * root = new Root(“plugins.cfg”, “ogre.cfg”);
    Root * root = new Root(“plugins.cfg”, “ogre.cfg”, “ogre.log”);
    Root * root = new Root(“”, “”);
    上面列出了一些不同的方法来创建Root实例,这里面任何的方法都能单独的正确执行。其中倒数第二行的方法所使用的参数也是系统所默认的值(“plugins.cfg”, “ogre.cfg”, “ogre.log”——当你没有填写参数的时候,系统就认为采用了默认的这些值)。
    plugins.cfg文件
    Ogre中所谓的插件就是符合Ogre插件接口的代码模块(在 Windows下面是DLL文件,在Linux下是。so文件),比如场景管理(SceneManager)插件和渲染系统(RenderSystem)插件等。在启动的Ogre时候,他会载入plugins.cfg配置文件来查看有哪些插件可以被使用。代码4-1展示了配置文件的内容。
    代码4-1:上面是在Ogre源代码和发行版中提供的“plugins.cfg”文件的内容
    # Defines plugins to load
    # Define plugin folder
    PluginFolder=.
    # Define plugins
    Plugin=RenderSystem_Direct3D9
    Plugin=RenderSystem_GL
    Plugin=Plugin_ParticleFX
    Plugin=Plugin_BSPSceneManager
    Plugin=Plugin_OctreeSceneManager
    Plugin=Plugin_CgProgramManager
    代码4-1列出了Ogre演示程序中所使用的plugins.cfg文件内容。你可以通过改变这个文件的内容来达到配置自己程序中使用的插件的目的。当然,没必要非得是用 “plugins.cfg”作为文件名;可以根据自己的喜欢随意取名,然后在构建Root实例的时候作为参数传递给系统就好了。当没有配置这个参数的时候程序就会采用默认的“plugins.cfg”文件来配置插件。如果你用了一个空的字符串来作为文件名(在之前的构建Root的例子中有这种使用方法),Root实例就不会载入任何文件来索引插件,这时候你就需要自己手动的方式来配置插件了(在后面的章节“Ogre初始化:手动档”中会介绍具体的方法)。
    在上面的提供的配置文件中:PluginFolder标签的值告诉了Ogre到哪个目录下找下面所使用得的插件。如何配置这个值完全取决于你的需要:你可以配置绝对路径或者相对路径(也就是不用“\”或“/”作为开始的路径)。在使用相对路径的时候,系统会以当前目录作为参照目录(一般情况下是程序的执行目录,不过在 Windows调试的时候可能是在。vcproj文件所在的目录)。在演示程序中配置了在当前目录(“。”)中寻找插件。值得注意的是,不论你是否设置了这个值,Ogre程序都会在搜索路径后面自动加上“\”或“/”字符(取决于不同的平台)。这就是说如果你把空白字符(””)作为设置的值的时候,系统就会在“\”或“/”目录下来搜索插件(代表着:在Windows下面搜索当前驱动器的根目录,在Linux下搜索root目录)。如果你没有填写这项声明(或者使用#字符注释掉这一行),Ogre就当作你输入了空白字符。一般情况下Ogre所有的插件载入行为都会以这个路径作为标准,但有一种例外情况,就是在Mac的OS X系统上,这一项设置因为系统的关系而被忽略,取而代之的是在OS X自己提供的Resources/目录中搜索插件。
    在配置文件的剩余部分,列出了提供给Ogre载入的具体插件。值得注意的是,你会发现文件名称中并不包含扩展名;不要以为这是疏忽,Ogre开发者通过这种手段来兼容各种平台上扩展名的差异(比如。dll和。so等等)。
    警告:可能你也注意到了在“=”的两边并没有写入空位符号(比如空格或者Tab),因为在这里如果填入空位的话就会被系统认为是语法错误,导致无法载入插件。
    在所列出的插件中,最上面两行列出了两种不同的渲染系统以供选择;在后面的分别是特效系统和场景管理插件等等。在你自己的程序中,虽然没必要载入所有插件,但至少要包含一个渲染系统插件系统才能正常工作。但是如果真的光使用渲染系统插件也不是一个很好的决定,因为这样只能实现一个简单的场景(极其简陋!)。所以至少还要加上一个场景管理(例如OctreeSceneManager)的才能算真正的开始。
    Ogre.cfg文件
    在启动Ogre的时候,引擎提供了一个简单的图形界面,可以通过它来配置基本的渲染属性。如图4-1.


    图4-1:Ogre在Windows32系统下面的启动配置画面
    看到了上面的图片,可能你会兴奋得说:“真棒!Ogre免费的送了我一个配置窗口!”不过不要高兴得太早了,提醒你上面的是Ogre的配置窗口,换句话说它也只是Ogre的配置窗口而已,没有提供输入系统或者音频系统等等的配置选项(似乎除了改变上面那个兽头的Logo之外你什么也改变不了)。除非你决定程序中只采用Ogre来实现。否则你就一定需要定制自己的配置菜单和相应的模块。在后面的段落中会提供一些相关实现的细节。
    不过,在这里我们还是要学会如何启动显示这个简单的窗口,用来配置Ogre。
    Root * root = new Root();
    bool rtn = root->showConfigDialog();
    上面列出了所有需要的代码。其中showConfigDialog()返回一个布尔值,可以用来确定用户是点击了“OK(确定)”还是“Cancel(取消)”:true代表“OK”,false代表“Cancel”。如果你的用户选择了“Cancel”按键,就意味着应该结束你的程序运行了。使用了Ogre的配置对话框,用户就可以根据自己的需要来设置具体的渲染系统参数了。
    你可能会奇怪我们上面所说的对话框和Ogre.cfg文件有什么关系呢?事实上,在大多数情况下Ogre.cfg文件是当用户设置完渲染系统之后自动产生,虽然你手动填写这个文件也没什么问题,不过似乎没有这个必要。在后面你会看到当我们通过手动来配置Ogre初始化的时候,并不需要这个文件。不过现在还是让我们先来看看这个文件里面的内容吧(代码4-2)。
    代码4-2:Ogre.cfg文件的内容
    Render System=Direct3D9 Rendering Subsystem
    [Direct3D9 Rendering Subsystem]
    Allow NVPerfHUD=No
    Anti aliasing=None
    Floating-point mode=Fastest
    Full Screen=No
    Rendering Device=NVIDIA GeForce Go 7300
    VSync=No
    Video Mode=800 x 600 @ 32-bit colour
    [OpenGL Rendering Subsystem]
    Colour Depth=32
    Display Frequency=60
    FSAA=0
    Full Screen=Yes
    RTT Preferred Mode=FBO
    VSync=No
    Video Mode=1024 x 768
    你会发现上面所列出来的条目和对话框中设置选项中的条目是对应的。如果你真的决定使用Ogre.cfg来配置你的程序,当需要改变这个文件内容的时候,你最好调出Ogre配置窗口来重新生成。这个文件虽然看起来很容易被手动修改,但是也很容易导致程序无法识别。因为它虽然看起来似乎直观且可读,但事实上它仍是用于机器识别的脚本语言。

注:转载源地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值