private SSMeshOBJSubsetData _loadMaterialSubset(string baseDirectory, WavefrontObjLoader wff, WavefrontObjLoader.MaterialInfoWithFaces objMatSubset) { // generate renderable geometry data... SSVertex_PosNormTex[] vertices; UInt16[] triIndices, wireframeIndices; VertexSoup_VertexFormatBinder.generateDrawIndexBuffer( wff, objMatSubset, out triIndices, out vertices); wireframeIndices = OpenTKHelper.generateLineIndicies(triIndices); SSMeshOBJSubsetData subsetData = new SSMeshOBJSubsetData( vertices, triIndices, wireframeIndices); // setup the material... // load and link every texture present subsetData.textureMaterial = SSTextureMaterial.FromBlenderMtl(baseDirectory, objMatSubset.mtl); subsetData.colorMaterial = SSColorMaterial.fromMtl(objMatSubset.mtl); return(subsetData); }
public static SSTextureMaterial FromMaterialString(SSAssetManager.Context ctx, string materialString) { string existingFilename = null; SSAssetManager.Context existingCtx = null; if (ctx != null && SSAssetManager.ResourceExists(ctx, materialString)) { existingCtx = ctx; existingFilename = materialString; } else if (SSAssetManager.ResourceExists(SSAssetManager.Context.Root, materialString)) { existingCtx = SSAssetManager.Context.Root; existingFilename = materialString; } else { SSAssetManager.Context[] ctxs = { ctx, SSAssetManager.Context.Root }; var extensions = new List <string> (SSTexture.commonImageExtensions); extensions.Insert(0, ".mtl"); // check mtl first foreach (var context in ctxs) { // for each context (current vs root directory)... foreach (string extension in extensions) { // for each extension of interest... string filename = materialString + extension; if (SSAssetManager.ResourceExists(context, filename)) { existingCtx = context; existingFilename = filename; break; } } } } if (existingFilename != null) { // try loading a material try { SSWavefrontMTLInfo[] mtls = SSWavefrontMTLInfo.ReadMTLs(existingCtx, existingFilename); if (mtls.Length < 0) { throw new Exception("No MTLs available in a file"); } return(SSTextureMaterial.FromBlenderMtl(existingCtx, mtls[0])); } catch { // try loading an image try { SSTexture diffTex = SSAssetManager.GetInstance <SSTextureWithAlpha> (existingCtx, existingFilename); return(new SSTextureMaterial(diffTex)); } catch { } } } string errMsg = "could not load texture material: " + materialString; System.Console.WriteLine(errMsg); throw new Exception(errMsg); }
public static SSTextureMaterial FromMaterialString(string basePath, string materialString) { string existingPath = null; string combined = Path.Combine(basePath, materialString); if (SSAssetManager.ResourceExists(combined)) { existingPath = combined; } else if (SSAssetManager.ResourceExists(materialString)) { existingPath = materialString; } else { string[] basePaths = { "", basePath }; // search in root as well as supplied base path var extensions = new List <string> (SSTexture.commonImageExtensions); extensions.Insert(0, ".mtl"); // check mtl first foreach (var bp in basePaths) { // for each context (current vs root directory)... foreach (string extension in extensions) { // for each extension of interest... string fullPath = Path.Combine(bp, materialString + extension); if (SSAssetManager.ResourceExists(fullPath)) { existingPath = fullPath; break; } } } } if (existingPath != null) { // try loading a material try { SSWavefrontMTLInfo[] mtls = SSWavefrontMTLInfo.ReadMTLs(existingPath); if (mtls.Length <= 0) { throw new Exception("No MTLs available in a file"); } string baseDir = Path.GetDirectoryName(existingPath); return(SSTextureMaterial.FromBlenderMtl(baseDir, mtls[0])); } catch { // try loading an image try { SSTexture diffTex = SSAssetManager.GetInstance <SSTextureWithAlpha> (existingPath); return(new SSTextureMaterial(diffTex)); } catch { } } } string errMsg = "could not load texture material: " + materialString; System.Console.WriteLine(errMsg); throw new Exception(errMsg); }