Beispiel #1
0
 public GLTFImporter(IShaderStore shaderStore, IMeshImporter meshImporter, IMaterialImporter materialImporter, INodeImporter nodeImporter, IAnimationImporter animationImporter)
 {
     _shaderStore       = shaderStore ?? new ShaderStore(this);
     _meshImporter      = meshImporter ?? new MeshImporter();
     _materialImporter  = materialImporter ?? new MaterialImporter(_shaderStore, this);
     _nodeImporter      = nodeImporter ?? new NodeImporter();
     _animationImporter = animationImporter ?? new AnimationImporter();
 }
Beispiel #2
0
        private void SetData(IMeshImporter importer)
        {
            if (importer.MeshData == null)
            {
                return;
            }

            //Base Mesh info ( All meshes need this)
            MeshData = importer.MeshData;



            //Check if the imported data contains animations
            if (importer is IAnimationImporter)
            {
                var animImporter = importer as IAnimationImporter;
                AnimationData = animImporter.AnimationData;
            }

            //Create a skinned Vertex if the loaded data has animations
            if (Animated)
            {
                VertexStride    = Marshal.SizeOf(typeof(SkinnedVertex));
                SkinnedVertices = new List <SkinnedVertex>();
                for (var i = 0; i < MeshData.VertexCount; ++i)
                {
                    var pos         = MeshData.VertexPositions[i];
                    var norm        = MeshData.VertexNormals[i];
                    var blendWeight = AnimationData.BlendWeights[i];
                    var blendIndex  = AnimationData.BlendIndices[i];
                    SkinnedVertices.Add(new SkinnedVertex(pos, Color.Gray, norm, blendIndex, blendWeight));
                }

                //Set up the Animator
                Animator = new Animator(this);
                if (AnimationData.Animations.Count != 0)
                {
                    Animator.SetAnimation(AnimationData.Animations[0].Name);
                    Animator.Play();
                }
            }

            //Create a normal vertex
            else
            {
                VertexStride = Marshal.SizeOf(typeof(VertexPosColNorm));
                Vertices     = new List <VertexPosColNorm>();
                for (var i = 0; i < MeshData.VertexCount; ++i)
                {
                    var pos  = MeshData.VertexPositions[i];
                    var norm = MeshData.VertexNormals[i];
                    Vertices.Add(new VertexPosColNorm(pos, Color.Gray, norm));
                }
            }

            IsLoaded = true;
        }
        /// <summary>
        /// Add a new Importer
        /// </summary>
        private static void AddImporter(ImporterType key, IMeshImporter importer)
        {
            AvailableImporters.Add(key, importer);

            ImporterTypes.Add(key.ToString(), key);
        }