接下来我要实现以下功能:
简单的鼠标拾取折纸上的顶点,边或面;当鼠标拾取这些元素时,高亮该元素
为了达到这个功能,我准备写一个名为SimplePicker的类
在描述这个类的组成之前,我要先回顾一下整个鼠标拾取事件处理的流程

我想首先借助ogre帮我定位到我的entity,接下来的事情再自己做。
这个SimplePicker应该是继承自BasicPicker类。事实上,BasicPicker类应该是所有工具的父类

BasicPicker的结构如下
公有成员:
CloverElement overedElement
CloverElement selectedElement
公有方法:
onMove()
onPress()
...
私有方法:
_hitTest()
_onFaceOvered() 虚函数,由子类实现
_onEdgeOvered() 虚函数,由子类实现
_onVertexOvered() 虚函数,由子类实现
_onFaceSelected() 虚函数,由子类实现
_onEdgeOvered() 虚函数,由子类实现
_onVertexSelected() 虚函数,由子类实现
...
其中,CloverElement类是CloverFace,CloverEdge和CloverVertex类的父类
后三个类分别是面,边和点的抽象

CloverElement的结构如下
公有成员
int tpye 用来记录该元素的类型
CloverFace,CloverEdge和CloverVertex由其他人(华亮或者徐小孟)实现
所以紧接着图一之后的逻辑应该是这样的

BasicPicker只提供最基本的功能,即选取元素。至于像高亮这样的操作,则由子类实现
整个东西最难的应该就是_hitTest()函数了,我要好好想想怎么弄
浙公网安备 33010602011771号