private void BuildIndices()
        {
            var geometry = new Geometry <VertexPositionNormalTexture>();

            geometry.AddVertices(ModelVertices.ToArray());
            ModelIndices.AddRange(geometry.Indices);
        }
        protected void Setup()
        {
            if (!ModelIndices.Any())
            {
                BuildIndices();
            }

            if (Entity is EntityFloorInfo && Entity.TextureIndexList == null)
            {
                Entity.TextureIndexList = new[] { 0, 0 }
            }
            ;
            else if (Entity.TextureIndexList == null)
            {
                return;
            }


            var triangles = ModelVertices.Count / 3;

            // if TextureIndex list is smaller than the triangle count, fill them with 0
            if (Entity.TextureIndexList.Length < triangles)
            {
                var newTextureIndexList = new int[triangles];
                for (var i = 0; i < Entity.TextureIndexList.Length; i++)
                {
                    newTextureIndexList[i] = Entity.TextureIndexList[i];
                }
                for (var i = Entity.TextureIndexList.Length; i < newTextureIndexList.Length; i++)
                {
                    newTextureIndexList[i] = 0;
                }
                Entity.TextureIndexList = newTextureIndexList;
            }

            for (var i = 0; i < triangles; i++)
            {
                var indexValue = Entity.TextureIndexList[i];
                if (indexValue == -1 || !Entity.Visible)
                {
                    continue;
                }

                ModelTriangles.Add(new ModelTriangle(this, i * 3));
            }

            BuildBoundingBox();
        }