osgGA.DriveManipulator是OpenSceneGraph中一个用于驾驶/飞行的相机操作器。它支持使用键盘、鼠标和游戏控制器进行相机移动和操作。
osgGA::DriveManipulator 继承自 osgGA::StandardManipulator 继承自 osgGA::CameraManipulator 继承自 osg::Referenced
函数名称 | 函数说明 |
---|---|
getTransformation() | 获取相机变换矩阵 |
setByMatrix(const osg::Matrixd& matrix) | 通过矩阵设置相机变换 |
setByInverseMatrix(const osg::Matrixd& matrix) | 通过矩阵的逆矩阵设置相机变换 |
setTransformation(const osg::Vec3d& eye,const osg::Vec3d& center,const osg::Vec3d& up) | 设置相机变换 |
setNode(osg::Node* node) | 设置相机的目标节点 |
setDistance(double distance) | 设置相机与目标节点的距离 |
setMinimumDistance(double distance) | 设置相机与目标节点的最小距离 |
setMaximumDistance(double distance) | 设置相机与目标节点的最大距离 |
setWheelZoomFactor(double factor) | 设置鼠标滚轮缩放的比例系数 |
setVelocity(double velocity) | 设置相机移动的速度 |
getViewMatrix(osg::Matrixd& matrix) | 获取视图矩阵 |
getInverseViewMatrix(osg::Matrixd& matrix) | 获取视图矩阵的逆矩阵 |
按键 | 控制 |
---|---|
W,S | 前进和后退 |
A,D | 左右移动 |
Q,E | 上下移动 |
F | 移动相机到目标节点 |
R | 重置相机的位置和朝向 |
Tab | 切换LockAzim和LockRoll之间的交替状态 |
空格 | 切换底部或顶部视角 |
Shift+鼠标中键移动 | 相机旋转 |
Shift+鼠标滚轮 | 相机的上下移动 |
Ctrl+鼠标滚轮 | 相机的前进和后退 |
Ctrl+Shift+鼠标滚轮 | 相机的左右移动 |
Alt+左键拖拽 | 旋转 |
Alt+右键拖拽 | 平移 |
#include <osgGA/DriveManipulator>
#include <osgViewer/Viewer>
int main(int argc, char** argv)
{
osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer;
osg::ref_ptr<osgGA::DriveManipulator> manipulator = new osgGA::DriveManipulator;
viewer->setCameraManipulator(manipulator);
// 加载场景
osg::ref_ptr<osg::Group> root = osgDB::readNodeFile("cow.osg");
viewer->setSceneData(root);
viewer->run();
return 0;
}