Beispiel #1
0
        private static void BuildMesh(D3D10.Device d, string meshArgs)
        {
            string name = meshArgs.Split(',')[0];

            InputElement[] layout = (InputElement[])typeof(MeshInputElements10).GetField(meshArgs.Split(',')[1]).GetValue(typeof(MeshInputElements10));


            string fileName = ConfigurationSettings.AppSettings["ExportsFolder"] + name;

            AssimpImporter importer  = new AssimpImporter();
            LogStream      logstream = new LogStream(delegate(String msg, String userData) {
                Console.WriteLine(msg);
            });

            importer.AttachLogStream(logstream);

            importer.Scale                 = 0;
            importer.XAxisRotation         = 0;
            importer.YAxisRotation         = 0;
            importer.ZAxisRotation         = 0;
            importer.VerboseLoggingEnabled = true;
            importer.RemoveConfigs();

            Scene model = importer.ImportFile(fileName,
                                              PostProcessSteps.CalculateTangentSpace      // calculate tangents and bitangents if possible
                                              | PostProcessSteps.JoinIdenticalVertices    // join identical vertices/ optimize indexing CAUSES A PROBLEM
                                                                                          //| PostProcessSteps.ValidateDataStructure // perform a full validation of the loader's output
                                              | PostProcessSteps.ImproveCacheLocality     // improve the cache locality of the output vertices
                                              | PostProcessSteps.RemoveRedundantMaterials // remove redundant materials
                                                                                          //| PostProcessSteps.FindDegenerates // remove degenerated polygons from the import CAUSES A PROBLEM
                                                                                          //| PostProcessSteps.FindInvalidData // detect invalid model data, such as invalid normal vectors
                                              | PostProcessSteps.GenerateUVCoords         // convert spherical, cylindrical, box and planar mapping to proper UVs
                                              | PostProcessSteps.TransformUVCoords        // preprocess UV transformations (scaling, translation ...)
                                                                                          //| PostProcessSteps.FindInstances // search for instanced meshes and remove them by references to one master
                                                                                          //| PostProcessSteps.LimitBoneWeights // limit bone weights to 4 per vertex
                                              | PostProcessSteps.OptimizeMeshes           // join small meshes, if possible;
                                              | PostProcessSteps.GenerateSmoothNormals    // generate smooth normal vectors if not existing
                                              | PostProcessSteps.Triangulate              // triangulate polygons with more than 3 edges
                                              | PostProcessSteps.SortByPrimitiveType      // make 'clean' meshes which consist of a single typ of primitives
                                              | PostProcessSteps.FlipUVs                  // common DirectX issue (Xna also)
                                              | PostProcessSteps.FixInFacingNormals
                                              | PostProcessSteps.MakeLeftHanded
                                              | PostProcessSteps.FlipWindingOrder
                                              );


            MeshHelper.BuildMeshTextures(d, model);



            Mesh3D m = MeshHelper.LoadFromFile(d, model, layout);

            importer.Dispose();


            Stream          stream     = File.Open(ConfigurationSettings.AppSettings["ExportsFolder"] + name.Replace(".X", ".mesh"), FileMode.Create);
            BinaryFormatter bFormatter = new BinaryFormatter();

            if (m != null)
            {
                bFormatter.Serialize(stream, m);
            }
            stream.Close();
        }
        public void TestImportFromFile()
        {
            String path = Path.Combine(TestHelper.RootPath, "TestFiles\\sphere.obj");

            AssimpImporter importer = new AssimpImporter();

            importer.SetConfig(new NormalSmoothingAngleConfig(55.0f));
            importer.Scale = .5f;
            importer.XAxisRotation = 25.0f;
            importer.YAxisRotation = 50.0f;
            importer.VerboseLoggingEnabled = true;

            Assert.IsTrue(importer.ContainsConfig(NormalSmoothingAngleConfig.NormalSmoothingAngleConfigName));

            importer.RemoveConfigs();

            Assert.IsFalse(importer.ContainsConfig(NormalSmoothingAngleConfig.NormalSmoothingAngleConfigName));

            importer.SetConfig(new NormalSmoothingAngleConfig(65.0f));
            importer.SetConfig(new NormalSmoothingAngleConfig(22.5f));
            importer.RemoveConfig(NormalSmoothingAngleConfig.NormalSmoothingAngleConfigName);

            Assert.IsFalse(importer.ContainsConfig(NormalSmoothingAngleConfig.NormalSmoothingAngleConfigName));

            importer.SetConfig(new NormalSmoothingAngleConfig(65.0f));

            Scene scene = importer.ImportFile(path, PostProcessPreset.TargetRealTimeMaximumQuality);

            Assert.IsNotNull(scene);
            Assert.IsTrue((scene.SceneFlags & SceneFlags.Incomplete) != SceneFlags.Incomplete);
        }