Osg行星轨道鼠标获取事件

这篇博客介绍了如何在Osg中通过鼠标点击事件来实现行星轨道的显示与隐藏功能。当用户点击星球时,对应的行星轨道将显示,再次点击其他星球则切换到相应轨道,点击空白区域则隐藏所有轨道。文章重点展示了实现这一交互的核心代码。
摘要由CSDN通过智能技术生成

要求:

  1. 星球轨道默认隐藏,鼠标点击某星球,显示该星球轨道;
  2. 点击空白处隐藏所有轨道;
  3. 点击其他星球隐藏当前轨道,显示新选中星球轨道。

实际效果:

在这里插入图片描述

核心代码:

//对象选取事件处理器
void CPickHander::pick(osg::ref_ptr<osgViewer::View> view, float x, float y)
{
   
	osg::ref_ptr<osg::Node> rpNode = new osg::Node();
	osg::ref_ptr<osg::Group> rpGroupParent = new osg::Group();

	//创建一个线段相交检测的集合
	/*交集怎么得到的呢?可以看作是过屏幕上鼠标一点,垂直于屏幕的一条直线,穿过多少节点,集合里就会有多少元素;
	  点击一个球的时候,由于穿过球会和球有两个交点,所有会重复两次,当把多个球的球心放在一条直线时,直线穿过球心,那么所穿过的球,都会重复两次
	  因此,集合的第一个元素一定是你所点击的节点
	*/
	osgUtil::LineSegmentIntersector::Intersections intersections;

	//计算屏幕和场景相交的结果,存入intersectioins中
	if (view->computeIntersections(x, y, intersections))
	{
   
		osgUtil::LineSegmentIntersector::
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值