Как хранить масштаб, вращение и перемещение объекта?

Пытаюсь реализовать простые операции над объектом, а именно вращение, перемещение, масштабирование. Как я вычитал вначале идет масштабирование, потом вращение и перемещение. Возникает вопрос как хранить данные? в конечной матрице 4х4? Тогда как из матрицы получать перемещение, вращение и масштаб? Если хранить по отдельности масштаб, вращение и положение тогда как двигать объект в локальных координатах?

Пока данные об объекте хранятся в таком в виде:

    public Vector3 Scaling { set; get; } = new Vector3(1, 1, 1);
    public Vector3 Rotation { set; get; } = new Vector3(0, 0, 0);
    public Vector3 Position { set; get; } = new Vector3(0, 0, 0);

а само вычисление матрицы идет так:

        mat4 trans = mat4.Identity;
        trans *= mat4.Scale(new vec3(Scaling.X, Scaling.Y, Scaling.Z));
        trans *= mat4.RotateX(glm.Radians((float)Rotation.X));
        trans *= mat4.RotateY(glm.Radians((float)Rotation.Y));
        trans *= mat4.RotateZ(glm.Radians((float)Rotation.Z));
        trans *= mat4.Translate(new vec3(Position.X, Position.Y, Position.Z));

Из-за чего образуется проблема складывания рамок которую хотелось бы решить и проблема в том как применить локальное движение вперед после применения вращения


Ответы (0 шт):