예제 #1
0
bool Emitter_readLocalData(osg::Object &obj, osgDB::Input &fr)
{
    osgParticle::Emitter &myobj = static_cast<osgParticle::Emitter &>(obj);
    bool itAdvanced = false;

    if (fr[0].matchWord("useDefaultTemplate")) {
        if (fr[1].matchWord("TRUE")) {
            myobj.setUseDefaultTemplate(true);
            fr += 2;
            itAdvanced = true;
        }
        if (fr[1].matchWord("FALSE")) {
            myobj.setUseDefaultTemplate(false);
            fr += 2;
            itAdvanced = true;
        }
    }

    if (fr[0].matchWord("particleTemplate")) {
        ++fr;
        itAdvanced = true;
        osgParticle::Particle P;
        if (read_particle(fr, P)) {
            myobj.setParticleTemplate(P);
        }
    }

    return itAdvanced;
}
예제 #2
0
bool ParticleSystem_readLocalData(osg::Object &obj, osgDB::Input &fr)
{
    osgParticle::ParticleSystem &myobj = static_cast<osgParticle::ParticleSystem &>(obj);
    bool itAdvanced = false;

    if (fr[0].matchWord("particleAlignment")) {
        if (fr[1].matchWord("BILLBOARD")) {
            myobj.setParticleAlignment(osgParticle::ParticleSystem::BILLBOARD);
            fr += 2;
            itAdvanced = true;
        }
        if (fr[1].matchWord("FIXED")) {
            myobj.setParticleAlignment(osgParticle::ParticleSystem::FIXED);
            fr += 2;
            itAdvanced = true;
        }
    }

    if (fr[0].matchWord("particleScaleReferenceFrame")) {
        if (fr[1].matchWord("LOCAL_COORDINATES")) {
            myobj.setParticleScaleReferenceFrame(osgParticle::ParticleSystem::LOCAL_COORDINATES);
            fr += 2;
            itAdvanced = true;
        }
        if (fr[1].matchWord("")) {
            myobj.setParticleScaleReferenceFrame(osgParticle::ParticleSystem::WORLD_COORDINATES);
            fr += 2;
            itAdvanced = true;
        }
    }

    if (fr[0].matchWord("alignVectorX")) {
        osg::Vec3 v;
        if (fr[1].getFloat(v.x()) && fr[2].getFloat(v.y()) && fr[3].getFloat(v.z())) {
            myobj.setAlignVectorX(v);
            fr += 4;
            itAdvanced = true;
        }
    }

    if (fr[0].matchWord("alignVectorY")) {
        osg::Vec3 v;
        if (fr[1].getFloat(v.x()) && fr[2].getFloat(v.y()) && fr[3].getFloat(v.z())) {
            myobj.setAlignVectorY(v);
            fr += 4;
            itAdvanced = true;
        }
    }

    if (fr[0].matchWord("doublePassRendering")) {
        if (fr[1].matchWord("TRUE")) {
            myobj.setDoublePassRendering(true);
            fr += 2;
            itAdvanced = true;
        } else if (fr[1].matchWord("FALSE")) {
            myobj.setDoublePassRendering(false);
            fr += 2;
            itAdvanced = true;
        }
    }

    if (fr[0].matchWord("frozen")) {
        if (fr[1].matchWord("TRUE")) {
            myobj.setFrozen(true);
            fr += 2;
            itAdvanced = true;
        } else if (fr[1].matchWord("FALSE")) {
            myobj.setFrozen(false);    // this might not be necessary
            fr += 2;
            itAdvanced = true;
        }
    }

    if (fr[0].matchWord("freezeOnCull")) {
        if (fr[1].matchWord("TRUE")) {
            myobj.setFreezeOnCull(true);
            fr += 2;
            itAdvanced = true;
        } else if (fr[1].matchWord("FALSE")) {
            myobj.setFreezeOnCull(false);
            fr += 2;
            itAdvanced = true;
        }
    }
    
    if (fr[0].matchWord("defaultBoundingBox")) {
        osg::BoundingBox bbox;
        if (    fr[1].getFloat(bbox.xMin()) &&
            fr[2].getFloat(bbox.yMin()) &&
            fr[3].getFloat(bbox.zMin()) &&
            fr[4].getFloat(bbox.xMax()) &&
            fr[5].getFloat(bbox.yMax()) &&
            fr[6].getFloat(bbox.zMax()) ) {
            myobj.setDefaultBoundingBox(bbox);
            fr += 7;
            itAdvanced = true;
        }
    }
    
    if (fr[0].matchWord("particleTemplate")) {        
        ++fr;
        itAdvanced = true;
        osgParticle::Particle P;
        if (read_particle(fr, P)) {
            myobj.setDefaultParticleTemplate(P);
        }
    }    

    return itAdvanced;
}