查看: 5805|回复: 12

osg怎么实现拾取物体后高亮显示?

[复制链接]

该用户从未签到

发表于 2009-4-10 16:02:39 | 显示全部楼层 |阅读模式
想在osg中实现这样的功能:当鼠标拾取到某个物体后,物体高亮显示?
不知道怎么实现!请高手指点!给出点示例代码!

该用户从未签到

发表于 2017-2-22 11:47:05 | 显示全部楼层
VR_user_happy 发表于 2013-8-27 16:56
节点选择后挂接节点就高亮显示了(即:在父节点和子节点中间插入一个高亮节点osgFX::Scribe)
osgFX::Scri ...

这只是把三角片的三个边高亮了,那如果需要把这些三角片(边和内部都是红色)都高亮为红色怎么做?

该用户从未签到

发表于 2009-4-10 16:17:31 | 显示全部楼层
能否采用变色呢?即考虑屏蔽掉某个颜色分量? 如果是OpenGL的话 就使用
glColorMask,和OSG中具体怎么对应,你探索一下。

最好的办法是采用glMatrixMode(GL_COLOR),然后添加颜色变换。但是这个需要显卡支持ARB_imaging 扩展,至少我的显卡不支持。(这个可以看看OpenGL超级宝典图像那一章的介绍。)

如果模型比较少的话,那就建立一个Switch,拾取之后,切换一下显示节点就行了。

[ 本帖最后由 tan_dunming 于 2009-4-10 16:18 编辑 ]

该用户从未签到

发表于 2009-4-10 16:20:04 | 显示全部楼层
有很多方法,例如即时给Drawable对象设置一个全局颜色setColorArray并dirtyDisplayList;一个更好的方法是给使用osg中着色器的共享特性来实现,所有的对象都设置同一个uniform变量,对于需要高亮的对象则改变这个变量的值,而在根节点的着色器代码中根据此uniform变量的变化来执行不同的操作。

该用户从未签到

发表于 2009-4-10 16:21:48 | 显示全部楼层
tan_dunming说的两种方法应该也没问题~~在osg中就是ColorMask和ColorMatrix;
不过我个人是使用着色器实现的,感觉上比较方便

目前我还在等一些信息,等定下来或者被否决之后。会有一个针对此问题的例子出现在“你所不知的OSG:GLSL(2)”中,或者[b]更适合大家阅读的地方[/b]~~~~

该用户从未签到

发表于 2009-4-10 19:20:21 | 显示全部楼层
用笨办法就画一个四条边的框也行,表示选中状态。

该用户从未签到

 楼主| 发表于 2009-4-10 20:52:07 | 显示全部楼层

回复 2楼 的帖子

谢谢你!

该用户从未签到

 楼主| 发表于 2009-4-10 20:55:05 | 显示全部楼层

回复 3楼 的帖子

恩,试试啦,谢谢啊!

该用户从未签到

发表于 2009-4-11 20:26:57 | 显示全部楼层

该用户从未签到

发表于 2013-8-27 11:27:13 | 显示全部楼层
有例子吗  版主  谢了

该用户从未签到

发表于 2013-8-27 16:56:25 | 显示全部楼层
本帖最后由 VR_user_happy 于 2013-8-27 17:00 编辑

节点选择后挂接节点就高亮显示了(即:在父节点和子节点中间插入一个高亮节点osgFX::Scribe)
osgFX::Scribe* parentAsScribe = new osgFX::Scribe();
                 parentAsScribe->addChild(m_pickNode);
                pickNodeParent->replaceChild(m_pickNode, parentAsScribe);

取消高亮,就是把添加的高亮节点删除,重新把高亮节点下地子节点挂接到父节点上(删除这个插入的osgFX::Scribe节点)

该用户从未签到

发表于 2017-2-25 13:07:42 | 显示全部楼层
用STATESET,设置一下状态颜色:
osg::Stateset *pSet=pNode->getorCreateStateSet();
//
pMaterial为你想设置的材质,创建后可以设置任意颜色
pMaterial=new osg::Material();
pMaterial->setDefuseColor()
pMaterial->set...Color();
...

pSet->set(pMaterial)

//节点重设材质
pNode->setState(pSet);

该用户从未签到

发表于 2017-4-9 20:04:32 | 显示全部楼层
添加描边 osgFX::Scribe
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表