superwavelet 发表于 2015-1-9 11:33:24

如何让鼠标选中TranslateAxisDragger 的被物体遮挡的 移动杆?

如下图:现在只能用鼠标选中露出来的TranslateAxisDragger的杆子,但是被物体包在里面的部分鼠标不能选中拖动(如图中俩鼠标位置,就不能拖动移动杆)。

不知道如何使得鼠标能选中拖动被方块包含的杆?这样可以使得拖动选择范围更大,不一定选露出来的杆子部分。

zwxscu 发表于 2016-1-17 13:48:46

可以更拖拽器坐标轴的渲染顺序,保证在最前面不被遮挡,很多软件都是这么做的。

吴康祥 发表于 2017-4-18 09:16:22

射线求交,手动调用pickhandle。

SUN_OSG 发表于 2021-1-7 13:36:03

把dragger的intersectionmask设为1,把物体的nodemask设为0x4,与操作就是0,这样就ok了!

smdl 发表于 2021-5-21 11:39:29

SUN_OSG 发表于 2021-1-7 13:36
把dragger的intersectionmask设为1,把物体的nodemask设为0x4,与操作就是0,这样就ok了!

这样是可以,但是 dragger 会拖动到任何可能的node,总不能将所有node都设置某个mask值 ?还有其他方案吗?

yizhaosan 发表于 2022-6-10 08:48:17

smdl 发表于 2021-5-21 11:39
这样是可以,但是 dragger 会拖动到任何可能的node,总不能将所有node都设置某个mask值 ?还有其他方 ...

在这个位置OpenSceneGraph->src->osgManipulator->Dragger.cpp,里边有一个函数bool Dragger::handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa),
这个里边有一个求交器,求交器求交之后会有一个nodePath,默认取第一个作为点击选中的模型;可以遍历这个nodePath拿到拖拽器对应的node
页: [1]
查看完整版本: 如何让鼠标选中TranslateAxisDragger 的被物体遮挡的 移动杆?