Matrix

class Matrix(l)

Представляет матрицу 4x4, которая используется в различных местах в Ren'Py.

При использовании для преобразования координат 16 элементов этой матрицы таковы:

xdx, xdy, xdz, xdw,
ydx, ydy, ydz, ydw,
zdx, zdy, zdz, zdw,
wdx, wdy, wdz, wdw

где x' = xdx * x + xdy * y + xdz * z + xdw * w, где x — исходное значение x, а x' — преобразованное значение, и аналогично для x, y, z и w. Обычно это применяется к позиции, где w равно 1, что позволяет выразить любую комбинацию сдвига, вращения и масштабирования в одной матрице.

При использовании для преобразования цветов 16 элементов этой матрицы таковы:

rdr, rdg, rdb, rda,
gdr, gdg, gdg, gda,
bdr, bdg, bdb, bda,
adr, adg, adb, ada,

Для красного, зелёного, синего и альфа-каналов.

Объекты Matrix можно перемножать с помощью оператора умножения Python, чтобы создать матрицу, которая выполняет обе операции. Порядок, в котором расположены матрицы, может иметь значение. Предполагая, что v — это позиция или цвет, который преобразуется:

(step2 * step1) * v

эквивалентно:

step2 * (step1 * v)
l

Это может быть список из 4, 9 или 16 чисел, который используется для инициализации этой матрицы. Если заданы не все 16, инициализируется верхний левый угол матрицы, при этом zdz и wdw устанавливаются в 1.0, если они не заданы. Например:

Matrix([ 1, 2, 3, 4 ])

приведёт к матрице:

1.0, 2.0, 0.0, 0.0,
3.0, 4.0, 0.0, 0.0,
0.0, 0.0, 1.0, 0.0,
0.0, 0.0, 0.0, 1.0,
Matrix.identity()

Возвращает единичную матрицу.

Matrix.offset(x, y, z)

Возвращает матрицу, которая смещает вершину (vertex) на фиксированную величину.

Matrix.perspective(w, h, n, p, f)

Возвращает матрицу, подходящую для перспективной проекции изображения в системе координат Ren'Py. Это вид в систему координат, где при z=0 (0, 0) соответствует верхнему левому углу экрана, а (w, h) — правому нижнему углу экрана.

w, h

Ширина и высота входной плоскости, в пикселях.

n

Расстояние от камеры до ближней плоскости отсечения.

p

Расстояние от камеры до плоскости z=0. Это также место, где один виртуальный пиксель равен одной единице координат по x и y.

f

Расстояние от камеры до дальней плоскости отсечения.

Matrix.rotate(x, y, z)

Возвращает матрицу, которая вращает displayable вокруг начала координат.

x, y, z

Угол вращения вокруг начала координат, в градусах.

Вращения применяются в следующем порядке:

  • Вращение по часовой стрелке на x градусов в плоскости Y/Z.

  • Вращение по часовой стрелке на y градусов в плоскости Z/X.

  • Вращение по часовой стрелке на z градусов в плоскости X/Y.

Matrix.scale(x, y, z)

Возвращает матрицу, которая масштабирует displayable.

x, y, z

Коэффициент масштабирования для каждой оси.