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 中文译者:机器之心