Ogre::MaterialPtr AssetLoader::createMaterial(Ogre::String name, int index, aiMaterial* mat) { Ogre::MaterialManager* omatMgr = Ogre::MaterialManager::getSingletonPtr(); std::ostringstream matname; matname << name.data() << "_mat"; matname.widen(4); matname.fill('0'); matname << index; Ogre::String matName = matname.str(); Ogre::ResourceManager::ResourceCreateOrRetrieveResult status = omatMgr->createOrRetrieve(matName, Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, true); Ogre::MaterialPtr omat = status.first; aiColor4D clr(1.0, 1.0, 1.0, 1.0); aiGetMaterialColor(mat, AI_MATKEY_COLOR_DIFFUSE, &clr); omat->getTechnique(0)->getPass(0)->setDiffuse(clr.r, clr.g, clr.b, clr.a); aiGetMaterialColor(mat, AI_MATKEY_COLOR_SPECULAR, &clr); omat->getTechnique(0)->getPass(0)->setSpecular(clr.r, clr.g, clr.b, clr.a); aiGetMaterialColor(mat, AI_MATKEY_COLOR_AMBIENT, &clr); omat->getTechnique(0)->getPass(0)->setAmbient(clr.r, clr.g, clr.b); aiGetMaterialColor(mat, AI_MATKEY_COLOR_EMISSIVE, &clr); omat->getTechnique(0)->getPass(0)->setSelfIllumination(clr.r, clr.g, clr.b); omat->getTechnique(0)->getPass(0)->setShadingMode(Ogre::SO_GOURAUD); omat->getTechnique(0)->getPass(0)->setSceneBlending(Ogre::SBT_TRANSPARENT_ALPHA); omat->getTechnique(0)->getPass(0)->setLightingEnabled(true); omat->getTechnique(0)->getPass(0)->setDepthCheckEnabled(true); //omat->getTechnique(0)->getPass(0)->setVertexColourTracking(Ogre::TVC_DIFFUSE); aiString path; aiReturn res = mat->GetTexture(aiTextureType_DIFFUSE, 0, &path); if (res == AI_SUCCESS) { Ogre::TextureUnitState* stateBase = omat->getTechnique(0)->getPass(0)->createTextureUnitState(); stateBase->setColourOperation(Ogre::LBO_MODULATE); stateBase->setTextureName(path.data); } return omat; }