private Material[] LoadMaterials(string aseAssetName, IGeometryContext context, IFormatProvider format, string data) { var materials = new List <Material>(); var rootPath = Path.GetDirectoryName(aseAssetName); var query = from match in RegexQuery.Against(data) where match .RegEx("\t") .Literal("*MATERIAL") .WhiteSpace .Group(Pattern.With.Digit.Repeat.ZeroOrMore) .WhiteSpace .Literal("{") .RegEx("[\n\r]*") .IsTrue() select match; foreach (var match in query) { var materialEnd = data.IndexOf("\n\t}", match.Index); if (materialEnd > 0) { materialEnd += 2; var material = new Material(); materials.Add(material); var materialString = data.Substring(match.Index, materialEnd - match.Index); var diffuseIndex = materialString.IndexOf("\t\t*MAP_DIFFUSE"); if (diffuseIndex > 0) { var diffuseEnd = materialString.IndexOf("\n\t\t}", diffuseIndex); if (diffuseEnd > 0) { var diffuseString = materialString.Substring(diffuseIndex, diffuseEnd - diffuseIndex); var bitmapIndex = diffuseString.IndexOf("\t\t\t*BITMAP"); var eolIndex = diffuseString.IndexOf('\n', bitmapIndex); if (eolIndex > 0) { var bitmapString = diffuseString.Substring(bitmapIndex, eolIndex - bitmapIndex); var fileIndex = bitmapString.IndexOf('"'); if (fileIndex > 0) { var file = bitmapString.Substring(fileIndex + 1).Replace('"', ' ').Trim(); var relativeFile = Path.GetFileName(file); var actualFile = string.IsNullOrEmpty(rootPath) ? relativeFile : string.Format("{0}//{1}", rootPath, relativeFile); var loader = _assetLoaderService.GetLoader <Image>(actualFile); var frames = loader.Load(actualFile); material.DiffuseMap = frames[0]; } } } } } } return(materials.ToArray()); /* * var materialRegex = new Regex(@"\t\*MATERIAL\s*(\d*)\s*{[\n\r](.*)\t}"); * var matches = materialRegex.Matches(data); * * var assetName = "BlueEnvMap.png"; * var loader = AssetLoaderManager.Instance.GetLoader<Image>(assetName); * var frames = loader.Load(assetName); * * var material = new Material * { * DiffuseMap = frames[0] * }; * * for (var faceIndex = 0; faceIndex < context.FaceCount; faceIndex++) * { * context.SetMaterial(faceIndex, material); * } */ }