Упростить создание матрицы преобразования цепными операциями
TransformBuilder
, который упрощает создание матрицы преобразования цепными операциями.
Предположим, есть экземпляр TransformBuilder
Тб, И цепные операции:
Python
import aspose.threed as a3d
# Change the (x, y, z) into (x + 1, y, z)
tb = a3d.utilities.TransformBuilder(a3d.utilities.ComposeOrder.APPEND)
a = tb.translate(1, 0, 0)
# Rotate alone with the Y axis with 180 deg will change the (x, y, z) into (-x, y, -z)
.rotate_euler_degree(0, 180, 0)
# Scale by 2 will change the (x, y, z) into (2x, 2y, 2z)
.scale(2)
# change the (x, y, z) into (z, y, x)
.rearrange(a3d.Axis.Z_AXIS, a3d.Axis.Y_AXIS, a3d.Axis.X_AXIS)
.matrix
Если порядок составления этого экземпляра-Prepend, конечная матрица вычисляется слева направо, что означает, что последняя матрица преобразования выполнит эти задачи:
- Измените (x, y, z) на (x 1, y, z)
- Поворот отдельно с осью Y с 180deg изменит (x, y, z) на (-x, y, -z)
- Масштаб на 2 изменит (x, y, z) на (2x, 2y, 2z)
- Измените (x, y, z) на (z, y, x)
Но если порядок сочинения-Append, порядок будет изменен так:
- Измените (x, y, z) на (z, y, x)
- Масштаб на 2 изменит (x, y, z) на (2x, 2y, 2z)
- Поворот отдельно с осью Y с 180deg изменит (x, y, z) на (-x, y, -z)
- Измените (x, y, z) на (x 1, y, z)
Python
import aspose.threed as a3d
# use prepend order so the calculation is performed from left to right:
m = (a3d.utilities.TransformBuilder(a3d.utilities.ComposeOrder.PREPEND))
# Change the (x, y, z) into (x + 1, y, z)
.translate(1, 0, 0)
# Rotate alone with the Y axis with 180deg will change the (x, y, z) into (-x, y, -z)
.rotate_euler_degree(0, 180, 0)
# Scale by 2 will change the (x, y, z) into (2x, 2y, 2z)
.scale(2)
# change the (x, y, z) into (z, y, x)
.rearrange(a3d.Axis.Z_AXIS, a3d.Axis.Y_AXIS, a3d.Axis.X_AXIS)
.matrix
# Apply this matrix on a (0, 0, 0) vector, then we get the right result (0, 0, -2)
t = m * a3d.utilities.Vector3.ORIGIN;
Новые добавленные методы в классах Matrix4
и TransformBuilder
-это утилиты для разработчиков для моделирования сцены за программой, поэтому им не нужно вручную строить матрицу преобразования, ее обычно используют опытные разработчики.
Порядковые разработчики могут использовать свойство Transform
класса Node
для изменения преобразования/масштабирования/вращения объекта.
Разработчики также могут присвоить матрицу, созданную TransformBuilder
, Node.Transform
.
Более подробную информацию о матрице трансформации можно найти в ВикипедииМатрица трансформацииИАффинная трансформация