행렬

class Matrix(l)

Ren'Py의 여러 곳에서 사용하는 4x4 행렬을 나타냅니다.

좌표 변환에 사용할 때 이 행렬의 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'는 변환된 값입니다. 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 ])

아래 Matrix가 됩니다.

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)

정점을 일정한 양만큼 이동시키는 행렬을 반환합니다.

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)

디스플레이어블을 원점 주위로 회전시키는 행렬을 반환합니다.

x, y, z

원점 주위로 회전할 각도입니다. 단위는 도입니다.

회전은 다음 순서로 적용됩니다.

  • Y/Z 평면에서 x도만큼 시계 방향으로 회전합니다.

  • Z/X 평면에서 y도만큼 시계 방향으로 회전합니다.

  • X/Y 평면에서 z도만큼 시계 방향으로 회전합니다.

Matrix.scale(x, y, z)

디스플레이어블의 크기를 조절하는 행렬을 반환합니다.

x, y, z

각 축의 크기를 조절할 배율입니다.