public SSTextureWithAlpha(SSAssetManager.Context ctx, string filename) : base() { Bitmap textureBitmap = new Bitmap(ctx.Open(filename)); loadFromBitmap(textureBitmap, name: filename, hasAlpha: true); }
public SSMesh_wfOBJ(SSAssetManager.Context ctx, string filename) { this.srcFilename = ctx.fullResourcePath(filename); Console.WriteLine("SSMesh_wfOBJ: loading wff {0}", filename); WavefrontObjLoader wff_data = new WavefrontObjLoader(ctx, filename); Console.WriteLine("wff vertex count = {0}", wff_data.positions.Count); Console.WriteLine("wff face count = {0}", wff_data.numFaces); _loadData(ctx, wff_data); // update radius float maxRadSq = 0f; foreach (var subset in geometrySubsets) { foreach (var vtx in subset.triangleMesh.lastAssignedVertices) { maxRadSq = Math.Max(maxRadSq, vtx.Position.LengthSquared); } } _boundingSphereRadius = (float)Math.Sqrt(maxRadSq); }
private SSMeshOBJSubsetData _loadMaterialSubset(SSAssetManager.Context ctx, WavefrontObjLoader wff, WavefrontObjLoader.MaterialInfoWithFaces objMatSubset) { // generate renderable geometry data... SSVertex_PosNormTexDiff[] vertices; UInt16[] triIndices, wireframeIndices; VertexSoup_VertexFormatBinder.generateDrawIndexBuffer( wff, 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 = new SSTextureMaterial(); if (objMatSubset.mtl.diffuseTextureResourceName != null) { subsetData.TextureMaterial.diffuseTex = SSAssetManager.GetInstance <SSTexture>(ctx, objMatSubset.mtl.diffuseTextureResourceName); } if (objMatSubset.mtl.ambientTextureResourceName != null) { subsetData.TextureMaterial.ambientTex = SSAssetManager.GetInstance <SSTexture>(ctx, objMatSubset.mtl.ambientTextureResourceName); } if (objMatSubset.mtl.bumpTextureResourceName != null) { subsetData.TextureMaterial.bumpMapTex = SSAssetManager.GetInstance <SSTexture>(ctx, objMatSubset.mtl.bumpTextureResourceName); } if (objMatSubset.mtl.specularTextureResourceName != null) { subsetData.TextureMaterial.specularTex = SSAssetManager.GetInstance <SSTexture>(ctx, objMatSubset.mtl.specularTextureResourceName); } return(subsetData); }
public SSTexture(SSAssetManager.Context ctx, string filename) : this() { Bitmap textureBitmap = new Bitmap(ctx.Open(filename)); loadFromBitmap(textureBitmap, name: filename); }
public static TypeFace loadTypeFace(SSAssetManager.Context ctx, string filename) { var reader = ctx.OpenText(filename); TypeFace newTypeFace = new TypeFace(); newTypeFace.ReadSVG(reader.ReadToEnd()); return(newTypeFace); }
public static SSSkeletalAnimationMD5 ReadAnimation(SSAssetManager.Context ctx, string filename) { var parser = new SSMD5AnimParser(ctx, filename); var anim = parser.readAnimation(); anim.name = filename; return(anim); }
private void _loadData(SSAssetManager.Context ctx, WavefrontObjLoader m) { foreach (var srcmat in m.materials) { if (srcmat.faces.Count != 0) { this.geometrySubsets.Add(_loadMaterialSubset(ctx, m, srcmat)); } } }
public static FontFamily[] loadFontFamilies(SSAssetManager.Context ctx, string filename) { var stream = ctx.Open(filename); var binReader = new BinaryReader (stream); byte[] bytes = binReader.ReadBytes(int.MaxValue); var fontCollection = new PrivateFontCollection (); unsafe { fixed (byte* ptr = bytes) { fontCollection.AddMemoryFont(new IntPtr (ptr), bytes.Length); } } return fontCollection.Families; }
public SSMesh_wfOBJ(SSAssetManager.Context ctx, string filename) { this.srcFilename = filename; this.ctx = ctx; Console.WriteLine("SSMesh_wfOBJ: loading wff {0}", filename); WavefrontObjLoader wff_data = new WavefrontObjLoader(ctx, filename); Console.WriteLine("wff vertex count = {0}", wff_data.positions.Count); Console.WriteLine("wff face count = {0}", wff_data.numFaces); _loadData(ctx, wff_data); }
private SSMeshOBJSubsetData _loadMaterialSubset(SSAssetManager.Context ctx, WavefrontObjLoader wff, WavefrontObjLoader.MaterialInfoWithFaces objMatSubset) { // create new mesh subset-data SSMeshOBJSubsetData subsetData = new SSMeshOBJSubsetData(); // setup the material... // load and link every texture present subsetData.TextureMaterial = new SSTextureMaterial(); if (objMatSubset.mtl.diffuseTextureResourceName != null) { subsetData.TextureMaterial.diffuseTex = SSAssetManager.GetInstance <SSTexture>(ctx, objMatSubset.mtl.diffuseTextureResourceName); } if (objMatSubset.mtl.ambientTextureResourceName != null) { subsetData.TextureMaterial.ambientTex = SSAssetManager.GetInstance <SSTexture>(ctx, objMatSubset.mtl.ambientTextureResourceName); } if (objMatSubset.mtl.bumpTextureResourceName != null) { subsetData.TextureMaterial.bumpMapTex = SSAssetManager.GetInstance <SSTexture>(ctx, objMatSubset.mtl.bumpTextureResourceName); } if (objMatSubset.mtl.specularTextureResourceName != null) { subsetData.TextureMaterial.specularTex = SSAssetManager.GetInstance <SSTexture>(ctx, objMatSubset.mtl.specularTextureResourceName); } // generate renderable geometry data... VertexSoup_VertexFormatBinder.generateDrawIndexBuffer(wff, out subsetData.indicies, out subsetData.vertices); // TODO: setup VBO/IBO buffers // http://www.opentk.com/doc/graphics/geometry/vertex-buffer-objects subsetData.wireframe_indicies = OpenTKHelper.generateLineIndicies(subsetData.indicies); subsetData.vbo = new SSVertexBuffer <SSVertex_PosNormTexDiff>(subsetData.vertices); subsetData.ibo = new SSIndexBuffer(subsetData.indicies, subsetData.vbo); subsetData.ibo_wireframe = new SSIndexBuffer(subsetData.wireframe_indicies, subsetData.vbo); return(subsetData); }
public static SSTextureMaterial FromBlenderMtl(SSAssetManager.Context ctx, SSWavefrontMTLInfo mtl) { SSTexture diffuse = null, specular = null, ambient = null, bumpMap = null; if (mtl.diffuseTextureResourceName != null && mtl.diffuseTextureResourceName.Length > 0) { diffuse = SSAssetManager.GetInstance <SSTextureWithAlpha> (ctx, mtl.diffuseTextureResourceName); } if (mtl.specularTextureResourceName != null && mtl.specularTextureResourceName.Length > 0) { specular = SSAssetManager.GetInstance <SSTextureWithAlpha> (ctx, mtl.specularTextureResourceName); } if (mtl.ambientTextureResourceName != null && mtl.ambientTextureResourceName.Length > 0) { ambient = SSAssetManager.GetInstance <SSTextureWithAlpha> (ctx, mtl.ambientTextureResourceName); } if (mtl.bumpTextureResourceName != null && mtl.bumpTextureResourceName.Length > 0) { bumpMap = SSAssetManager.GetInstance <SSTextureWithAlpha> (ctx, mtl.bumpTextureResourceName); } return(new SSTextureMaterial(diffuse, specular, ambient, bumpMap)); }
public static SSWavefrontMTLInfo[] ReadMTLs(SSAssetManager.Context ctx, string filename) { var materials = new List <SSWavefrontMTLInfo> (); SSWavefrontMTLInfo parseMaterial = null; StreamReader sr = ctx.OpenText(filename); //Read the first line of text string line = sr.ReadLine(); //Continue to read until you reach end of file while (line != null) { string[] tokens = line.Split(" ".ToArray(), 2); if (tokens.Length < 2) { goto next_line; } string firstToken = tokens[0]; string lineContent = tokens[1]; switch (firstToken) { case "#": // Nothing to read, these are comments. break; case "newmtl": // create new named material parseMaterial = new SSWavefrontMTLInfo(); materials.Add(parseMaterial); parseMaterial.name = lineContent; break; case "Ka": // ambient color parseMaterial.vAmbient = WavefrontParser.readVector4(lineContent, null); parseMaterial.hasAmbient = true; break; case "Kd": // diffuse color parseMaterial.vDiffuse = WavefrontParser.readVector4(lineContent, null); parseMaterial.hasDiffuse = true; break; case "Ks": // specular color (weighted by Ns) parseMaterial.vSpecular = WavefrontParser.readVector4(lineContent, null); parseMaterial.hasSpecular = true; break; case "Ns": // specular color weight parseMaterial.vSpecularWeight = WavefrontParser.parseFloat(lineContent); break; case "d": case "Tr": // transparency / dissolve (i.e. alpha) parseMaterial.fTransparency = WavefrontParser.parseFloat(lineContent); parseMaterial.hasTransparency = true; break; case "illum": // illumination mode parseMaterial.hasIlluminationMode = true; parseMaterial.illuminationMode = (SSWavefrontIlluminationMode)int.Parse(lineContent); break; case "map_Kd": // diffuse color map parseMaterial.diffuseTextureResourceName = lineContent; break; case "map_Ka": // ambient color map parseMaterial.ambientTextureResourceName = lineContent; break; case "map_Ks": // specular color map parseMaterial.specularTextureResourceName = lineContent; break; case "bump": case "map_Bump": case "map_bump": // bump map // bump <filename> [-bm <float intensity>] // bump -bm <float intensity> <filename> string[] parts = lineContent.Split(' '); if (parts.Length == 1) { parseMaterial.bumpTextureResourceName = parts[0]; } else { if (parts.Length == 3) { if (parts[1].Equals("-bm")) { parseMaterial.bumpTextureResourceName = parts[0]; parseMaterial.bumpIntensity = WavefrontParser.parseFloat(parts[2]); } else if (parts[0].Equals("-bm")) { parseMaterial.bumpTextureResourceName = parts[3]; parseMaterial.bumpIntensity = WavefrontParser.parseFloat(parts[1]); } } } break; } next_line: //Read the next line line = sr.ReadLine(); } //close the file sr.Close(); return(materials.ToArray()); }
public SSMD5Parser(SSAssetManager.Context ctx, string filename) { m_ctx = ctx; m_reader = ctx.OpenText(filename); System.Console.WriteLine("Reading a \"doom\" file: " + ctx.fullResourcePath(filename)); }
public static SSSkeletalMeshMD5[] ReadMeshes(SSAssetManager.Context ctx, string filename) { var parser = new SSMD5MeshParser(ctx, filename); return(parser.readMeshes()); }
public SSVertexShader(SSAssetManager.Context context, string filename) : base(ShaderType.VertexShader, filename, context.Open(filename).AsString()) { }
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); }
static public T GetInstance <T>(SSAssetManager.Context context, string filename) { return(s_mgr.getInstance <T>(context, filename)); }
private SSMD5MeshParser(SSAssetManager.Context ctx, string filename) : base(ctx, filename) { }