这几天在用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了,点击运行就能看到场景了,如果有遗留的话我再补充!)

学会使用Ogitor的更多相关文章

  1. [C#] C# 知识回顾 - 学会处理异常

    学会处理异常 你可以使用 try 块来对你觉得可能会出现异常的代码进行分区. 其中,与之关联的 catch 块可用于处理任何异常情况. 一个包含代码的 finally 块,无论 try 块中是否在运行 ...

  2. [C#] C# 知识回顾 - 学会使用异常

    学会使用异常 在 C# 中,程序中在运行时出现的错误,会不断在程序中进行传播,这种机制称为“异常”. 异常通常由错误的代码引发,并由能够更正错误的代码进行 catch. 异常可由 .NET 的 CLR ...

  3. 让你从零开始学会写爬虫的5个教程(Python)

    写爬虫总是非常吸引IT学习者,毕竟光听起来就很酷炫极客,我也知道很多人学完基础知识之后,第一个项目开发就是自己写一个爬虫玩玩. 其实懂了之后,写个爬虫脚本是很简单的,但是对于新手来说却并不是那么容易. ...

  4. 简简单单学会C#位运算

    一.理解位运算 要学会位运算,首先要清楚什么是位运算?程序中的所有内容在计算机内存中都是以二进制的形式储存的(即:0或1),位运算就是直接对在内存中的二进制数的每位进行运算操作 二.理解数字进制 上面 ...

  5. 中国计算机学会CCF推荐国际学术会议

    中国计算机学会推荐国际学术会议 (计算机系统与高性能计算) 一.A类 序号 会议简称 会议全称 出版社 网址 1 ASPLOS Architectural Support for Programmin ...

  6. 十五分钟学会用Hessian

    了解Hessian Hessian是远程调用的一种技术,和WebService类似,但不同的是较WebService而言,它更轻量级,更简单,更快速.关于Hessian更详细全面的介绍可以查看http ...

  7. 七天学会ASP.NET MVC(七)——创建单页应用

    系列文章 七天学会ASP.NET MVC (一)——深入理解ASP.NET MVC 七天学会ASP.NET MVC (二)——ASP.NET MVC 数据传递 七天学会ASP.NET MVC (三)— ...

  8. 七天学会ASP.NET MVC (六)——线程问题、异常处理、自定义URL

    本节又带了一些常用的,却很难理解的问题,本节从文件上传功能的实现引出了线程使用,介绍了线程饥饿的解决方法,异常处理方法,了解RouteTable自定义路径 . 系列文章 七天学会ASP.NET MVC ...

  9. 七天学会ASP.NET MVC (五)——Layout页面使用和用户角色管理

    系列文章 七天学会ASP.NET MVC (一)——深入理解ASP.NET MVC 七天学会ASP.NET MVC (二)——ASP.NET MVC 数据传递 七天学会ASP.NET MVC (三)— ...

随机推荐

  1. mysql通过binlog日志来恢复数据

    简介 在生产的过程中有这么一个业务场景:比如我在2016-11-19 09:30:00 通过mysqldump的方式备份了数据库,但是在2016-11-19 10:30:00的时候数据库崩溃了,如果通 ...

  2. Computer assembly and maintenance

    转载请注明出处: 我所遇见的世界会更美好 第一章 计算机的基本构成和组装 1,内存的组成? (1)  RAM(随机存取存储器) (2)  ROM(只读存储器) (3)  Cache(高速缓存) 2,S ...

  3. Node.js 开发模式(设计模式)

    Asynchronous code & Synchronous code As we have seen in an earlier post (here), how node does th ...

  4. jQuery 请指出'.bind()','.live()'和'.delegate()'的区别

    http://kb.cnblogs.com/page/94469/网上好多类似的 简言之bind可以绑定页面上已有的,live和delegate可以绑定到还未存在于页面中的元素之上.delegate又 ...

  5. C++中静态数据成员

    类的静态成员不能由类的构造函数来初始化.因为即使不存在类的任何对象时,类的静态成员依然存在并且可以被使用.类的静态成员也不能访问任何类的非静态成员. 类名和类对象都可以直接调用静态数据成员.因为静态数 ...

  6. hdu---(Tell me the area)(几何/三角形面积以及圆面积的一些知识)

    Tell me the area Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  7. asp.net 奇淫技巧

    VS2013自动注释插件 分享一个Visual Studio的背景插件,让堆码更富情趣 工欲善其事必先利其器系列之:更换Visual Studio代码风格. 为Visual Studio更换皮肤和背景 ...

  8. SpringMvc之handler深入AbstractControllerhe和MultiActionController和内部资源视图解析器

    AbstractControllerhe 若处理器继承自AbstractController类,那么该控制器就具有了一些新功能.因为AbstractController类还继承自一个父类WebCont ...

  9. 登陆验证前对用户名和密码加密之后传输数据---base64加密

    以下这种方法是加密传输的简单实现 1,base64.js /** * * Base64 encode / decode * * */ function Base64() { // private pr ...

  10. 【转】Nginx+php-fpm+MySQL分离部署详解

    转:http://www.linuxidc.com/Linux/2015-07/120580.htm Nginx+php-fpm+MySQL分离部署详解 [日期:2015-07-26] 来源:Linu ...