MOGRE学习(三) Mogre的SceneNode及Entity
在这里先自己编写个类,继承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去附加在上面,我们继续敲入下面这行代码:
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的坐标系统后,我们再创建另外一个模型显示,敲入下面的代码,我们看看会发生什么。
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的大小。
好了,下面我们试一下上面的方法及属性,看看效果,敲入下面代码。
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相关推荐
- 【自然语言处理】【知识图谱】知识图谱表示学习(三):SE、SME、LFM、RESCAL、HOLE
知识图谱表示学习(三) SE.SME.LFM.RESCAL.HOLE [自然语言处理][知识图谱]知识图谱表示学习(一):TransE.TransH.TransR.CTransR.TransD [自然 ...
- 统计学习三要素 模型+策略+算法
统计学习方法都是由模型. 策略和算法构成的. 即统计学习方法由三要素构成, 可以简单地表示为:方法=模型+策略+算法 模型 统计学习首要考虑的问题是学习什么样的模型. 在监督学习过程中, 模型就是所要 ...
- 深度学习三巨头也成了大眼萌,这个一键转换动画电影形象的网站竟因「太火」而下线...
机器之心报道 作者:魔王.杜伟 想不想在动画电影中拥有自己的角色?这个网站一键满足你的需求,不过竟因流量太大成本过高而下线. 近期热映的电影<花木兰>总是让人回想起 1998 年上映的同名 ...
- 2020届 AAAI Fellow名单新鲜出炉!!!深度学习三巨头终于齐聚
点击上方"深度学习技术前沿",选择"星标"公众号 资源干货,第一时间送达 AAAI 是国际人工智能领域最权威的学术组织,Fellow 是该学会给予会员的最高荣誉 ...
- HTTP学习三:HTTPS
HTTP学习三:HTTPS 1 HTTP安全问题 HTTP1.0/1.1在网络中是明文传输的,因此会被黑客进行攻击. 1.1 窃取数据 因为HTTP1.0/1.1是明文的,黑客很容易获得用户的重要数据 ...
- python爬虫正则表达式实例-python爬虫学习三:python正则表达式
python爬虫学习三:python正则表达式 1.正则表达式基础 a.正则表达式的大致匹配过程: 1.依次拿出表达式和文本中的字符比较 2.如果每一个字符都能匹配,则匹配成功:一旦有匹配不成功的字符 ...
- TweenMax动画库学习(三)
目录 TweenMax动画库学习(一) TweenMax动画库学习(二) TweenMax动画库学习(三) ...
- 实至名归!ACM宣布深度学习三巨头共同获得图灵奖
昨日晚间,ACM(国际计算机学会)宣布,有"深度学习三巨头"之称的Yoshua Bengio.Yann LeCun.Geoffrey Hinton共同获得了2018年的图灵奖,这是 ...
- 【技术综述】图像与CNN发家简史,集齐深度学习三巨头
文章首发于微信公众号<有三AI> [技术综述]图像与CNN发家简史,集齐深度学习三巨头 没有一个经典的发现会是突然之间横空出世,它总是需要一些积淀. 提起卷积神经网络,我们总会从LeNet ...
最新文章
- 为Nginx制作404 403 500等错误页面
- html中的框架frameset和frame及iframe
- Spring-AOP实践 - 统计访问时间
- 【面试题视频讲解】求一个数的所有质因子
- 删除ubuntu linux系统,从Windows双启动中卸载Ubuntu Linux
- JSTL 标签库详细介绍资料 .
- 大牛书单 | 读懂5G,改变社会
- oracle sql 分区查询语句_oracle11g 表分区后的查询语句如何知道是否进行了全表扫描...
- 安装Linux系统后无法启动win,安装Win10 CentOS7双系统后无法启动Win10系统怎么办
- 顺序右移数组元素(内测第0届第5题)
- 2015年全国村级点位置矢量SHP格式数据下载
- AlterID.exe 报错问题
- 背包问题-递归思想(C语言)
- 如何区分网线是几类的_网线怎么区分是几类的
- Unity,C#版的动画曲线,Tween:EaseIn,EaseOut,EaseInOut(语法逻辑整理版本,含测试代码)
- 【虹科案例】嵌入式系统的实时高速记录器——虹科高速数字化仪应用
- 【c语言】模拟strlen函数求字符串长度的三种方法
- 白话解析BS模型(二)
- 易游商城php源码,WSTMall 开源多用户商城系统 v1.9.5
- 对警报线程池的警报线程_covid 19医院网络警报的警报可访问性剖析
热门文章
- 95-908-030-源码-FlinkTable-Table API
- 80-30-040-原理-React模式-简介2
- 【FLink】Flink 1.9 升级到 1.12.4 无配置页面 无日志
- 10-11-010-简介-架构-架构简介
- 【Flink】did not rea ct to cancelling signal for 30 seconds, but is stuck No implementation was bound
- 【Flink】Flink 检查点 Triggering checkpoint createBlockoutputstream no further info information
- Maven多模块打包遇到的问题详解
- 【java】java的Jaas授权与鉴权
- centos 6.3最小化安装,无法上网解决方法
- Complex类与运算符重载