public SSTextureWithAlpha(SSAssetManager.Context ctx, string filename)
            : base()
        {
            Bitmap textureBitmap = new Bitmap(ctx.Open(filename));

            loadFromBitmap(textureBitmap, name: filename, hasAlpha: true);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        public SSTexture(SSAssetManager.Context ctx, string filename)
            : this()
        {
            Bitmap textureBitmap = new Bitmap(ctx.Open(filename));

            loadFromBitmap(textureBitmap, name: filename);
        }
Ejemplo n.º 5
0
        public static TypeFace loadTypeFace(SSAssetManager.Context ctx, string filename)
        {
            var      reader      = ctx.OpenText(filename);
            TypeFace newTypeFace = new TypeFace();

            newTypeFace.ReadSVG(reader.ReadToEnd());
            return(newTypeFace);
        }
Ejemplo n.º 6
0
        public static SSSkeletalAnimationMD5 ReadAnimation(SSAssetManager.Context ctx, string filename)
        {
            var parser = new SSMD5AnimParser(ctx, filename);
            var anim   = parser.readAnimation();

            anim.name = filename;
            return(anim);
        }
Ejemplo n.º 7
0
 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));
         }
     }
 }
Ejemplo n.º 8
0
 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;
 }
Ejemplo n.º 9
0
        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);
        }
Ejemplo n.º 10
0
        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);
        }
Ejemplo n.º 11
0
        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));
        }
Ejemplo n.º 12
0
        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());
        }
Ejemplo n.º 13
0
 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));
 }
Ejemplo n.º 14
0
        public static SSSkeletalMeshMD5[] ReadMeshes(SSAssetManager.Context ctx, string filename)
        {
            var parser = new SSMD5MeshParser(ctx, filename);

            return(parser.readMeshes());
        }
Ejemplo n.º 15
0
 public SSVertexShader(SSAssetManager.Context context, string filename)
     : base(ShaderType.VertexShader,
            filename,
            context.Open(filename).AsString())
 {
 }
Ejemplo n.º 16
0
        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);
        }
Ejemplo n.º 17
0
 static public T GetInstance <T>(SSAssetManager.Context context, string filename)
 {
     return(s_mgr.getInstance <T>(context, filename));
 }
Ejemplo n.º 18
0
 private SSMD5MeshParser(SSAssetManager.Context ctx, string filename)
     : base(ctx, filename)
 {
 }