Exemple #1
0
 VRLodPtr getSpace(Vec4i p) {
     if (lod_spaces.count(p)) return lod_spaces[p];
     VRLodPtr l = VRLod::create("lod_space");
     l->addChild( VRObject::create("lod_entry") );
     l->addDistance(max(15*p[3]/scale, 1.0f));
     l->setCenter( Vec3f(p[0], p[1], p[2])/scale );
     addChild(l);
     lod_spaces[p] = l;
     return l;
 }
Exemple #2
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;
}