教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 基础教育 >

OSG的Dragger系统架构与算法分析090413(2)

来源:网络收集 时间:2026-03-16
导读: bool LineProjector::project(const PointerInfo projectedPoint) const { if (!_line->valid()) { osg::notify(osg::WARN) objectLine = new osg::LineSegment; objectLine->mult(*_line, getLocalToWorld()); //

bool LineProjector::project(const PointerInfo& pi, osg::Vec3& projectedPoint) const { if (!_line->valid()) { osg::notify(osg::WARN) << \failed.\ return false; } // Transform the line to world/object coordinate space. //由成员line及设置好的LocalToWorld矩阵获得其在世界坐标系下的对应objectLine osg::ref_ptr objectLine = new osg::LineSegment; objectLine->mult(*_line, getLocalToWorld()); // Get the near and far points for the mouse point. //获得鼠标的远近点,这下我们就知道PointerInfo中为什么要记录这个信息了 osg::Vec3 nearPoint, farPoint; pi.getNearFarPoints(nearPoint,farPoint); osg::ref_ptr pointerLine = new osg::LineSegment(nearPoint,farPoint);//又新建一条线段pointerLine,从鼠标近点指向远点 //求得objectLine上距离pointerLine最近的点closestPtLine,注意,因为是线段,所//以有最近点;若两线段平行,返回false osg::Vec3 closestPtLine, closestPtProjWorkingLine; if (! computeClosestPoints(*objectLine, *pointerLine, closestPtLine, closestPtProjWorkingLine))//这个函数的具体算法这里就不细说了,有兴趣的可以自己推一下,或者Google之 return false; //由于求得的是世界坐标系下的坐标,通过WorldToLocal矩阵反算出局部坐标系下//的最近点 osg::Vec3 localClosestPtLine = closestPtLine * getWorldToLocal(); //所以说,传出参数projectedPoint是鼠标点到的LineSegment上最近的点 projectedPoint = localClosestPtLine; return true; } 我们进一步通过图示来解释:

Dragger架构与作用论述

SelectionPointerInfoDraggerTranslate1DDraggerCompositeDraggerTranslate2DDraggerScale2DDraggerTabPlaneTrackballDraggerTabPlaneTrackballDraggerTabPlaneDraggerRotateSphereDraggerRotateCylinderDraggerScale1DDraggerTranslatePlaneDraggerTabBoxDraggerScaleAxisDraggerTrackballDraggerTranslateAxisDragger

Dragger类的设计看上去倒是很简单了,主要是两种,一种是直接继承自Dragger的子类,这种子类通过自己的handle函数接口直接处理了鼠标外设消息,算出空间的位移转换信息,并且调动了Command系统和Projector系统来运算最后反作用于自身的空间坐标体系也就是Selection类的recive各种Command消息。另外一种是CompisiteDragger,这是Dragger的聚合,我们知道上面一种Dragger自身具体处理了鼠标消息对其的操作,如果把上面各个单独的Dragger合在一起成为一个合成的Dragger多方便呢。本来有个一位的位移Dragger,那么复制3个这种类型的Dragger聚合到一起不就是一个可以处理3维的Dragger了吗。

OSG的Dragger系统架构与算法分析090413(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/566327.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)