/// <summary> /// Creates a new model based upon a <see cref="XMesh"/>, using an external texture and a plain white material. /// </summary> /// <param name="mesh">The <see cref="XMesh"/> providing the mesh data.</param> /// <param name="materials">The materials to use for rendering the model.</param> /// <remarks>Calling <see cref="IDisposable.Dispose"/> will call <see cref="IReferenceCount.ReleaseReference"/> on <paramref name="mesh"/> and <paramref name="materials"/>.</remarks> public Model(XMesh mesh, params XMaterial[] materials) { #region Sanity checks if (mesh == null) { throw new ArgumentNullException(nameof(mesh)); } #endregion _asset = mesh; _asset.HoldReference(); // Get mesh from asset Mesh = mesh.Mesh; // Get separate materials Materials = materials ?? new XMaterial[0]; NumberSubsets = Materials.Length; foreach (var material in Materials) { material.HoldReference(); } _separateMaterials = true; // Get bounding bodies BoundingSphere = mesh.BoundingSphere; BoundingBox = mesh.BoundingBox; }
/// <summary> /// Creates a new model based upon a <see cref="XMesh"/>, using its internal material data if available. /// </summary> /// <param name="mesh">The <see cref="XMesh"/> providing the mesh data.</param> /// <remarks>Calling <see cref="IDisposable.Dispose"/> will not dispose the <paramref name="mesh"/>. This is handled by the <see cref="CacheManager"/>.</remarks> public Model(XMesh mesh) { #region Sanity checks if (mesh == null) { throw new ArgumentNullException(nameof(mesh)); } #endregion _asset = mesh; _asset.HoldReference(); // Get mesh from asset Mesh = mesh.Mesh; // Get materials from asset Materials = mesh.Materials; NumberSubsets = Materials.Length; // Get bounding bodies BoundingSphere = mesh.BoundingSphere; BoundingBox = mesh.BoundingBox; }