public void Transform(Vector3 translation, Vector3 rotation, Vector3 scale)
        {
            if (Transformability.HasFlag(Transformability.Scale) && scale != null)
            {
                Scale(scale);
            }

            if (rotation != null)
            {
                Rotate(rotation);
            }

            if (Transformability.HasFlag(Transformability.Translate) && translation != null)
            {
                TranslateRelative(translation);
            }

            UpdateBounds();

            _position = Aabb.Center;
        }
        protected void Rotate(float pitch, float yaw, float roll)
        {
            if (Transformability.HasFlag(Transformability.Rotate))
            {
                for (int i = 0; i < Vertices.Count; i++)
                {
                    Vertex world   = Vertices[i].ModelToWorld(ModelMatrix);
                    var    rotated = Vertex.Rotate(world, pitch, yaw, roll);
                    Vertices[i] = rotated.WorldToModel(ModelMatrix);
                }

                for (int i = 0; i < Polygons.Count; i++)
                {
                    Polygons[i] = Polygon.Rotate(Polygons[i], pitch, yaw, roll);
                }
            }
            else if (Transformability.HasFlag(Transformability.Translate))
            {
                Position = Position.Rotate(pitch, yaw, roll);
            }

            UpdateBounds();
        }