Beispiel #1
0
        public void ParseCommands(IEnumerable<RenderCommand> commandList, MaterialList materialList)
        {
            Clear();

            Vector3 normal = new Vector3(1.0f, 0.0f, 0.0f);
            Vector2 texCoord = new Vector2(0.0f, 0.0f);
            Color4 color = new Color4(1.0f, 1.0f, 1.0f, 1.0f);
            Mesh mesh = null;

            foreach (var cmd in commandList)
            {
                if (cmd.Name == "MATERIAL" && cmd.Params.Count <= 1)
                {
                    if (cmd.Params.Count == 0)
                        mesh = this.GetMeshByMaterialID(string.Empty, true);
                    else if (materialList.ContainsID(cmd.Params[0]))
                    {
                        mesh = this.GetMeshByMaterialID(cmd.Params[0], true);
                    }
                }
                if (cmd.Name == "VERTEX3" && cmd.Params.Count == 3)
                {
                    if (mesh != null)
                        mesh.AddVertex(new MeshVertex() { Position = cmd.Params.ToVector3(), Normal = normal, Color = color, TexCoord = texCoord });
                }
                if (cmd.Name == "NORMAL3" && cmd.Params.Count == 3)
                {
                    normal = cmd.Params.ToVector3();
                }
                if (cmd.Name == "COLOR4" && cmd.Params.Count == 4)
                {
                    color = cmd.Params.ToColor4();
                }
                if (cmd.Name == "TEXCOORD2" && cmd.Params.Count == 2)
                {
                    texCoord = cmd.Params.ToVector2();
                }
                if (cmd.Name == "PLANE" && cmd.Params.Count == 4)
                {
                    if (mesh != null)
                        mesh.AddPlane(cmd.Params[0].ToClearFloat(), cmd.Params[1].ToClearFloat(), cmd.Params[2].ToClearInt(), cmd.Params[3].ToClearInt(), color);
                }
            }
        }