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); }
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); } }
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; } }