MatrixTransform* loadModel(std::string name, float scale, float rotX, float rotY, float rotZ, osg::Vec3 translate) { __FUNCTION_HEADER__ Node* n = NULL; //did we already load (or try to load) this one? std::map<std::string, osg::ref_ptr<osg::Node> >::iterator i; bool haz = false; for(i = gLoadedModels.begin(); i != gLoadedModels.end(); i++) { if(i->first == name) { haz = true; // printf("We already have %s\n", name.c_str()); n = i->second; } } if(!haz) //if we didn't try to laod it before, do so now { n = osgDB::readNodeFile(findDataFile(name)); gLoadedModels[name] = n; if(!n) logError("Unable to load model %s\n", name.c_str()); else printf("Loaded %s\n", name.c_str()); } if(!n) return NULL; MatrixTransform* m = new MatrixTransform(); m->setName(name); m->addChild(n); Matrix mat = Matrix::scale(scale, scale, scale); mat = mat * Matrix::rotate(rotX / 57.296, Vec3(1, 0, 0)); mat = mat * Matrix::rotate(rotY / 57.296, Vec3(0, 1, 0)); mat = mat * Matrix::rotate(rotZ / 57.296, Vec3(0, 0, 1)); mat = mat * Matrix::translate(translate); m->setMatrix(mat); return m; }