Exemple #1
0
        public MapMesh(MapCompiled map)
        {
            texture = new Texture("Images/wall.png");
            material = new ObjMaterial("Models/wall.mtl").Lookup("wall");
            colorGroups = new List<WallColorGroup>();

            var colorMap = new Dictionary<Color, MeshBuilder<VertexTNP3>>();
            foreach (var wall in map.Walls) {
                MeshBuilder<VertexTNP3> builder;
                if (!colorMap.TryGetValue(wall.Color, out builder)) {
                    builder = new MeshBuilder<VertexTNP3>();
                    colorMap.Add(wall.Color, builder);
                }

                for (int i = 0; i < wall.Verts1.Length-1; i++) makeQuads(wall, builder, i, i+1);
                if (wall.Shape == ShapeData.Closed) makeQuads(wall, builder, wall.Verts1.Length-1, 0);
            }

            foreach (var pair in colorMap) {
                WallColorGroup g;
                g.Color = pair.Key;
                g.Mesh = pair.Value.ToMesh().Compile();
                colorGroups.Add(g);
            }
        }
Exemple #2
0
        public void Load(string path)
        {
            var reader = new StreamReader(path);
            var material = new Material();
            string materialName = null;

            while (true) {
                var line = reader.ReadLine();
                if (line == null) { break; }
                line = line.Trim();

                var parts = line.Split(' ');

                switch (parts[0]) {
                case "newmtl":
                    if (materialName != null) { defs.Add(materialName, material); }
                    materialName = parts[1];
                    material = Material.Default();
                    break;

                case "Ka":
                    material.Ambient.X = Parse.Float(parts[1]);
                    material.Ambient.Y = Parse.Float(parts[2]);
                    material.Ambient.Z = Parse.Float(parts[3]);
                    material.Ambient.W = 1f;
                    break;

                case "Kd":
                    material.Diffuse.X = Parse.Float(parts[1]);
                    material.Diffuse.Y = Parse.Float(parts[2]);
                    material.Diffuse.Z = Parse.Float(parts[3]);
                    material.Diffuse.W = 1f;
                    break;

                case "Ks":
                    material.Specular.X = Parse.Float(parts[1]);
                    material.Specular.Y = Parse.Float(parts[2]);
                    material.Specular.Z = Parse.Float(parts[3]);
                    material.Specular.W = 1f;
                    break;

                case "Ns":
                    material.Shininess = Parse.Float(parts[1]) / 1000f * 128f;
                    break;
                }
            }
            if (materialName != null) { defs.Add(materialName, material); }
        }