예제 #1
0
            public MaterialLibrary(FileExisting file)
            {
                using (var s = file.OpenReadWrite())
                    using (StreamReader textReader = new StreamReader(s))
                    {
                        MaterialPBR lastMat = new MaterialPBR();
                        string      line;
                        while ((line = textReader.ReadLine()) != null)
                        {
                            line = line.Trim();
                            line = line.Replace("  ", " ");

                            string[] parameters = line.Split(splitCharacters);

                            /*
                             *      Ka 1.000 1.000 1.000
                             * Kd 1.000 1.000 1.000
                             * Ks 0.000 0.000 0.000
                             * d 1.0
                             * illum 2
                             * map_Ka lenna.tga           # the ambient texture map
                             * map_Kd lenna.tga           # the diffuse texture map (most of the time, it will
                             # be the same as the ambient texture map)
                             # map_Ks lenna.tga           # specular color texture map
                             # map_Ns lenna_spec.tga      # specular highlight component
                             # map_d lenna_alpha.tga      # the alpha texture map
                             # map_bump lenna_bump.tga    # some implementations use 'map_bump' instead of 'bump' below
                             * */

                            switch (parameters[0])
                            {
                            case "newmtl":
                                lastMat = new MaterialPBR();
                                materials[parameters[1]] = lastMat;
                                break;

                            case "Kd":                             // diffuse
                                if (parameters.Length > 2)
                                {
                                    Parse(ref parameters[1], ref lastMat.albedo.X);
                                    Parse(ref parameters[2], ref lastMat.albedo.Y);
                                    Parse(ref parameters[3], ref lastMat.albedo.Z);
                                }
                                else
                                {
                                    float r = 1;
                                    Parse(ref parameters[1], ref r);
                                    lastMat.albedo.X = lastMat.albedo.Y = lastMat.albedo.Z = r;
                                }
                                break;

                            case "map_Kd":
                                lastMat.albedoTexture = new Texture2D(FileSystem.FindFile(parameters[1], file.Folder));
                                break;
                            }
                        }

                        textReader.Close();
                    }
            }
예제 #2
0
 void LoadLocalCopy()
 {
     using (var s = file.OpenReadWrite())
         bmp = new Bitmap(s);
 }
예제 #3
0
        void TryReadConfig()
        {
            doSaveNewCvars = false;

            var configFile = file.OpenReadWrite();

            if (!configFile.CanRead)
            {
                Log.Fatal("can not read config file");
                return;
            }

            configFile.Position = 0;
            var reader  = new StreamReader(configFile, Encoding.UTF8);
            var allText = reader.ReadToEnd();

            reader.Close();

            var textLines = allText.Split(new char[] { '\r' });

            saveData.Clear();

            int lineNumber = 0;

            foreach (var _line in textLines)
            {
                lineNumber++;

                CVar   cvar        = null;
                string dataPart    = _line.Trim();
                string commentPart = "";

                var commentIndex = dataPart.IndexOfAny(new char[] { '#' });   // ab#c // # is comment
                if (commentIndex != -1)                                       // 2
                {
                    commentPart = dataPart.Trim().Substring(commentIndex);    // #c
                    dataPart    = dataPart.Trim().Substring(0, commentIndex); // ab
                }

                if (dataPart.IsNullOrEmptyOrWhiteSpace() == false)
                {
                    var dataParts = dataPart.Split(new char[] { '=' });
                    if (dataParts.Length < 2)
                    {
                        Log.Error("found badly formatted data on line " + lineNumber + " '" + dataPart + "'");
                        continue;
                    }

                    var name = dataParts[0].Trim();
                    cvar = GetCVar(name);

                    bool             typedBoolValue;
                    float            typedFloatValue;
                    OpenTK.Input.Key keyTyped;

                    var value = dataParts[1].Trim();
                    if (value == "not set")
                    {
                        cvar.ValueType = CvarValueType.NotSet;
                    }
                    else if (float.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, out typedFloatValue))
                    {
                        cvar.Number = typedFloatValue;
                    }
                    else if (bool.TryParse(value, out typedBoolValue))
                    {
                        cvar.Bool = typedBoolValue;
                    }

                    if (dataParts.Length > 2)
                    {
                        var toggleKey = dataParts[2].Trim();
                        if (Enum.TryParse <OpenTK.Input.Key>(toggleKey, true, out keyTyped))
                        {
                            cvar.ToogledByKey(keyTyped);
                        }
                        else
                        {
                            Log.Warn("invalid toggle key for cvar: " + toggleKey);
                        }
                    }

                    Log.Info("loaded cvar: '" + ToSaveString(cvar) + "' from line: '" + dataPart + "'");
                }

                saveData.Add(new LineHolder()
                {
                    associatedCvar = cvar, commentPart = commentPart, dataPart = dataPart
                });
            }

            doSaveNewCvars = true;
        }
예제 #4
0
 void Prepend(FileExisting name)
 {
     using (var fs = new System.IO.StreamReader(name.OpenReadWrite()))
         prependSource += fs.ReadToEnd();
 }
예제 #5
0
            public Mesh Parse()
            {
                using (StreamReader textReader = new StreamReader(file.OpenReadWrite()))
                {
                    int i1, i2, i3, i4;

                    string line;
                    while ((line = textReader.ReadLine()) != null)
                    {
                        line = line.Trim();
                        if (line.StartsWith("#"))
                        {
                            continue;
                        }
                        line = line.Replace("  ", " ");

                        string[] parameters = line.Split(splitCharacters);

                        switch (parameters[0])
                        {
                        case "p":                                 // Point
                            break;

                        case "v":                                 // Vertex
                            var v = Vector3.Zero;
                            Parse(ref parameters[1], ref v.X);
                            Parse(ref parameters[2], ref v.Y);
                            Parse(ref parameters[3], ref v.Z);
                            verticesObj.Add(v);
                            break;

                        case "vt":                                 // TexCoord
                            gotUvs = true;
                            var vt = Vector2.Zero;
                            Parse(ref parameters[1], ref vt.X);
                            Parse(ref parameters[2], ref vt.Y);
                            uvsObj.Add(vt);
                            break;

                        case "vn":                                 // Normal
                            gotNormal = true;
                            var vn = Vector3.Zero;
                            Parse(ref parameters[1], ref vn.X);
                            Parse(ref parameters[2], ref vn.Y);
                            Parse(ref parameters[3], ref vn.Z);
                            normalsObj.Add(vn);
                            break;

                        case "f":
                            switch (parameters.Length)
                            {
                            case 4:
                                i1 = ParseFaceParameter(parameters[1]);
                                i2 = ParseFaceParameter(parameters[2]);
                                i3 = ParseFaceParameter(parameters[3]);
                                triangleIndiciesMesh.Add(i1);
                                triangleIndiciesMesh.Add(i2);
                                triangleIndiciesMesh.Add(i3);
                                break;

                            case 5:
                                i1 = ParseFaceParameter(parameters[1]);
                                i2 = ParseFaceParameter(parameters[2]);
                                i3 = ParseFaceParameter(parameters[3]);
                                i4 = ParseFaceParameter(parameters[4]);
                                triangleIndiciesMesh.Add(i1);
                                triangleIndiciesMesh.Add(i2);
                                triangleIndiciesMesh.Add(i3);
                                triangleIndiciesMesh.Add(i1);
                                triangleIndiciesMesh.Add(i3);
                                triangleIndiciesMesh.Add(i4);
                                break;
                            }
                            break;

                        case "mtllib":
                            if (FileSystem.FileExists(parameters[1], file.Folder))
                            {
                                materialLibrary = new MaterialLibrary(FileSystem.FindFile(parameters[1], file.Folder));
                            }
                            break;

                        case "usemtl":
                            if (parameters[1] == "(null)")
                            {
                                continue;
                            }
                            if (materialLibrary != null)
                            {
                                lastMaterial = materialLibrary.GetMat(parameters[1]);
                            }
                            break;
                        }
                    }

                    textReader.Close();
                }

                if (appendToEntity != null)
                {
                    return(EndObjPart(appendToEntity));
                }

                Log.Info("loaded, vertices:" + verticesMesh.Count + " faces:" + triangleIndiciesMesh.Count / 3);

                return(EndMesh());
            }