using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Kav { public class MeshPart : IIndexDrawable, IGBufferDrawable, ICullable, IHasVertexPositions { public IndexBuffer IndexBuffer { get; } public VertexBuffer VertexBuffer { get; } public Triangle[] Triangles { get; } public Vector3[] Positions { get; } public BoundingBox BoundingBox { get; } private Texture2D albedoTexture = null; private Texture2D normalTexture = null; private Texture2D metallicRoughnessTexture = null; public Texture2D AlbedoTexture { get { return DisableAlbedoMap ? null : albedoTexture; } set { albedoTexture = value; } } public Texture2D NormalTexture { get { return DisableNormalMap ? null : normalTexture; } set { normalTexture = value; } } public Texture2D MetallicRoughnessTexture { get { return DisableMetallicRoughnessMap ? null : metallicRoughnessTexture; } set { metallicRoughnessTexture = value; } } public Vector3 Albedo { get; set; } = Vector3.One; public float Metallic { get; set; } = 0.5f; public float Roughness { get; set; } = 0.5f; public int NumTextureRows { get; set; } = 1; public int NumTextureColumns { get; set; } = 1; public bool DisableAlbedoMap { get; set; } = false; public bool DisableNormalMap { get; set; } = false; public bool DisableMetallicRoughnessMap { get; set; } = false; public MeshPart( VertexBuffer vertexBuffer, IndexBuffer indexBuffer, Vector3[] positions, Triangle[] triangles ) { VertexBuffer = vertexBuffer; IndexBuffer = indexBuffer; Positions = positions; Triangles = triangles; BoundingBox = BoundingBox.CreateFromPoints(Positions); } } }