osgGA.TrackballManipulator是OpenSceneGraph的一个控制器,它提供了允许用户在3D场景中旋转、缩放和平移视图的交互式操作。
osgGA::TrackballManipulator::TrackballManipulator(int flags = DEFAULT_SETTINGS);
构造函数可以传入一个标志参数,表示该控制器的默认设置。
主要标志位:
virtual bool handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& us);
响应与控制器相关的GUI事件。例如,当用户按下鼠标左键并拖动时,要旋转场景视图。
virtual bool handleFrame(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& us);
帧更新循环。此函数更新响应计时器和手柄状态,并使任何操作可见,例如缩放视图。
virtual void setByMatrix(const osg::Matrixd& matrix);
将TrackballManipulator的内部状态设置为给定矩阵,该矩阵将应用于场景,以使该场景的视图处于给定状态。例如从保存的场景快照。
virtual void setNode(osg::Node* node);
设置当前场景中正在使用的节点。该节点用于确定场景的范围,从而使TrackballManipulator适合场景。
virtual osg::Node* getNode();
获取当前正在使用的节点。该节点用于确定场景的范围,从而使TrackballManipulator适合场景。
void setWheelZoomFactor(double wheelZoomFactor);
设置鼠标滚轮缩放的速度系数(默认值为1.0)。
void setHomePosition(const osg::Vec3d& eye, const osg::Vec3d& center, const osg::Vec3d& up, bool autoComputeHomePosition = false);
设置相机的起始位置,将“在家”的位置定义为当前相机位置。参数autoComputeHomePosition
表示是否在切换方向时重新计算相机‘home’位置(默认为禁用)。
virtual void computeHomePosition(const osg::Camera *camera = nullptr, bool useBoundingBox = false);
计算相机的起始位置和方向(称为“在家”位置),在整个场景中找到相机位置,并将其定位到相机以看到整个场景。
void setMinimumDistance(double minimumDistance);
设置视图的最小距离。不能缩放得比这更近。
double getMinimumDistance() const;
获取视图的最小距离。不能缩放得比这更近。
void setMaximumDistance(double maximumDistance);
设置视图的最大距离。不能缩放得比这更远。
double getMaximumDistance() const;
获取视图的最大距离。不能缩放得比这更远。
void setTransformation(const osg::Vec3d& eye,const osg::Quat& rotation);
设置场景的转换,将相机的位置设置为eye
, 相机的方向设置为rotation
。
void reset();
重置TrackballManipulator控制器的状态为默认状态。
void addMouseEventCallback(int eventType, OSGGAEventCallback* eventCallback);
向控制器添加回调函数。该回调函数的eventType可以指定为以下事件之一:
void removeMouseEventCallback(int eventType, OSGGAEventCallback* eventCallback);
从控制器中删除指定的回调函数。