public static IReadOnlyList <Mesh> CreateMeshes <TvP, TvM, TvJ>(this ModelRoot root, params Geometry.MeshBuilder <Materials.MaterialBuilder, TvP, TvM, TvJ>[] meshBuilders) where TvP : struct, Geometry.VertexTypes.IVertexPosition where TvM : struct, Geometry.VertexTypes.IVertexMaterial where TvJ : struct, Geometry.VertexTypes.IVertexJoints { return(root.CreateMeshes(mb => root.CreateMaterial(mb), meshBuilders)); }
public static IReadOnlyList <Mesh> CreateMeshes(this ModelRoot root, params IMeshBuilder <Materials.MaterialBuilder>[] meshBuilders) { // until this point, even if the multiple material instances used by the meshes have the same content definition, // we must handling material equality by its object reference and nothing else, because Materials.MaterialBuilder // is a mutable object, and we cannot guarantee two material instances will keep having the same content. // it is at this point where we can coalesce materials with the same content. // TODO: in order to coalesce MaterialBuilder instances with same content // an IMeshBuilder could wrap the incoming mesh, and merge primitives with shared meshes. // MaterialBuilder instances can be grouped by their content, so we use this dictionary // to reduce the number of equal materials. This is specially useful for the default material. var materials = new Dictionary <Materials.MaterialBuilder, Material>(Materials.MaterialBuilder.ContentComparer); Material matFactory(Materials.MaterialBuilder srcMat) { if (materials.TryGetValue(srcMat, out Schema2.Material dstMat)) { return(dstMat); } return(materials[srcMat] = root.CreateMaterial(srcMat)); } return(root.CreateMeshes(matFactory, meshBuilders)); }
public static Mesh CreateMesh <TMaterial, TvP, TvM, TvJ>(this ModelRoot root, Func <TMaterial, Material> materialEvaluator, Geometry.MeshBuilder <TMaterial, TvP, TvM, TvJ> meshBuilder) where TvP : struct, Geometry.VertexTypes.IVertexPosition where TvM : struct, Geometry.VertexTypes.IVertexMaterial where TvJ : struct, Geometry.VertexTypes.IVertexJoints { return(root.CreateMeshes(materialEvaluator, meshBuilder).First()); }
public static Mesh CreateMesh <TvP, TvM, TvJ>(this ModelRoot root, Geometry.MeshBuilder <Materials.MaterialBuilder, TvP, TvM, TvJ> meshBuilder) where TvP : struct, Geometry.VertexTypes.IVertexPosition where TvM : struct, Geometry.VertexTypes.IVertexMaterial where TvJ : struct, Geometry.VertexTypes.IVertexJoints { return(root.CreateMeshes(meshBuilder).First()); }
public static IReadOnlyList <Mesh> CreateMeshes <TvP, TvM, TvS>(this ModelRoot root, params Geometry.MeshBuilder <Material, TvP, TvM, TvS>[] meshBuilders) where TvP : struct, Geometry.VertexTypes.IVertexPosition where TvM : struct, Geometry.VertexTypes.IVertexMaterial where TvS : struct, Geometry.VertexTypes.IVertexSkinning { return(root.CreateMeshes(m => m, meshBuilders)); }
public static Mesh CreateMesh <TvP, TvM, TvS>(this ModelRoot root, Geometry.MeshBuilder <Material, TvP, TvM, TvS> meshBuilder) where TvP : struct, Geometry.VertexTypes.IVertexPosition where TvM : struct, Geometry.VertexTypes.IVertexMaterial where TvS : struct, Geometry.VertexTypes.IVertexSkinning { return(root.CreateMeshes(meshBuilder).First()); }
public static IReadOnlyList <Mesh> CreateMeshes <TMaterial>(this ModelRoot root, Func <TMaterial, Material> materialEvaluator, params IMeshBuilder <TMaterial>[] meshBuilders) { Guard.NotNull(root, nameof(root)); Guard.NotNull(materialEvaluator, nameof(materialEvaluator)); Guard.NotNull(meshBuilders, nameof(meshBuilders)); return(root.CreateMeshes(materialEvaluator, true, meshBuilders)); }
public static IReadOnlyList <Mesh> CreateMeshes <TMaterial>(this ModelRoot root, Converter <TMaterial, Material> materialConverter, params IMeshBuilder <TMaterial>[] meshBuilders) { Guard.NotNull(root, nameof(root)); Guard.NotNull(materialConverter, nameof(materialConverter)); Guard.NotNull(meshBuilders, nameof(meshBuilders)); return(root.CreateMeshes(materialConverter, Scenes.SceneBuilderSchema2Settings.Default, meshBuilders)); }
public static Mesh CreateMesh <TMaterial>(this ModelRoot root, Func <TMaterial, Material> materialEvaluator, IMeshBuilder <TMaterial> mesh) { return(root.CreateMeshes <TMaterial>(materialEvaluator, mesh)[0]); }
public static Mesh CreateMesh(this ModelRoot root, IMeshBuilder <Materials.MaterialBuilder> mesh) { return(root.CreateMeshes(mesh)[0]); }