|
本帖最后由 hzxfrank2010 于 2016-4-28 10:39 编辑
现在有一个问题想请教一下论坛的大神,在我自己写的一个Handler中,在FRAME事件中我修改了场景中的某个MatrixTransform的矩阵,之后在Handler的键盘事件处理中我修改了FRAME事件中矩阵的值,并对该MatrixTransform下的某个节点进行求交,为什么得到的求交结果不会改变?
(这个处理方式的原因是:用户希望移动场景的时候【鼠标不会移动】,提供橡皮筋效果的绘线)
- bool handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIActionAdapter& aa)
- {
- switch(ea.getEventType())
- {
- case (osgGA::GUIEventAdapter::FRAME):
- {
- osgViewer::View* view = dynamic_cast<osgViewer::View*>(&aa);
- osg::MatrixTransform* pTrans=dynamic_cast<osg::MatrixTransform*>(view->getSceneData()->asGroup()->getChild(0));
- //修改MatrixTransform
- pTrans->postMult(osg::Matrix::translate(_fValue,0,0));
- pTrans->postMult(osg::Matrix::translate(0.0,0.0,_rValue));
- _fValue=0.0;
- return false;
- }
- case(osgGA::GUIEventAdapter::KEYDOWN):
- {
- if(ea.getKey()=='s')
- {
- //修改Frame中MatrixTransform的值
- _fValue=10;
- if (view)
- {
- //求交,这里求交打出的结果都是一样的,但是场景在按下键盘的时候确实在移动?
- osg::Vec3d point=pick(view,ea);
- }
- i++;
- }
- return false;
- }
- default:
- return false;
- }
- }
复制代码 |
|