void Material::read( xmlNodePtr root ) { int i; double tmp[4]; xmlNodePtr node; char* str = xmlFindString( root, "Name", "Default_Name" ); name = str; // name is a stringc node = xmlGetNode( root, "Ambient", 0 ); xmlExtractDoubleArray( node, ',', tmp, 4 ); for ( i = 0 ; i < 4 ; i++ ) amb[i] = (float)tmp[i]; node = xmlGetNode( root, "Diffuse", 0 ); xmlExtractDoubleArray( node, ',', tmp, 4 ); for ( i = 0 ; i < 4 ; i++ ) diff[i] = (float)tmp[i]; node = xmlGetNode( root, "Specular", 0 ); xmlExtractDoubleArray( node, ',', tmp, 4 ); for ( i = 0 ; i < 4 ; i++ ) spec[i] = (float)tmp[i]; node = xmlGetNode( root, "Emission", 0 ); xmlExtractDoubleArray( node, ',', tmp, 4 ); for ( i = 0 ; i < 4 ; i++ ) emiss[i] = (float)tmp[i]; node = xmlGetNode( root, "Shininess", 0 ); shine = (float)xmlExtractDouble( node ); }
double xmlFindDouble( xmlNodePtr node, const char * name, double def ) { xmlNodePtr n; if ( node == NULL ) return def; n = xmlGetNode( node, name, 0 ); if ( n ) return xmlExtractDouble( n ); return def; }