public virtual void Render()
        {
            if (!Visible)
            {
                return;
            }

            if (MatrixChanged)
            {
                var matrix = Matrix4.CreateTranslation(Position.X, Position.Y, Position.Z);

                if (Rotation != Vector3.Zero)
                {
                    var r1 = Matrix4.CreateRotationX(Rotation.X);
                    var r2 = Matrix4.CreateRotationY(Rotation.Y);
                    var r3 = Matrix4.CreateRotationZ(Rotation.Z);
                    matrix = r1 * r2 * r3 * matrix;
                }

                if (Scale != Vector3.Zero)
                {
                    var s1 = Matrix4.CreateScale(Scale);
                    matrix = s1 * matrix;
                }

                for (int i = 0; i < vertices.Length; i++)
                {
                    calculated[i] = vertices[i].Apply(matrix, Color);
                }

                MatrixChanged = false;
            }

            MasterRenderer.AddToBatch(calculated);
        }
        public virtual void PushToBatchRenderer()
        {
            if (!Visible)
            {
                return;
            }

            MasterRenderer.AddToBatch(vertices);
        }