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(); }