Exemple #1
0
VRObjectPtr VRFactory::setupLod(vector<string> paths) {
    vector<VRObjectPtr> objects;
    for (auto p : paths) {
        auto res = VRTransform::create("factory");
        loadVRML(p,0,res);
        objects.push_back( res );
    }
    Vec3f p;

    commitChanges();
    cout << "setupLod - changes commited\n";
    if (objects.size() == 0) return 0;

    // use all geometry to create micro lods
    VRObjectPtr root = VRObject::create("factory_lod_root");
    root->setPersistency(0);
    vector<VRLodPtr> micro_lods;
    for (uint i = 0; i<objects.size(); i++) {
        vector<VRObjectPtr> geos = objects[i]->getChildren(true, "Geometry");
        VRProgress prog("setup factory LODs ", geos.size());
        for (auto g : geos) {
            prog.update(1);

            VRLodPtr lod = VRLod::create("factory_lod");
            lod->addChild(g);
            lod->addEmpty();
            lod->setCenter( g->getBBCenter() );
            lod->setDistance(0, max(g->getBBMax()*15, 1.0f));
            micro_lods.push_back(lod);
        }
    }
    commitChanges();

    // use the micro lods to create space lods
    VRLODSpacePtr lodspace = VRLODSpace::create();
    for (auto l : micro_lods) {
        lodspace->add(l);
    }
    root->addChild(lodspace);
    lodspace->finalize();

    return root;
}