CSDN真恶心

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

接下来我要实现以下功能:

简单的鼠标拾取折纸上的顶点,边或面;当鼠标拾取这些元素时,高亮该元素

为了达到这个功能,我准备写一个名为SimplePicker的类

 

在描述这个类的组成之前,我要先回顾一下整个鼠标拾取事件处理的流程

我想首先借助ogre帮我定位到我的entity,接下来的事情再自己做。

 

这个SimplePicker应该是继承自BasicPicker类。事实上,BasicPicker类应该是所有工具的父类

 

BasicPicker的结构如下

公有成员:

CloverElement  overedElement

CloverElement  selectedElement

公有方法:

onMove()

onPress()

...

私有方法:

_hitTest()

_onFaceOvered()  虚函数,由子类实现

_onEdgeOvered()  虚函数,由子类实现

_onVertexOvered()  虚函数,由子类实现

_onFaceSelected()  虚函数,由子类实现

_onEdgeOvered()  虚函数,由子类实现

_onVertexSelected()  虚函数,由子类实现

...

 

其中,CloverElement类是CloverFaceCloverEdgeCloverVertex类的父类

后三个类分别是面,边和点的抽象

 

CloverElement的结构如下

公有成员

int  tpye  用来记录该元素的类型

 

CloverFaceCloverEdgeCloverVertex由其他人(华亮或者徐小孟)实现


所以紧接着图一之后的逻辑应该是这样的

BasicPicker只提供最基本的功能,即选取元素。至于像高亮这样的操作,则由子类实现

整个东西最难的应该就是_hitTest()函数了,我要好好想想怎么弄

 

posted on 2012-02-03 16:44  Kid桑  阅读(202)  评论(0)    收藏  举报