Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
        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);
        }