osgGA.NodeTrackerManipulator是OpenSceneGraph中的一个相机操作器,可以让相机跟踪某个节点,实现相机自动旋转和旋转控制。这个相机操作器可以用于3D模型预览、漫游等场景。
#include <osgViewer/Viewer>
#include <osgGA/NodeTrackerManipulator>
int main()
{
// 创建场景
osg::ref_ptr<osg::Node> scene = osgDB::readNodeFile("cow.osg");
// 创建视窗
osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer;
viewer->setSceneData(scene);
// 创建相机操作器
osg::ref_ptr<osgGA::NodeTrackerManipulator> tracker = new osgGA::NodeTrackerManipulator;
tracker->setTrackNode(scene); //设置跟踪的节点
viewer->setCameraManipulator(tracker.get()); //设置相机操作器
viewer->run(); //开始运行
return 0;
}
上面的代码演示了如何使用osgGA.NodeTrackerManipulator让相机跟踪某个节点。调用tracker->setTrackNode(node)设置要跟踪的节点,然后将相机操作器设置为viewer的相机操作器。
osgGA.NodeTrackerManipulator提供了几种方式来控制相机旋转:
拖拽:按下鼠标左键并移动时,相机跟随鼠标移动而旋转。
放大缩小:向前滚动鼠标滚轮或使用两个手指在触摸板上滑动时,可以放大或缩小场景。
按键:按下1、2、3或4键分别切换相机模式,分别对应跟踪模式、注视模式、反注视模式、旋转模式。
void osgGA::NodeTrackerManipulator::setTrackNode(Node* node)
设置跟踪的节点。
viewer->setCameraManipulator(tracker.get());
tracker->setTrackNode(node);
void osgGA::NodeTrackerManipulator::setTrackerMode(TrackerMode mode)
设置跟踪模式,取值可以为NODE_CENTER或BOUNDING_SPHERE_CENTER。
tracker->setTrackerMode(osgGA::NodeTrackerManipulator::BOUNDING_SPHERE_CENTER);
void osgGA::NodeTrackerManipulator::setRotationMode(RotationMode mode)
设置旋转模式,取值分别为TRACKBALL、FIXED、FREE、TWO_AXIS和ELEVATION_AZIM。
tracker->setRotationMode(osgGA::NodeTrackerManipulator::TWO_AXIS);
跟踪的节点最好是有geometry的节点,否则可能会出现相机看不到的情况。
跟踪模式默认为NODE_CENTER,如果跟踪的节点不存在或者没有有效的BOUNDING_SPHERE,渲染可能会失败。
TRACKBALL模式是默认的,仅在鼠标左键按下时旋转相机,FREE模式则可以在任何时候旋转相机。
以上就是OpenSceneGraph中osgGA.NodeTrackerManipulator的介绍和基本用法,希望对大家有所帮助。OpenSceneGraph是一个优秀的跨平台开源图形库,如果你对3D图形编程感兴趣,可以深入学习。