Exemplo n.º 1
0
        private List <T> readVecArray <T>(string id)
        {
            var data = xMesh
                       .Elements($"{ns}source").FirstOrDefault(x => x.Attribute("id").Value == id)
                       .Element($"{ns}float_array");

            var count  = int.Parse(data.Attribute("count").Value);
            var array  = ArrayParsers.ParseFloats(data.Value);
            var result = new List <T>();

            if (typeof(T) == typeof(Vector3))
            {
                for (var i = 0; i < count / 3; i++)
                {
                    result.Add((T)(object)new Vector3(
                                   array[i * 3],
                                   array[i * 3 + 2],
                                   array[i * 3 + 1]
                                   ));
                }
            }
            else if (typeof(T) == typeof(Vector2))
            {
                for (var i = 0; i < count / 2; i++)
                {
                    result.Add((T)(object)new Vector2(
                                   array[i * 2],
                                   array[i * 2 + 1]
                                   ));
                }
            }

            return(result);
        }
Exemplo n.º 2
0
        private void assembleVertices()
        {
            var poly      = xMesh.Element($"{ns}polylist");
            var typeCount = poly.Elements($"{ns}input").Count();
            var id        = ArrayParsers.ParseInts(poly.Element($"{ns}p").Value);

            for (int i = 0; i < id.Count / typeCount; i++)
            {
                var textureIndex = -1;
                var colorIndex   = -1;
                var index        = 0;

                var posIndex    = id[i * typeCount + index]; index++;
                var normalIndex = id[i * typeCount + index]; index++;

                if (Textures != null)
                {
                    textureIndex = id[i * typeCount + index]; index++;
                }

                if (Colors != null)
                {
                    colorIndex = id[i * typeCount + index]; index++;
                }

                processVertex(posIndex, normalIndex, textureIndex, colorIndex);
            }
        }
Exemplo n.º 3
0
        private void setPhong(XElement effect)
        {
            var ambient = effect.Descendants($"{ns}phong")
                          .Descendants($"{ns}color")
                          .FirstOrDefault(x => x.Attribute("sid").Value == "ambient");

            var diffuse = effect.Descendants($"{ns}phong")
                          .Descendants($"{ns}color")
                          .FirstOrDefault(x => x.Attribute("sid").Value == "diffuse");

            var specular = effect.Descendants($"{ns}phong")
                           .Descendants($"{ns}color")
                           .FirstOrDefault(x => x.Attribute("sid").Value == "specular");

            var shininess = effect.Descendants($"{ns}phong")
                            .Descendants($"{ns}float")
                            .FirstOrDefault(x => x.Attribute("sid").Value == "shininess");


            if (ambient != null)
            {
                var aAmbient = ArrayParsers.ParseFloats(ambient.Value);
                material.Ambient = new Vector4(aAmbient[0], aAmbient[1], aAmbient[2], aAmbient[3]);
            }
            else
            {
                material.Ambient = new Vector4(0.0f, 0.0f, 0.0f, 1.0f);
            }

            if (diffuse != null)
            {
                var aDiffuse = ArrayParsers.ParseFloats(diffuse.Value);
                material.Diffuse = new Vector4(aDiffuse[0], aDiffuse[1], aDiffuse[2], aDiffuse[3]);
            }
            else
            {
                material.Diffuse = new Vector4(0.0f, 0.0f, 0.0f, 1.0f);
            }

            if (specular != null)
            {
                var aSpecular = ArrayParsers.ParseFloats(specular.Value);
                material.Specular = new Vector4(aSpecular[0], aSpecular[1], aSpecular[2], aSpecular[3]);
            }
            else
            {
                material.Specular = new Vector4(0.0f, 0.0f, 0.0f, 1.0f);
            }

            if (shininess != null)
            {
                material.Shininess = float.Parse(shininess.Value);
            }
            else
            {
                material.Shininess = 0;
            }
        }