Exemplo n.º 1
0
        private Submesh3D ImportSubmesh(FbxSubmesh meshAttribute, FbxNode node)
        {
            var sm = new Submesh3D {
                Mesh = new Mesh <Mesh3D.Vertex> {
                    Vertices           = meshAttribute.Vertices,
                    Indices            = meshAttribute.Indices.Select(index => checked ((ushort)index)).ToArray(),
                    AttributeLocations = new[] {
                        ShaderPrograms.Attributes.Pos1,
                        ShaderPrograms.Attributes.Color1,
                        ShaderPrograms.Attributes.UV1,
                        ShaderPrograms.Attributes.BlendIndices,
                        ShaderPrograms.Attributes.BlendWeights,
                        ShaderPrograms.Attributes.Normal,
                        ShaderPrograms.Attributes.Tangent
                    }
                },
                Material = meshAttribute.MaterialIndex != -1 && node.Materials != null
                                        ? GetOrCreateLimeMaterial(node.Materials[meshAttribute.MaterialIndex])
                                        : FbxMaterial.Default
            };

            MeshUtils.RemoveDuplicates(sm.Mesh);
            if (meshAttribute.Bones.Length > 0)
            {
                foreach (var bone in meshAttribute.Bones)
                {
                    sm.BoneNames.Add(bone.Name);
                    sm.BoneBindPoses.Add(bone.Offset);
                }
            }
            return(sm);
        }
Exemplo n.º 2
0
        private Submesh3D ImportSubmesh(FbxSubmesh meshAttribute, FbxImporter.FbxNode node)
        {
            var sm = new Submesh3D();

            sm.Mesh = new Mesh <Mesh3D.Vertex> {
                Vertices           = meshAttribute.Vertices,
                Indices            = meshAttribute.Indices.Select(index => checked ((ushort)index)).ToArray(),
                AttributeLocations = new[] {
                    ShaderPrograms.Attributes.Pos1,
                    ShaderPrograms.Attributes.Color1,
                    ShaderPrograms.Attributes.UV1,
                    ShaderPrograms.Attributes.BlendIndices,
                    ShaderPrograms.Attributes.BlendWeights,
                    ShaderPrograms.Attributes.Normal
                }
            };

            sm.Material = meshAttribute.MaterialIndex != -1 ?
                          CreateLimeMaterial(node.Materials[meshAttribute.MaterialIndex], path, target) : FbxMaterial.Default;

            if (meshAttribute.Bones.Length > 0)
            {
                foreach (var bone in meshAttribute.Bones)
                {
                    sm.BoneNames.Add(bone.Name);
                    sm.BoneBindPoses.Add(bone.Offset);
                }
            }
            return(sm);
        }
Exemplo n.º 3
0
        private static void ReplaceRenderTexturesInSubmesh(Submesh3D submesh)
        {
            // RenderTexture can't be serialized
            var cm = submesh.Material as CommonMaterial;

            if (cm?.DiffuseTexture is RenderTexture)
            {
                cm.DiffuseTexture = new SerializableTexture();
            }
        }
Exemplo n.º 4
0
        private Submesh3D ImportSubmesh(Submesh meshAttribute, FbxImporter.Node node)
        {
            var sm = new Submesh3D();

            sm.Mesh = new Mesh {
                VertexBuffers = new[] {
                    new VertexBuffer <Mesh3D.Vertex> {
                        Data = meshAttribute.Vertices,
                    },
                },
                IndexBuffer = new IndexBuffer {
                    Data = meshAttribute.Indices.Select(index => checked ((ushort)index)).ToArray()
                },
                Attributes = new[] { new[] {
                                         ShaderPrograms.Attributes.Pos1,
                                         ShaderPrograms.Attributes.Color1,
                                         ShaderPrograms.Attributes.UV1,
                                         ShaderPrograms.Attributes.BlendIndices,
                                         ShaderPrograms.Attributes.BlendWeights,
                                         ShaderPrograms.Attributes.Normal
                                     } }
            };

            sm.Material = meshAttribute.MaterialIndex != -1 ?
                          node.Materials[meshAttribute.MaterialIndex].ToLime(path) : Material.Default;

            if (meshAttribute.Bones.Length > 0)
            {
                foreach (var bone in meshAttribute.Bones)
                {
                    sm.BoneNames.Add(bone.Name);
                    sm.BoneBindPoses.Add(bone.Offset);
                }
            }
            return(sm);
        }