在这里先自己编写个类,继承Example(Example是一个示例的基类,已经载入了Mogre所需要的资源,我们可以用它来做一些测试用)。

接下个第一件要做的事就是给场景来点光,要不,黑漆漆的,怎么自己我们做了些什么?(虽然有些事在关灯的事候做最适宜--)。在这里,我们要用到AmbientLigh属性,称环境光,然后设定我们想要显示的光源颜色。我们在 CreateScene 的方法中添加下面的代码:

mSceneMgr.AmbientLight = new ColourValue(1, 1, 1);

添加了环境光之后,现在我们可以建立模型了,我们敲入下面的代码:

Entity ent = mSceneMgr.CreateEntity("Head", "ogrehead.mesh");

Entity是一个实体类,一般都用来做三维模型实体类。 在上面这行代码中,我们调用了CreateEntity方法来创建模型,其中第一个参数是标识名,第二个参数是模型文件。好了,现在我们已经创建了Entity对象,但单单是Entity对象,模型还是不会被显示的,我们需要创建SceneNode 让Entity去附加在上面,我们继续敲入下面这行代码:

SceneNode node = mSceneMgr.RootSceneNode.CreateChildSceneNode("HeadNode");
node.AttachObject(ent);

这时我们看到,我们是坐根节点去创建SceneNode的, 调用了CreateChildSceneNode方法,其中,参数为节点标识名。然后用节点的AttachObject使用node与ent关联上。

在深入了解Mogre之前 ,我们首先要去认清Mogre的坐标系统。mogre像其它引擎一样,使用X轴与Z轴作为水平面,以Y轴作为垂直轴。X轴以右方为正方向,Y轴以向上为正方向,而Z轴则是以使用者为正方向。如图所示:

现在我们要使上面创建的模型面向我们,应该怎么做呢?其实这是一个关系到Camera与Mesh的事了。Camera在以后的讲述中会讲到,而在建模与输出成Mesh的时候,也会影响到模型的正向,所以,在没有设定方向的时候,Entity的默认方向则为Mesh文件输出的方向。在以后的开发中,我们会经常用到Vector类的表示Entity的位置与方向。而在Moger中,有Vector2,Vector3及Vector4。而Vector3我们会用得比较多,如果用Vector类了解不深,建议去看看官方的资料,要不在以后的设计中会一头雾水,这是比较重要的。

在了解了Mogre的坐标系统后,我们再创建另外一个模型显示,敲入下面的代码,我们看看会发生什么。

Entity ent2 = mSceneMgr.CreateEntity("Head2", "ogrehead.mesh");
SceneNode node2 = mSceneMgr.RootSceneNode.CreateChildSceneNode("HeadNode2", new Vector3(100, 0, 0));
node2.AttachObject(ent2); 

好了,现在我们看到了两个一模一样的怪物头像了,而且是并排的。那么我们做了些什么呢,与上面的代码相比?第一,我们只是稍微改变了Entity与SceneNode的命名;第二,我们把第二个SceneNode的开始位置沿着X轴平移了100个单位。

Entity 类在Mogre里占居着非常重要的地位,然后我们在这里却不先深入了解它先,仅仅做个开始。但是,有些重要的方法与属性还是需要先认识一下。首先是 Entity.Visible. 我们可以设置Visible为True或否来决定Entity是否显示;不过,假如你需要设置一个隐藏一个Entity,而后面去显示出来,可以不用刻意用Visible去设置,在这里可以去摧毁它;也不用刻意去保存它的一些信息,因为Mogre会把Entity的一些信息保存在内存中,如texture 或mesh,当重新创建Entity时可以找回它的信息,而且,这是比较高效率的方法。然后Name属性是Entity的名字,也是标识,是唯一的。

SceneNode是一个非常复杂的类,而我们在这里也只会讲一些经常用到及比较重要的。我们可以使用Position去设置或获取SceneNode的位置,而这位置是相对于父级元素的。而我们也可以通过Translate去增加或减下Vectors;AttachObject,在这面我们已经看到过了,用来关联创建模型,NumAttachedObjects,与GetAttachedObject 在复杂模型中是非常有用的,面DetachObject 与DetachAllObjects则是用来删除关联或对象。Scale可以用来缩放Node的大小。

好了,下面我们试一下上面的方法及属性,看看效果,敲入下面代码。

mSceneMgr.AmbientLight = new ColourValue(1, 1, 1);
 
Entity    ent  = mSceneMgr.CreateEntity("Head", "ogrehead.mesh");
SceneNode node = mSceneMgr.RootSceneNode.CreateChildSceneNode("HeadNode");
node.AttachObject(ent);
 
node.Scale(0.5f, 1, 2);
 
Entity    ent2  = mSceneMgr.CreateEntity( "Head2", "ogrehead.mesh" );
SceneNode node2 = mSceneMgr.RootSceneNode.CreateChildSceneNode("HeadNode2", new Vector3(100, 0, 0));
node2.AttachObject(ent2);
 
node2.Scale(1, 2, 1);

与一开始我们的代码不同的是,我们只是缩放了大小,不过运行的效果是挺奇怪的,因为Entity被我们拉伸了。

最后,我们要讲的是旋转,Rotation 。

我们可以通过Yaw,Pitch和Roll方法去旋转对象,参数可以用Degree为单位或Radian。其中,Yaw是旋转Y轴,Pitch是绕C轴旋转,而Roll是绕Z轴旋转。

转载于:https://www.cnblogs.com/easonechan/archive/2011/12/04/2275998.html

MOGRE学习(三) Mogre的SceneNode及Entity相关推荐

  1. 【自然语言处理】【知识图谱】知识图谱表示学习(三):SE、SME、LFM、RESCAL、HOLE

    知识图谱表示学习(三) SE.SME.LFM.RESCAL.HOLE [自然语言处理][知识图谱]知识图谱表示学习(一):TransE.TransH.TransR.CTransR.TransD [自然 ...

  2. 统计学习三要素 模型+策略+算法

    统计学习方法都是由模型. 策略和算法构成的. 即统计学习方法由三要素构成, 可以简单地表示为:方法=模型+策略+算法 模型 统计学习首要考虑的问题是学习什么样的模型. 在监督学习过程中, 模型就是所要 ...

  3. 深度学习三巨头也成了大眼萌,这个一键转换动画电影形象的网站竟因「太火」而下线...

    机器之心报道 作者:魔王.杜伟 想不想在动画电影中拥有自己的角色?这个网站一键满足你的需求,不过竟因流量太大成本过高而下线. 近期热映的电影<花木兰>总是让人回想起 1998 年上映的同名 ...

  4. 2020届 AAAI Fellow名单新鲜出炉!!!深度学习三巨头终于齐聚

    点击上方"深度学习技术前沿",选择"星标"公众号 资源干货,第一时间送达 AAAI 是国际人工智能领域最权威的学术组织,Fellow 是该学会给予会员的最高荣誉 ...

  5. HTTP学习三:HTTPS

    HTTP学习三:HTTPS 1 HTTP安全问题 HTTP1.0/1.1在网络中是明文传输的,因此会被黑客进行攻击. 1.1 窃取数据 因为HTTP1.0/1.1是明文的,黑客很容易获得用户的重要数据 ...

  6. python爬虫正则表达式实例-python爬虫学习三:python正则表达式

    python爬虫学习三:python正则表达式 1.正则表达式基础 a.正则表达式的大致匹配过程: 1.依次拿出表达式和文本中的字符比较 2.如果每一个字符都能匹配,则匹配成功:一旦有匹配不成功的字符 ...

  7. TweenMax动画库学习(三)

    目录               TweenMax动画库学习(一)            TweenMax动画库学习(二)            TweenMax动画库学习(三)           ...

  8. 实至名归!ACM宣布深度学习三巨头共同获得图灵奖

    昨日晚间,ACM(国际计算机学会)宣布,有"深度学习三巨头"之称的Yoshua Bengio.Yann LeCun.Geoffrey Hinton共同获得了2018年的图灵奖,这是 ...

  9. 【技术综述】图像与CNN发家简史,集齐深度学习三巨头

    文章首发于微信公众号<有三AI> [技术综述]图像与CNN发家简史,集齐深度学习三巨头 没有一个经典的发现会是突然之间横空出世,它总是需要一些积淀. 提起卷积神经网络,我们总会从LeNet ...

最新文章

  1. 为Nginx制作404 403 500等错误页面
  2. html中的框架frameset和frame及iframe
  3. Spring-AOP实践 - 统计访问时间
  4. 【面试题视频讲解】求一个数的所有质因子
  5. 删除ubuntu linux系统,从Windows双启动中卸载Ubuntu Linux
  6. JSTL 标签库详细介绍资料 .
  7. 大牛书单 | 读懂5G,改变社会
  8. oracle sql 分区查询语句_oracle11g 表分区后的查询语句如何知道是否进行了全表扫描...
  9. 安装Linux系统后无法启动win,安装Win10 CentOS7双系统后无法启动Win10系统怎么办
  10. 顺序右移数组元素(内测第0届第5题)
  11. 2015年全国村级点位置矢量SHP格式数据下载
  12. AlterID.exe 报错问题
  13. 背包问题-递归思想(C语言)
  14. 如何区分网线是几类的_网线怎么区分是几类的
  15. Unity,C#版的动画曲线,Tween:EaseIn,EaseOut,EaseInOut(语法逻辑整理版本,含测试代码)
  16. 【虹科案例】嵌入式系统的实时高速记录器——虹科高速数字化仪应用
  17. 【c语言】模拟strlen函数求字符串长度的三种方法
  18. 白话解析BS模型(二)
  19. 易游商城php源码,WSTMall 开源多用户商城系统 v1.9.5
  20. 对警报线程池的警报线程_covid 19医院网络警报的警报可访问性剖析

热门文章

  1. 95-908-030-源码-FlinkTable-Table API
  2. 80-30-040-原理-React模式-简介2
  3. 【FLink】Flink 1.9 升级到 1.12.4 无配置页面 无日志
  4. 10-11-010-简介-架构-架构简介
  5. 【Flink】did not rea ct to cancelling signal for 30 seconds, but is stuck No implementation was bound
  6. 【Flink】Flink 检查点 Triggering checkpoint createBlockoutputstream no further info information
  7. Maven多模块打包遇到的问题详解
  8. 【java】java的Jaas授权与鉴权
  9. centos 6.3最小化安装,无法上网解决方法
  10. Complex类与运算符重载