private void readPolygons(StreamTokenizer lex, Scene scene, List<Vector> vertices, Material shapeMaterial, Matrix shapeMatrix)
        {
            int startLevel = lex.BracketLevel;
            while (!lex.EndOfStream)
            {
                double i1 = 0;
                if (lex.TryReadDouble(out i1))
                {
                    // read polyline till -1
                    double iPreLast = lex.ReadDouble();
                    double iLast = lex.ReadDouble();
                    while (iLast != -1)
                    {
                        scene.addObject(new Triangle(shapeMaterial,
                        shapeMatrix * vertices[(int)i1],
                        shapeMatrix * vertices[(int)iPreLast],
                        shapeMatrix * vertices[(int)iLast]));

                        iPreLast = iLast;
                        iLast = lex.ReadDouble();
                    }
                }

                if (lex.BracketLevel <= startLevel)
                    return;
            }
        }
        private List<Vector> readShapeVertices(StreamTokenizer lex)
        {
            List<Vector> result = new List<Vector>(200);

            int startLevel = lex.BracketLevel;
            while (!lex.EndOfStream)
            {
                double x = 0;
                if (lex.TryReadDouble(out x))
                {
                    // more vertices available
                    double y = lex.ReadDouble();
                    double z = lex.ReadDouble();
                    result.Add(new Vector(x, y, z));
                }
                else
                {
                    int a = 5;
                    int b = a;
                }

                if (lex.BracketLevel <= startLevel)
                    break;
            }
            return result;
        }