Esempio n. 1
0
void readMaterials(ObjFile* file, FILE* f)
{
    rewind(f);

	char line[MAX_STRING_LENGTH];
 	char* tline;
    // first material is a default material
    initMaterial(&file->materials[0]);

	file->numMaterials = 1;

	while (NULL != fgets(line, MAX_STRING_LENGTH, f))
	{
        tline = trimBeginning(line);
        
		char name[MAX_STRING_LENGTH];		

        // read in the material name
		if (strstr(tline, "newmtl") == tline) 
		{
			file->numMaterials++;		

            // initialize the new material
            initMaterial(&file->materials[file->numMaterials - 1]);

            // copy the name from the tline
		   	if (sscanf(tline, "newmtl %s", name) == 1)
			{
				strcpy(file->materials[file->numMaterials - 1].name, name);
			}
		}

		// read in ambient 
		if (strstr(tline, "Ka") == tline) 
		{
			ObjVector3F ambient;

			int n = sscanf(
					tline, 
					"Ka %f %f %f",
					&ambient.x, 
					&ambient.y, 
					&ambient.z
				);

		    if (n == 3) 
		    {
		       file->materials[file->numMaterials - 1].ambient = ambient;  
		    }
		}

		// read diffuse
		if (strstr(tline, "Kd") == tline) 
		{
			ObjVector3F diffuse;

			int n = sscanf(
					tline, 
					"Kd %f %f %f",
					&diffuse.x, 
					&diffuse.y, 
					&diffuse.z
				);

		    if (n == 3) 
		    {
		        file->materials[file->numMaterials - 1].diffuse = diffuse;  
		    }
		}
		
		// read specular
		if (strstr(tline, "Ks") == tline) 
		{
			ObjVector3F specular;

			int n = sscanf(
					tline, 
					"Ks %f %f %f",
					&specular.x, 
					&specular.y, 
					&specular.z
				);

		    if (n == 3) 
		    {
		       file->materials[file->numMaterials - 1].specular = specular;  
		    }
		}
		
		// read shininess
		if (strstr(tline, "Ns") == tline) 
		{
			float shininess;

		    if (sscanf(tline, "Ns %f", &shininess) == 1) 
		    {
		        file->materials[file->numMaterials - 1].shininess = shininess; 
		    }
		}

		// read ambient tex
		if (strstr(tline, "map_Ka") == tline) 
		{
			char name[MAX_STRING_LENGTH];			

		    if (sscanf(tline, "map_Ka %s", name) == 1) 
		    {
		        strcpy(
					file->materials[file->numMaterials - 1].ambientTex, 
					name
				);
		    }
		}

		// read diffuse tex
		if (strstr(tline, "map_Kd") == tline) 
		{
			char name[MAX_STRING_LENGTH];

		    if (sscanf(tline, "map_Kd %s", name) == 1) 
		    {
		        strcpy(
                    file->materials[file->numMaterials - 1].diffuseTex, 
                    name
                ); 
		    }
		}

		// read specular tex
		if (strstr(tline, "map_Ks") == tline) 
		{
		    char name[MAX_STRING_LENGTH];

			if (sscanf(tline, "map_Ks %s", name) == 1) 
			{
			    strcpy(
					file->materials[file->numMaterials - 1].specularTex, 
					name
				);
			}
		}
		
	}
}
Esempio n. 2
0
std::string& trim(std::string& inputString) {
	trimEnd(inputString);
	trimBeginning(inputString);

	return inputString;
}