private void ProcessNode(ImpSceneNode Node, ImpScene Scene) { foreach (var MeshIndex in Node.Meshes) { var Mesh = ProcessMesh(Scene.Meshes[MeshIndex], Scene); if (Mesh != null) { Meshes_.Add(Mesh); } } foreach (var Child in Node.Children) { ProcessNode(Child, Scene); } }
private Mesh ProcessMesh(ImpMesh Mesh, ImpScene Scene) { var Vertices = new List <float>(); var Indices = new List <int>(); var Textures = new List <Texture>(); foreach (var Vert in Mesh.Vertices) { Vertices.Add(Vert.Position.X); Vertices.Add(Vert.Position.Y); Vertices.Add(Vert.Position.Z); Vertices.Add(Vert.TexCoord.X); Vertices.Add(Vert.TexCoord.Y); Vertices.Add(Vert.Normal.X); Vertices.Add(Vert.Normal.Y); Vertices.Add(Vert.Normal.Z); } foreach (var Face in Mesh.Faces) { Indices.AddRange(Face.Indices); } if (Mesh.MaterialIndex != -1) { var Material = Scene.Materials[Mesh.MaterialIndex]; var Diffuses = LoadMaterialTextures(Material.Diffuses, "texture_diffuse"); Textures.AddRange(Diffuses); var Speculars = LoadMaterialTextures(Material.Speculars, "texture_specular"); Textures.AddRange(Speculars); var Normals = LoadMaterialTextures(Material.Normals, "texture_normal"); Textures.AddRange(Normals); } if (Textures.Count == 0) { return(null); } var Me = new Mesh(Vertices.ToArray(), Indices.ToArray(), Textures.ToArray()); Me.Name = Mesh.Name; return(Me); }