这几天在用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. python 练习 17

    #!/usr/bin/python # -*- coding: UTF-8 -*- f1 = 1 f2 = 1 for i in range(1,21): print '%12d %12d' % (f ...

  2. XPath的语法

    XPath 是XML的查询语言,和SQL的角色很类似.以下面XML为例,介绍XPath 的语法. <?xml version="1.0" encoding="ISO ...

  3. 为什么要使用SLF4J而不是Log4J

      每一个Java程序员都知道日志对于任何一个Java应用程序,尤其是服务端程序是至关重要的,而很多程序员也已经熟悉各种不同的日志库如java.util.logging.Apache log4j.lo ...

  4. C类型

    类型 32位 64位 char 1 1 short 2 2 int 4 4 long 4 8 指针  4    8 float 4 4 double        8 8 long 8 8 常用的基本 ...

  5. python中列表的操作

    list1 = ['A' , 'B' , 'C'] list1[0] ; list1[-1] # 取第一个和最后一个元素 list1[ : ] ; list1[ : len(list1)] # 取所有 ...

  6. C++编程中const和#define的区别

    (1) 编译器处理方式不同 define宏是在预处理阶段展开. const常量是编译运行阶段使用.(2) 类型和安全检查不同 define宏没有类型,不做任何类型检查,仅仅是展开. const常量有具 ...

  7. MVC 特殊字符的显示

    @(new HtmlString(HttpUtility.HtmlDecode(GPDetail.SimpleDescription)))

  8. Card Collector(HDU 4336)

    Card Collector Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  9. win7_oracle11g_64位连接32位PLSQL_Developer

      工具/原料 已经装好的64位Oracle数据库 window7_64位的操作系统 PLSQL_Developer 9.0以上版本(目前只有32位的):下面有下载连接! 官方的 instantcli ...

  10. JDE开发端安装笔记

    JDE版本:JD Edwards EnterpriseOne 9.1.4 for Microsoft 64bit Oracle客户端:Oracle Database 11g Release 2 Cli ...