Exemple #1
0
Mesh* MeshManager::getMesh(string name){
	std::map<string, Mesh*>::iterator it;
	it = meshMap.find(name);
	if(it != meshMap.end()){//mesh previament carregat LEAK!
		Mesh* result = new Mesh(it->second, getNewId());
		result->generateVBO();
		return result;
	}

	if(FileSystem::getInstance()->openFile(name) == -1){
		logErr("Error TextureManager::getTexture opening %s: ", name.c_str());
		return 0;
	}
	std::size_t foundMD5 = name.find(".md5");
	std::size_t foundOBJ = name.find(".obj");
	if (foundOBJ!=std::string::npos){
		meshMap[name] = parseOBJ(name, FileSystem::getInstance()->getFileData(name), FileSystem::getInstance()->getFileSize(name));
	}
	else if (foundMD5!=std::string::npos){
		meshMap[name] = parseMD5(name, FileSystem::getInstance()->getFileData(name), FileSystem::getInstance()->getFileSize(name));
	}
	else{
		FileSystem::getInstance()->destroyFileData(name);
		return 0;
	}
	FileSystem::getInstance()->destroyFileData(name);

//	printMeshData(meshMap[name]);
	meshMap[name]->generateVBO();
	return meshMap[name];
}
Exemple #2
0
// static
std::unique_ptr< OBJData > OBJLoader::loadFile( const std::string& objFilename,
                                               bool removeEmptyGroups )
{
    std::unique_ptr< OBJData > pOBJData( new OBJData );
    bool succeeded = parseOBJ( objFilename, pOBJData.get() );
    if( !succeeded )
    {
        // Return null.
        pOBJData.reset();
    }

    if( removeEmptyGroups )
    {
        pOBJData->removeEmptyGroups();
    }

    return pOBJData;
}
Exemple #3
0
// static
std::shared_ptr< OBJData > OBJLoader::loadFile( QString objFilename )
{
	int lineNumber = 0;
	QString line = "";
	
	std::shared_ptr< OBJData > pOBJData( new OBJData );
	OBJMaterial* pCurrentMaterial = pOBJData->addMaterial( "" ); // default material name is the empty string
	OBJGroup* pCurrentGroup = pOBJData->addGroup( "" ); // default group name is the empty string
	
	bool succeeded = parseOBJ( objFilename, pOBJData );
	if( !succeeded )
	{
		// return null
		pOBJData.reset();
	}

	return pOBJData;
}
ElysiumEngine::Mesh *ElysiumEngine::loadMeshFromObj(const char *filename)
{
    FILE *file = fopen(filename,"rt");
    if(!file)
        return nullptr;
    
    Mesh *output = new Mesh();
    
    getObjSize(file,output->vertexCount,output->indexCount);
    output->vertices = new VertexData[output->vertexCount];
    output->indices = new unsigned int[3 * output->indexCount];
    
    parseOBJ(output,file);
    
    fclose(file);
    
    //print(output);
    
    return output;
}