public static Cal3DMaterial ReadMaterial(BinaryReader aReader, string aName) { if (aReader.ReadUInt32() != m_CRFMagic) { return(null); } int format = aReader.ReadInt32(); if (format != 700) { Debug.LogWarning("CRF file format is " + format + " while 700 was expected"); } var mat = new Cal3DMaterial(); mat.textureNames = new List <string>(); mat.name = aName; mat.ambientColor = ReadColor32(aReader); mat.diffuseColor = ReadColor32(aReader); mat.specularColor = ReadColor32(aReader); mat.shininess = aReader.ReadSingle(); int textureCount = aReader.ReadInt32(); for (int i = 0; i < textureCount; i++) { mat.textureNames.Add(ReadLengthString(aReader)); } return(mat); }
public static Cal3DMaterial ReadMaterialXML(Stream aStream, string aName) { Cal3DMaterial mat = new Cal3DMaterial(); mat.name = aName; mat.textureNames = new List <string>(); XmlReaderSettings settings = new XmlReaderSettings(); settings.ConformanceLevel = ConformanceLevel.Fragment; using (XmlReader reader = XmlReader.Create(aStream, settings)) { while (reader.Read()) { if (reader.IsStartElement()) { switch (reader.Name.ToUpper()) { case "HEADER": var magic = reader.GetAttribute("MAGIC"); if (magic != "XRF") { Debug.LogError("File is not a XML Cal3D material file. MAGIC should be XRF but actually is " + magic); return(null); } var version = reader.GetAttribute("VERSION"); if (version != "900") { Debug.LogWarning("XRF file version not 900. Got " + version); } break; case "AMBIENT": { reader.Read(); mat.ambientColor = ParseColor32(reader.ReadContentAsString()); } break; case "DIFFUSE": { reader.Read(); mat.diffuseColor = ParseColor32(reader.ReadContentAsString()); } break; case "SPECULAR": { reader.Read(); mat.specularColor = ParseColor32(reader.ReadContentAsString()); } break; case "SHININESS": { reader.Read(); mat.shininess = reader.ReadContentAsFloat(); } break; case "MAP": { reader.Read(); mat.textureNames.Add(reader.ReadContentAsString()); } break; } } } } return(mat); }