Để áp dụng ma trận biến đổi 4 x 4 chung cho một đỉnh được biểu thị dưới dạng vectơ 3 chiều, bạn cần phải:
Mở rộng vectơ vào chiều thứ 4 bằng cách thêm 1 làm thành phần w:
(x, y, z) => (x, y, z, 1)
Nhân ma trận biến đổi với vectơ 4 chiều ở trên. Kết quả sẽ là một vectơ 4 chiều khác:
( 4x4 matrix ) * (x, y, z, 1) => (tx, ty, tz, w)
Công thức chung để nhân ma trận 4 x 4 với vectơ 4x1 là (nếu tôi không làm hỏng):
[ m11 m12 m13 m14 ][ x ] [ m11 * x + m12 * y + m13 * z + m14 * w ]
[ m21 m22 m23 m24 ][ y ] [ m21 * x + m22 * y + m23 * z + m24 * w ]
[ m31 m32 m33 m34 ][ z ] = [ m31 * x + m32 * y + m33 * z + m34 * w ]
[ m41 m42 m43 m44 ][ w ] [ m41 * x + m42 * y + m43 * z + m44 * w ]
Hoặc nếu bạn xem xét cấu hình thông thường của ma trận biến đổi:
[ m11 m12 m13 px ][ x ] [ m11 * x + m12 * y + m13 * z + px ]
[ m21 m22 m23 py ][ y ] [ m21 * x + m22 * y + m23 * z + py ]
[ m31 m32 m33 pz ][ z ] = [ m31 * x + m32 * y + m33 * z + pz ]
[ 0 0 0 1 ][ 1 ] [ 1 ]
Chuyển đổi nó trở lại chiều thứ 3 bằng cách đồng nhất hóa vectơ, tức là chia mọi thứ cho thành phần thứ tư w
:
(tx, ty, tz, w) => (tx/w, ty/w, tz/w)
Vấn đề là nếu ma trận biến đổi của bạn chỉ thực hiện một bản dịch / xoay / tỷ lệ đơn giản, giá trị của w
sẽ là 1 và bạn chỉ có thể bỏ thành phần thứ tư vì nó sẽ giống như chia cho 1.
Nhưng thật tốt khi nhớ rằng việc thả thành phần w không hoạt động cho mọi trường hợp, ví dụ với ma trận chiếu bạn phải nhớ để thực hiện bước thứ ba này.