osg的NodeCallback回調使用方法

來源:互聯網
上載者:User

#include <Windows.h>
#include <osgViewer/Viewer>
#include <osg/Math>
#include <osgDB/ReadFile>
#include <osg/NodeCallback>
#include <osg/MatrixTransform>
//從osg::NodeCallBack繼承一個新類,實現simpleCallBack的回調
class simpleCallBack:public osg::NodeCallback
{
public:
    simpleCallBack():_angle(0)
    {

    }

    virtual void operator()(osg::Node* node, osg::NodeVisitor* nv)
    {
        //建立矩陣轉換節點
        osg::ref_ptr<osg::MatrixTransform> mt=dynamic_cast<osg::MatrixTransform*>(node);
        //建立矩陣
        osg::Matrix mx;
        //繞著Z軸旋轉
        mx.makeRotate(_angle,osg::Vec3(0.0,0.0,1.0));
        //設定矩陣
        mt->setMatrix(mx);

        _angle+=0.01;

        //繼續遍曆
        traverse(node,nv);

    }

public:
    //旋轉角度
    double _angle;
};

int main()
{
    osg::ref_ptr<osgViewer::Viewer> viewer=new osgViewer::Viewer;
    osg::ref_ptr<osg::Group> root=new osg::Group;

    //讀模數型
    osg::ref_ptr<osg::Node> node=osgDB::readNodeFile("cow.osg");

    //建立矩陣變換節點
    osg::ref_ptr<osg::MatrixTransform> mt=new osg::MatrixTransform;
    mt->addChild(node.get());

    //設定更新回呼函數
    mt->setUpdateCallback(new simpleCallBack());

    root->addChild(mt.get());
    viewer->setSceneData(root.get());
    viewer->realize();
    viewer->run();
    return 0;
}

 

所有繼承自NodeCallback類的子類,可重載operator()方法,對於OSG結點指定更新毀掉為類執行個體,結點會自動調用類的operator方法進行回調更新。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.