예제 #1
0
        /// <summary>
        /// Executes the post processing step on the given imported data.
        /// </summary>
        public void Execute(Scene scene)
        {
            // Check for an existent root node to proceed
            Debug.Assert(scene.RootNode != null);

            // recursively convert all the nodes
            ProcessNode(scene.RootNode, Matrix.Identity);

            // process the meshes accordingly
            foreach (var mesh in scene.Meshes)
            {
                ProcessMesh(mesh);
            }

            // process the materials accordingly
            foreach (var mat in scene.Materials)
            {
                ProcessMaterial(mat);
            }

            // transform all animation channels as well
            foreach (var anim in scene.Animations)
            {
                foreach (var nodeAnim in anim.Channels)
                {
                    ProcessAnimation(nodeAnim);
                }
            }
        }
예제 #2
0
 public static List<FbxMesh> Load(string path, Device device, out Scene scene)
 {
     byte[] input;
     using (var stream = new FileStream(path, FileMode.Open))
     {
         input = new byte[stream.Length];
         stream.Read(input, 0, (int)stream.Length);
     }
     bool isBinary = false;
     List<Token> tokens;
     if (Encoding.ASCII.GetString(input, 0, 18) == "Kaydara FBX Binary")
     {
         isBinary = true;
         BinaryTokenizer.TokenizeBinary(out tokens, input, input.Length);
     }
     else
     {
         Tokenizer.Tokenize(out tokens, input);
     }
     var parser = new Parser(tokens, isBinary);
     var settings = ImporterSettings.Default;
     var doc = new Document(parser, settings);
     FbxConverter.ConvertToScene(out scene, doc);
     var result = new List<FbxMesh>();
     foreach (var assimpMesh in scene.Meshes)
     {
         var mat = scene.Materials[assimpMesh.MaterialIndex];
         var fbxMesh = new FbxMesh(assimpMesh, mat, device, path);
         result.Add(fbxMesh);
     }
     return result;
 }
예제 #3
0
 public void Execute(Scene scene)
 {
     foreach (var mesh in scene.Meshes)
     {
         ProcessMesh(mesh);
     }
 }
예제 #4
0
 public void SetUp()
 {
     var assimpNetimporter = new Assimp.AssimpContext();
     Assimp.LogStream.IsVerboseLoggingEnabled = true;
     var logger = new Assimp.ConsoleLogStream();
     logger.Attach();
     assimpNetScene = assimpNetimporter.ImportFile(filename);
     logger.Detach();
     var assimpSharpImporter = new AssimpSharp.XFile.XFileImporter();
     assimpSharpScene = new AssimpSharp.Scene();
     assimpSharpImporter.InternReadFile(filename, assimpSharpScene);
 }
예제 #5
0
 public void Execute(Scene scene)
 {
 }