#include <Windows.h>
#include <osg\Node>
#include <osg\Group>
#include <osg\Geometry>
#include <osg\MatrixTransform>
#include <osg\NodeCallback>
#include <osgViewer\Viewer>
#include <osgViewer\ViewerEventHandlers>
#include <osgDB\ReadFile>
class ModelCallback : public osg::NodeCallback
{
public:
ModelCallback() :angle_(0.0) { }
virtual void operator()(osg::Node* node, osg::NodeVisitor* nv) override
{
osg::ref_ptr<osg::MatrixTransform> mt = dynamic_cast<osg::MatrixTransform*>(node);
if (mt.valid())
{
osg::Matrix matrix;
matrix.makeRotate(osg::DegreesToRadians(angle_),osg::Z_AXIS);
mt->setMatrix(matrix);
angle_ += 0.1;
}
traverse(node, nv);
}
private:
float angle_;
};
int main()
{
osgViewer::Viewer viewer;
osg::ref_ptr<osg::Group> group = new osg::Group();
osg::ref_ptr<osg::MatrixTransform> mt = new osg::MatrixTransform();
mt->addChild(osgDB::readNodeFile("glider.osg"));
mt->setUpdateCallback(new ModelCallback());
group->addChild(mt);
viewer.setSceneData(group);
viewer.addEventHandler(new osgViewer::StatsHandler());
viewer.setUpViewInWindow(100, 100, 500, 400);
return viewer.run();
}