Матрицы преобразования устанавливают свойства

0

Я хочу написать класс Custom Matrix, который позволит мне делать следующие вещи:

Matrix m = Matrix().identity();
m.rotateAngle(30);
m.scale(2.0);
m.scale(1.5);
m.rotateAngle(30);

Все вышеперечисленные операции ясны для меня, но теперь я хочу, чтобы это было так: я хочу написать такую функцию, как setRotationAngle или setScale, которая установит значение, которое прошло независимо от текущего значения

// for example:
m.setAngle(45); // clears the currentRotationAngle and then sets rotation to 45

Есть ли способ сделать это? или игровые моторы, и такие вещи просто перестраивают матрицу, если кто-то хочет установить какое-то свойство?

Есть ли какой-то учебник, который поможет мне понять эту проблему?

Теги:
opengl
graphics
linear-algebra

1 ответ

2

Я думаю, что вы действительно не понимаете, как работают матрицы преобразования и как они состоят. Возможно, я ошибаюсь, но если вы спросите об этом, я подозреваю, что это так.

Вы должны спросить себя: как бы я ответил на это (это о 2D)?

Рассмотрим квадрат в начале координат.
Повернуть с 4 градусами.
Переведите его (4,4).
Установите поворот на 10 градусов.

Что бы вы сделали на шаге, выделенном жирным шрифтом? Для меня это совершенно не имеет смысла.

Итак, я думаю, вам придется перестроить матрицу. Подумайте об использовании стека матриц, к которому вы можете нажать матрицы, к которым вы хотите вернуться позже, отбросив их.

  • 0
    Вы не можете делать push и pop, потому что у меня есть только одна матрица преобразования для каждого объекта: Class Triangle {Matrix translation; ...}; и я делаю все операции с этой матрицей ..
  • 1
    @ user1268492: Хорошо, тогда реализуй стек. Это не так сложно, просто связанный список / очередь, где вы нажимаете на копии текущего состояния, когда вы, ну, нажимаете его. И всплывающее окно восстанавливает текущее состояние с верхним элементом списка, удаляя его.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню