OGRESE1 ObjectEditHandler

来源:互联网 发布:淘宝客服年度总结 编辑:程序博客网 时间:2024/06/04 18:57

0.      新建立一个场景

1.      InitializeScene

a)      OgreSE::Scene::InitializeScene()申请内存,创建新的地形

b)      BuildTree建立界面左边的树形结构

c)      实例化 ObjectEditHandler对象 m_pObjectEditHandler

d)      ….

2.      主要顺着ObjectEditHandler对象的主线进行。

a)        Tree结构中选择到mesh文件的时候,当放到地形上面时候,那么就会首先调用

Void CResourceDataTree::OnLButtonUp函数,这里面会执行AddObject创建一个实体对象。然后进入自由编辑模式。

b)        之后,会调用CSceneDataBar::OnAfterTreeItemSelected函数,会调用CSceneDoc::SetObjectSelected函数,这个函数调用CObjectEditHandler::SetObjectSelected设置物体被选择这里将被选择的实体对象插入到m_SelObjects中去,设置挂接移动和缩放指示器的节点/挂接旋转指示器的节点的属性,,然后高亮(显示外接框)显示这个实体对象。

c)        之后,处理鼠标移动的消息,ProcessMouse(CPoint point,float timeSinceLastFrame);

首先获得鼠标指向的地形的坐标点,然后实时地更新。然后调用m_pObjectEditHandler->Process(result.second,timeSinceLastFrame,point,result.first);

具体的参数: 1.pos:鼠标与地形的相交坐标,point:鼠标的位置,result.first鼠标是否能够碰撞到地面。

i)        在框选模式下,生成款选的矩形。返回

j)        在自由位移模式,如果没有和地形相交则返回,否则,

没有按下CTRL,贴地移动物体,实体存在m_SelObjects中,需要遍历,同时直接移动指示器到pos中去。

        之后的功能再续

 

有以下疑问: m_pNode也就是关接指示器的节点在什么时候绑定到了根节点上的,实体对象在什么时候挂接到root上的?

:  M_pNode CObjectEditHandler::SetObjectSelected中,被绑定到根节点,

M_pOwner->m_pSceneManager->getRootSceneNode()->addChild(m_pNode);

 实体对象绑定的时机:voidCSceneDoc::AddObject中,调用 CreateStaticEntity函数,有调用,SceneStaticEnity的构造函数,之后调用,pSceneMgr->createEntity(); attachObjectpEntity;

原创粉丝点击