bool Material::AddTexture(std::string textureName) { TextureClass* texture = BE_NEW TextureClass; if (!texture) { return false; } if (!texture->Initialize(g_pApp->GetGraphicsManager()->GetRenderer()->GetDevice(), textureName)) { return false; } m_material.Textures.push_back(texture); return true; }
void MeshClass::LoadModel(string filename) { string sinput; string s; ifstream is(filename, ifstream::binary); if (is.fail()) { throw GenericException("File not found"); } // get length of file: is.seekg(0, is.end); int length = (int)is.tellg(); is.seekg(0, is.beg); char * buffer = new char[length]; // read data as a block: is.read(buffer, length); s.reserve(sizeof(char) *length); s = string(buffer); // ...buffer contains the entire file... delete[] buffer; is.close(); string::iterator it = s.begin(); MaterialClass* focusMaterial = 0; TextureClass* focusTexture = 0; ObjectMeshClass* focusObject = 0; MeshDataClass* focusMesh = 0; MeshDataClass::MeshColorType focusType; // For each object in the model while ((*it) != 'e') { //get next command sinput = readStringUntilSpace(&it); if (sinput.compare("vtn") == 0) { //Load vertices until a new object starts MeshDataClass::MeshDataType newMeshData = readVtnLine(&it); focusMesh->addMeshData(newMeshData); //Should auto skip the new line if ((*it) == 'm' || (*it) == 'o') { //Push the last mesh focusObject->addMesh(focusMesh); } } else if (sinput.compare("o") == 0) { //If your not the first object if (focusObject != 0) { //Push the last object m_allObjects.push_back(focusObject); } string objectName = readStringUntilNewL(&it); focusObject = new ObjectMeshClass(); focusObject->Initialize(objectName); //Should auto skip to the next line //Check if you need to use the prev material if ((*it) == 'v') { focusMesh = new MeshDataClass(); if (focusType == MeshDataClass::MeshColorType::MATERIAL) { focusMesh->Initialize(focusMaterial); } else { focusMesh->Initialize(focusTexture); } } } else if (sinput.compare("mtl") == 0) { focusMesh = new MeshDataClass(); MaterialClass::MaterialInfo focusColorInfo = MaterialClass::MaterialInfo(); focusColorInfo = readMtlLine(&it); if (focusColorInfo.map_Kd.compare("material") == 0) { MaterialClass* material = new MaterialClass(); material->Initialize(focusColorInfo); focusType = MeshDataClass::MeshColorType::MATERIAL; focusMesh->Initialize(material); } else { TextureClass* texture = new TextureClass(); texture->Initialize(WindowsHelpers::ToLWideStr("data\\" + focusColorInfo.map_Kd)); focusTexture = texture; focusType = MeshDataClass::MeshColorType::TEXTURE; focusMesh->Initialize(texture); } //Should auto skip to the next line } else if (sinput.compare("gun") == 0) { XMFLOAT3 newGun = readGunLine(&it); m_guns.push_back(newGun); } } //Add the last objects focusObject->addMesh(focusMesh); m_allObjects.push_back(focusObject); }