Exemplo n.º 1
0
        public void ParseMtl(StreamReader data)
        {
            string     parse           = string.Empty;
            WtMaterial CurrentMaterial = null;

            while ((parse = data.ReadLine()) != null)
            {
                int castword = WordsParser.WordIndex(ref parse, 0);

                if (WordsParser.WordCmp(ref parse, castword, WordsParser.WordLen(ref parse, castword), ref Newmtl, 0, 6))
                {
                    WtMaterial gp = new WtMaterial();
                    CurrentMaterial = gp;

                    Materials.Add(CurrentMaterial);
                    castword             = WordsParser.WordNext(ref parse, castword);
                    CurrentMaterial.Name = WordsParser.WordStringValue(ref parse, castword);
                    continue;
                }
                if (WordsParser.WordCmp(ref parse, castword, WordsParser.WordLen(ref parse, castword), ref MapKa, 0, 6))
                {
                    castword = WordsParser.WordNext(ref parse, castword);
                    CurrentMaterial.MapAmbient = WordsParser.WordStringValue(ref parse, castword);
                    continue;
                }
                if (WordsParser.WordCmp(ref parse, castword, WordsParser.WordLen(ref parse, castword), ref MapKs, 0, 6))
                {
                    castword = WordsParser.WordNext(ref parse, castword);
                    CurrentMaterial.MapSpecular = WordsParser.WordStringValue(ref parse, castword);
                    continue;
                }
                if (WordsParser.WordCmp(ref parse, castword, WordsParser.WordLen(ref parse, castword), ref MapKd, 0, 6))
                {
                    castword = WordsParser.WordNext(ref parse, castword);
                    CurrentMaterial.MapDefuse = WordsParser.WordStringValue(ref parse, castword);
                    continue;
                }


                if (WordsParser.WordCmp(ref parse, castword, WordsParser.WordLen(ref parse, castword), ref D, 0, 1))
                {
                    castword = WordsParser.WordNext(ref parse, castword);
                    CurrentMaterial.DefuseAlpha = WordsParser.WordFloatValue(ref parse, castword);
                    continue;
                }


                if (WordsParser.WordCmp(ref parse, castword, WordsParser.WordLen(ref parse, castword), ref Kd, 0, 2))
                {
                    castword = WordsParser.WordNext(ref parse, castword);
                    CurrentMaterial.Defuse.X = WordsParser.WordFloatValue(ref parse, castword);
                    castword = WordsParser.WordNext(ref parse, castword);
                    CurrentMaterial.Defuse.Y = WordsParser.WordFloatValue(ref parse, castword);
                    castword = WordsParser.WordNext(ref parse, castword);
                    CurrentMaterial.Defuse.Z = WordsParser.WordFloatValue(ref parse, castword);
                    continue;
                }
                if (WordsParser.WordCmp(ref parse, castword, WordsParser.WordLen(ref parse, castword), ref Ka, 0, 2))
                {
                    castword = WordsParser.WordNext(ref parse, castword);
                    CurrentMaterial.Ambient.X = WordsParser.WordFloatValue(ref parse, castword);
                    castword = WordsParser.WordNext(ref parse, castword);
                    CurrentMaterial.Ambient.Y = WordsParser.WordFloatValue(ref parse, castword);
                    castword = WordsParser.WordNext(ref parse, castword);
                    CurrentMaterial.Ambient.Z = WordsParser.WordFloatValue(ref parse, castword);
                    continue;
                }
                if (WordsParser.WordCmp(ref parse, castword, WordsParser.WordLen(ref parse, castword), ref Ks, 0, 2))
                {
                    castword = WordsParser.WordNext(ref parse, castword);
                    CurrentMaterial.Specular.X = WordsParser.WordFloatValue(ref parse, castword);
                    castword = WordsParser.WordNext(ref parse, castword);
                    CurrentMaterial.Specular.Y = WordsParser.WordFloatValue(ref parse, castword);
                    castword = WordsParser.WordNext(ref parse, castword);
                    CurrentMaterial.Specular.Z = WordsParser.WordFloatValue(ref parse, castword);
                    continue;
                }
            }
        }
Exemplo n.º 2
0
        public void ParseObj(StreamReader data)
        {
            string  parse        = string.Empty;
            WtGroup CurrentGroup = null;

            while ((parse = data.ReadLine()) != null)
            {
                int castword = WordsParser.WordIndex(ref parse, 0);

                if (WordsParser.WordCmp(ref parse, castword, WordsParser.WordLen(ref parse, castword), ref Usemtl, 0, 6))
                {
                    WtGroup gp = new WtGroup();
                    CurrentGroup = gp;

                    Groups.Add(CurrentGroup);
                    castword = WordsParser.WordNext(ref parse, castword);
                    CurrentGroup.Material = _getMaterialFromName(WordsParser.WordStringValue(ref parse, castword));
                    continue;
                }

                if (WordsParser.WordCmp(ref parse, castword, WordsParser.WordLen(ref parse, castword), ref F, 0, 1))
                {
                    WtFace v;
                    castword = WordsParser.WordNext(ref parse, castword);
                    v.V0     = WordsParser.WordIntValue(ref parse, castword) - 1;
                    castword = WordsParser.WordNext(ref parse, castword);
                    v.VT0    = WordsParser.WordIntValue(ref parse, castword) - 1;
                    castword = WordsParser.WordNext(ref parse, castword);
                    v.VN0    = WordsParser.WordIntValue(ref parse, castword) - 1;



                    castword = WordsParser.WordNext(ref parse, castword);
                    v.V1     = WordsParser.WordIntValue(ref parse, castword) - 1;
                    castword = WordsParser.WordNext(ref parse, castword);
                    v.VT1    = WordsParser.WordIntValue(ref parse, castword) - 1;
                    castword = WordsParser.WordNext(ref parse, castword);
                    v.VN1    = WordsParser.WordIntValue(ref parse, castword) - 1;

                    castword = WordsParser.WordNext(ref parse, castword);
                    v.V2     = WordsParser.WordIntValue(ref parse, castword) - 1;
                    castword = WordsParser.WordNext(ref parse, castword);
                    v.VT2    = WordsParser.WordIntValue(ref parse, castword) - 1;
                    castword = WordsParser.WordNext(ref parse, castword);
                    v.VN2    = WordsParser.WordIntValue(ref parse, castword) - 1;


                    //Console.WriteLine("f {0}/{1}/{2} {3}/{4}/{5} {6}/{7}/{8}", v.V0, v.VN0, v.VT0, v.V1, v.VN1,v.VT1, v.V2, v.VN2, v.VT2);
                    CurrentGroup.Faces.Add(v);

                    continue;
                }


                if (WordsParser.WordCmp(ref parse, castword, WordsParser.WordLen(ref parse, castword), ref Vn, 0, 2))
                {
                    WtVector3 v;
                    castword = WordsParser.WordNext(ref parse, castword);
                    v.X      = WordsParser.WordFloatValue(ref parse, castword);
                    castword = WordsParser.WordNext(ref parse, castword);
                    v.Y      = WordsParser.WordFloatValue(ref parse, castword);
                    castword = WordsParser.WordNext(ref parse, castword);
                    v.Z      = WordsParser.WordFloatValue(ref parse, castword);
                    //Console.WriteLine("VN {0}, {1}, {2}", v.X, v.Y, v.Z);
                    Normals.Add(v);

                    continue;
                }

                if (WordsParser.WordCmp(ref parse, castword, WordsParser.WordLen(ref parse, castword), ref Vt, 0, 2))
                {
                    WtVector2 v;
                    castword = WordsParser.WordNext(ref parse, castword);
                    v.X      = WordsParser.WordFloatValue(ref parse, castword);
                    castword = WordsParser.WordNext(ref parse, castword);
                    v.Y      = WordsParser.WordFloatValue(ref parse, castword);
                    //Console.WriteLine("VT {0}, {1}", v.X, v.Y);
                    TextureCoords.Add(v);

                    continue;
                }


                if (WordsParser.WordCmp(ref parse, castword, WordsParser.WordLen(ref parse, castword), ref V, 0, 1))
                {
                    WtVector3 v;
                    castword = WordsParser.WordNext(ref parse, castword);
                    v.X      = WordsParser.WordFloatValue(ref parse, castword);
                    castword = WordsParser.WordNext(ref parse, castword);
                    v.Y      = WordsParser.WordFloatValue(ref parse, castword);
                    castword = WordsParser.WordNext(ref parse, castword);
                    v.Z      = WordsParser.WordFloatValue(ref parse, castword);
                    //Console.WriteLine("V {0}, {1}, {2}",v.X,v.Y, v.Z);
                    Vertexes.Add(v);

                    continue;
                }
            }
        }
Exemplo n.º 3
0
 /// <summary>
 /// Даёт сдедующие слово после указанного
 /// </summary>
 /// <param name="parse"></param>
 /// <param name="wordIndex"></param>
 /// <returns></returns>
 // [MethodImpl(MethodImplOptions.AggressiveInlining)]
 public static int WordNext(ref string parse, int wordIndex)
 {
     return(WordsParser.WordIndex(ref parse, wordIndex + WordsParser.WordLen(ref parse, wordIndex)));
 }