Всегда ли происходит вращение вокруг начала координат (0,0,0)?
Действительно, так оно и есть.
Всегда ли перевод происходит относительнок предыдущему переводу?
Увеличивает ли масштаб размер осей координат?
Это требует некоторого объяснения: OpenGL и многие другие программы, работающие с данными геометрии, не создают списокцепные преобразования.Они поддерживают одну однородную матрицу преобразования.
«Добавление» преобразования выполняется путем умножения текущей матрицы преобразования на матрицу преобразования, описывающую «следующее» преобразование, заменяя старое преобразование,Это также означает, что составная матрица преобразования, например, то, что в итоге получается в представлении модели OpenGL, также может применяться в качестве преобразования.
Короче говоря, все зависит от применяемого преобразования.Старый OpenGL дает вам некоторые основные матричные манипуляции.В OpenGL-3 они были удалены, потому что OpenGL не математическая библиотека, а рисует вещи.
Так как же выглядит такая матрица преобразования?Например:
Xx Yx Zx Tx
Xy Yy Zy Ty
Xz Yz Zz Tz
_x _y _z w
Возможно, вы заметили, что есть 3 основных столбца, обозначенных заглавными буквами X, Y, Z. Эти столбцы образуют векторы.А в случае трехмерных преобразований это векторы base системы координат относительно того, к которому применяется преобразование.Однако векторы дают только «направления» и длину.Так что также необходима относительная точка начала новой системы координат, и это то, что содержит вектор Т.
Большую часть времени _x = _y = _z = 0 и w = 1
Преобразование геометрической точки происходит путем умножения вектора точек на матрицу.Пусть такая матрица будет M, точка p, тогда
p' = M * p
Теперь предположим, что мы преобразовываем цепочки:
p'' = M' * p' = M' * M * p
Мы можем подставить M_ = M' * M
, поэтому
p'' = M_ * p
Легко видеть, что мы можем связать это сколь угодно долго
Чтобы ответить на два ваших последних вопроса: Преобразования (не только переводы) сделать цепочку .И да, применение масштабирующего преобразования «масштабирует» оси.
И чтобы устранить некоторые общие недоразумения: OpenGL - это не граф сцены, он не имеет дело с «объектами», а просто списками геометрии.glScale, glTranslate, glRotate не преобразуют объекты, а «объединяют» операции преобразования.