zoukankan      html  css  js  c++  java
  • 学会使用Ogitor

    这几天在用Ogre读取Ogitor的场景,遇到了不少问题,在网上也找不到详细的说明,虽然读取Ogitor的场景对很多人来说太简单了,但对一些新手来说就有点难了,我刚开始就觉得是无从下手,因此简单的描述下读取过程和一些常见问题,希望对一些新手有所帮助,高手就可以跳过了O(∩_∩)O~

    我简单的分为2大步:

    1.     学会简单的使用Ogitor,新建自己的场景,然后导出为scene场景文件

    Ogitor的简单操作我就不再详述了,直接引用网上的:

    一、基本控制
    1.场景中的坐标:x轴z轴表示左右,Y表示上下
    2.QWEASD:摄像机方向、行走控制(在“Fly”与“Walk”模式下,作用略有不同)
    3.鼠标中键+移动:晃动摄像机镜头
    4.鼠标右键+移动:旋转摄像机镜头
    5.Alt+Mouse Wheel:靠近或远离选中对象
    6.Alt+鼠标右键+移动:摄像机围绕选中物体旋转
    7.将摄像机放置到Scene Tree中选中的对象前:双击Scene Tree中的对象名字或按“F”键(只有场景在“Fly”模式下才有效)
    8.增加摄像机移动速度:场景工具条中的“Speed+”(图标为带加号的摄像机)
    9.减慢摄像机移动速度:场景工具条中的“Speed-”(图标为带减号的摄像机)

    10.鼠标左键+移动:选中多个模型
    11.选中多个模型:按住Shift键,依次点击需要选中的模型
    12.从多个选择中去掉某个模型:按住Ctrl,依次点击不需要的模型——与Shift多选功能相反
    13.复制模型:Shift+移动某个模型
    14.移动模型使其贴到其他模型或地表上方:Ctrl+移动模型(不怎么灵敏,比手动好一点)
    15.End键:高亮操作模型(移动,旋转,放缩)控件的一个轴

    2.新建一个场景

    1.打开新建一个场景的对话框(Project Settings),如下图:选择Project的存放位置,输入Project的名字。在Assets选项页中,单击鼠标右键,选择模型的Mesh及Material、贴图的存放位置(自己的模型等资源在这里添加,也可以项目建好后再重新设置)

    2.新建好之后,可以在编辑器中看到一个空的场景,这时我们可以向场景中添加基本的对象——地形,天空,水体等等,编辑器都有提供,在Objects面板中,直接将所需对象拖入到场景中即可。

    Terrain Group:地形组,拖动场景中(此时场景中并没生成地形,只是提供了地形的一个组,Ogitor中地形的最好单位是Page,Terrain Group由许多的Page构成)

    Caelum:天空盒

    Hydrax:水体

    将对象拖入到场景中后,可以在Scene tree中看到各对象的名字,点击对象,可以在属性面板编辑他们的属性。


    3.添加地形Page
    在Scene面板树中,右击Terrain Group,选中Add Page。弹出对话框,选中page的位置和基本的地表纹理设定,确定之后就可以在Scene面板树中看到刚才添加的page,在场景中也可以看到基本的地形了


    Page位置:Page的名字坐标与在场景中的位置如下图



    每增加一个Page,在工程文件夹下的terrain文件夹下会增加两个文件,一个.ogt文件,一个.tga文件。一个Page对应这两个文件。Page的坐标名与这两个名的对应关系如下:
    Page_0000ffff.ogt是由Page0x-1生成的。一个.ogt文件的前4个字符(这里是0000)对应page名字的第一个坐标(这里是0);ogt文件的后四个字符(这里是ffff)对应page名字的第二个坐标(这里是-1).
    0  0000
    1  0001
    正数如上,依次类推
    -1  ffff
    -2  fffe
    其他负数,收集中

    3.编辑地形
    Shift+地形升高:降低地形
    地形编辑工具可以调整笔刷的样式,大小,强度等

    Splat:地表贴图
    Shift+地表贴图:擦掉这种地表贴图

    一个Page最多支持6种不同的地表贴图,当发现地表贴图不能刷到地形上时,有两种情况:
    1.这个Page的地形贴图也达到6种(可以在这个Page的属性property中看到Layers是否已达到6)
    2.笔刷纹理已在当前刷的地方,只是上面覆盖了另一层不同的纹理(如一个page的同一个地方上有Layer0纹理A,Layer1纹理B,如果此时笔刷上的纹理为A,用A来刷这个地方,则没反应,此时正确的做法是:将笔刷上的纹理调整为B,按住Shift键,擦除纹理B,使纹理A露出来)

    Paint:(ColorMap)
    使用颜色纹理,此功能默认不启用,如要启用可以在Terrain Group的属性中勾选Colour Map

    Splat Grass:在地表添加草(暂时不要在场景中使用此功能)

    2.     Ogre读取导出的scene场景文件

    导出的场景文件:

    2.1把Ogitor自带的例子代码拷到自己的工程里

    目录关系自己定(附加包含目录里添加例子文件的头文件,也可以不加,只要例子cpp文件能找到相应的头文件就行了,附加依赖项加上OgreTerrain_d.lib(根据实际情况来),然后就开始编译代码,编译过程中可能会找不到XX头文件,自己相应的添加就可以了,res文件夹也要拷的。

    BaseApplication.cpp文件的bool BaseApplication::setup(void)方法下有个读取插件配置的改成这样mRoot = new Ogre::Root("plugins.cfg")  (如果直接把bin下那个文件改成和他一样也可以,那就不用改这里了)

    2.2把导出的相应文件放到自己的资源路径下,并在resources.cfg添加相应的路径(注意:要加到[General]下,不然读出的地形看不到)

    2.3Ogitor的bin目录下有个SampleAppConfig.xml,拷到你的exe生成目录下,<SampleApp projectDir="Media/scene/prj1" scene="mscene.scene"/>改成你自己相应的

    (到这里就应该可以编译出你的EXE了,点击运行就能看到场景了,如果有遗留的话我再补充!)

  • 相关阅读:
    c# where(泛型类型约束)
    jQuery自定义插件
    jQuery插件定义
    SQL中merge into用法
    .net framework 4.5安装失败
    jQuery操作Form表单元素
    在WebAPI使用Session
    大数据量数据库设计与优化方案(SQL优化)
    修改NUGET包默认存放位置
    C#知识体系(一) 常用的LInq 与lambda表达式
  • 原文地址:https://www.cnblogs.com/hnfxs/p/3187231.html
Copyright © 2011-2022 走看看