osgGA.StandardManipulator是OpenSceneGraph(OSG)中预先定义的一种交互式CameraManipulator。它是osgGA.CameraManipulator的子类,用于控制场景中的虚拟摄像机。操作(例如平移、缩放、旋转)是通过鼠标和键盘事件来触发的,而摄像机的位置和姿态则随着操作而发生变化。
osgGA.StandardManipulator可以通过以下操作来控制虚拟摄像机的位置和姿态:
w键:向前移动(向上方向)
a键:向左移动(向负的x方向)
s键:向后移动(向下方向)
d键:向右移动(向正的x方向)
e键:向上移动(向正的y方向)
q键:向下移动(向负的y方向)
+或=键:放大(向视点方向)
-键:缩小(远离视点)
方向键↑:向上旋转
方向键↓:向下旋转
方向键←:向左旋转
方向键→:向右旋转
以下示例展示了如何创建和使用osgGA.StandardManipulator。假设我们有一个osgViewer.Viewer对象viewer和需要操作的osg::Group对象root,则可以使用以下代码将VirtualSphereManipulator附加到Viewer中:
#include <osgGA/StandardManipulator>
//...
// 创建StandardManipulator并将它附加到Viewer中
osg::ref_ptr<osgGA::StandardManipulator> manipulator = new osgGA::StandardManipulator();
manipulator->setNode(root);
viewer->setCameraManipulator(manipulator.get());
//...
现在,使用鼠标和键盘来移动、缩放和旋转场景时,将使用osgGA.StandardManipulator的操作。
osgGA.StandardManipulator继承自osgGA.OrbitManipulator,并且可以通过以下方法进一步自定义它的行为:
setAutoComputeHomePosition(bool):是否自动计算初始位置setHomePosition(osg::Vec3d, osg::Vec3d, osg::Vec3d, bool):设置初始位置和姿态setMinimumDistance(double):设置摄像机和目标之间的最小距离setMaximumDistance(double):设置摄像机和目标之间的最大距离setMinimumVerticalAngle(double):设置摄像机轨道的最小垂直角度setMaximumVerticalAngle(double):设置摄像机轨道的最大垂直角度setMinimumHorizontalAngle(double):设置摄像机轨道的最小水平角度setMaximumHorizontalAngle(double):设置摄像机轨道的最大水平角度setWheelZoomFactor(double):设置滚轮缩放因子除了这些方法之外,osgGA.StandardManipulator还提供以下允许改变状态的方法:
setTransformation(const osg::Vec3d&, const osg::Quat&):设置虚拟摄像机的位置和姿态setNode(osg::Node*):设置摄像机视点的目标节点如果同时要使用osgGA.StandardManipulator和osgViewer::StatsHandler,则无法通过按下F3键切换性能统计信息的可见性。
原作者:Robert Osfield 中文译者:机器之心