Mogre是Ogre在C#环境下的语言。这里记录一下Mogre的基本概念(不全,是我使用中遇到的,可能语言描述不够严谨)。很多概念与Ogre是一样的,因此也可以用于Ogre。
一、SceneManager
它是显示控制器,管理所有屏幕上显示的对象。具体来说,它保存了所有对象的track(追踪)。
二、Entity
它是Mogre世界中的基本对象。所有可视对象都是Entity。它只包含对象的本身属性,而不包含方位信息。
三、SceneNode
它包含着Entity的方位信息。具体有以下几点需要注意:
1、通过AttachObject进行绑定:
SceneNode node;
Entity entity;
node.AttachObject(entity);
2、不同的Entity可以使用同一个SceneNode的信息。
3、SceneNode的位置信息是相对于其父节点而言的。
四、Camera
用来观察创建的对象。使用方法与组织方式类似于SceneNode,可将其视为特殊的Node。同样需要设置Position属性来确定方位。
使用camera.Near(Far)ClipDistance设定裁剪范围。
可以有多个Camera对象。必须告诉窗体使用哪个Camera对象。必须有ViewPort对象。示例如下:
ViewPort vp = this.RenderWindow.AddViewPort(camera);
五、Listener
添加Frame事件响应。用Listener作为事件响应的优点是实时性较高。具体使用方式如下:
root.FrameStarted += new FrameListener.FrameStarted(hander);
此函数可放在创建场景的函数中。
六、键盘、鼠标响应
Mogre使用MOIS库进行键盘与鼠标的控制。需要注意以下两点:
1、需要添加Timer才能使监听生效。
2、注意使用缓冲区(使用缓冲区,才能改变鼠标键盘的状态)。
七、画基本几何体
使用ManualObject类。
ManualObject mo = smgr.CreateManualObject("mobj");
mo.Begin("Core/NodeMaterial", RenderOperation.OperationTypes.OT_POINT_LIST);
mo.Position(new Vector3(0, 0, 0));
mo.Position(new Vector3(1, 1, 1));
mo.End();
其中Begin函数的第一个参数是materialName,不能随便写。
由于ManualObject也属于Entity,因此也需要绑定到SceneNode上。
八、光线探测
在进行场景查询时,例如实现鼠标选择的功能时,MOgre内设了一套光线探测的方法。通过getCameraToViewPortRay()建立一条射线。
场景查询返回的是MovableObj或者WorldFragment(二者之一)。worldFragment结构包含射线击中目标的位置。
待续