⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 billboard.cpp

📁 最新osg包
💻 CPP
字号:
#include "osg/Billboard"#include "osgDB/Registry"#include "osgDB/Input"#include "osgDB/Output"using namespace osg;using namespace osgDB;// forward declare functions to use later.bool Billboard_readLocalData(Object& obj, Input& fr);bool Billboard_writeLocalData(const Object& obj, Output& fw);// register the read and write functions with the osgDB::Registry.RegisterDotOsgWrapperProxy g_BillboardProxy(    new osg::Billboard,    "Billboard",    "Object Node Geode Billboard",    &Billboard_readLocalData,    &Billboard_writeLocalData);bool Billboard_readLocalData(Object& obj, Input& fr){    bool iteratorAdvanced = false;    Billboard& billboard = static_cast<Billboard&>(obj);    if (fr[0].matchWord("Mode"))    {        if (fr[1].matchWord("AXIAL_ROT"))        {            billboard.setMode(Billboard::AXIAL_ROT);            fr+=2;            iteratorAdvanced = true;        }        else if  (fr[1].matchWord("POINT_ROT_EYE"))        {            billboard.setMode(Billboard::POINT_ROT_EYE);            fr+=2;            iteratorAdvanced = true;        }        else if  (fr[1].matchWord("POINT_ROT_WORLD"))        {            billboard.setMode(Billboard::POINT_ROT_WORLD);            fr+=2;            iteratorAdvanced = true;        }    }    if (fr[0].matchWord("Axis"))    {        float x,y,z;        if (fr[1].getFloat(x) && fr[2].getFloat(y) && fr[3].getFloat(z))        {            billboard.setAxis(Vec3(x,y,z));            fr+=4;            iteratorAdvanced = true;        }    }    if (fr[0].matchWord("Normal"))    {        float x,y,z;        if (fr[1].getFloat(x) && fr[2].getFloat(y) && fr[3].getFloat(z))        {            billboard.setNormal(Vec3(x,y,z));            fr+=4;            iteratorAdvanced = true;        }    }    // read the position data.    bool matchFirst = false;    if ((matchFirst=fr.matchSequence("Positions {")) || fr.matchSequence("Positions %i {"))    {        // set up coordinates.        int entry = fr[0].getNoNestedBrackets();        Billboard::PositionList& positionList = billboard.getPositionList();        positionList.clear();                if (matchFirst)        {            fr += 2;        }        else        {            //positionList.(capacity);            fr += 3;        }        Vec3 pos;        while (!fr.eof() && fr[0].getNoNestedBrackets()>entry)        {            if (fr[0].getFloat(pos[0]) && fr[1].getFloat(pos[1]) && fr[2].getFloat(pos[2]))            {                fr += 3;                positionList.push_back(pos);            }            else            {                ++fr;            }        }        iteratorAdvanced = true;        ++fr;    }    return iteratorAdvanced;}bool Billboard_writeLocalData(const Object& obj, Output& fw){    const Billboard& billboard = static_cast<const Billboard&>(obj);    switch(billboard.getMode())    {        case(Billboard::AXIAL_ROT): fw.indent() << "Mode AXIAL_ROT"<<std::endl; break;        case(Billboard::POINT_ROT_EYE): fw.indent() << "Mode POINT_ROT_EYE"<<std::endl; break;        case(Billboard::POINT_ROT_WORLD): fw.indent() << "Mode POINT_ROT_WORLD"<<std::endl; break;    }    const Vec3& axis = billboard.getAxis();    fw.indent() << "Axis " << axis[0] << " "<<axis[1]<<" "<<axis[2]<<std::endl;    const Vec3& normal = billboard.getNormal();    fw.indent() << "Normal " << normal[0] << " "<<normal[1]<<" "<<normal[2]<<std::endl;    fw.indent() << "Positions {"<<std::endl;    fw.moveIn();    Billboard::PositionList positionList = billboard.getPositionList();    for(Billboard::PositionList::iterator piter = positionList.begin();        piter != positionList.end();        ++piter)    {        fw.indent() << (*piter)[0] << " "<<(*piter)[1]<<" "<<(*piter)[2]<<std::endl;    }    fw.moveOut();    fw.indent() << "}"<<std::endl;    return true;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -