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(); }
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); }